Generate heat images for tempest tests

This requires HEAT_CREATE_TEST_IMAGE to be set for any images
to be created.

If the file (files/fedora-vm-heat-cfntools-tempest.qcow2) already
exists then disk-image-create will not be called, and the existing
image file will be registered with glance. This is most likely to
happen in the following scenarios:
- a second run of stack.sh
- the image has been pre-built elsewhere (such as during devstack-gate
  image building)
Change-Id: I276573a20927e72f2cb68784f655c1ba1913ae8a
diff --git a/lib/heat b/lib/heat
index 1b715f2..92b4e50 100644
--- a/lib/heat
+++ b/lib/heat
@@ -197,6 +197,21 @@
     done
 }
 
+function disk_image_create {
+    local elements_path=$1
+    local elements=$2
+    local arch=$3
+    local output=$TOP_DIR/files/$4
+    if [[ -f "$output.qcow2" ]];
+    then
+        echo "Image file already exists: $output_file"
+    else
+        ELEMENTS_PATH=$elements_path disk-image-create \
+            $elements -a $arch -o $output
+    fi
+    # upload with fake URL so that image in $TOP_DIR/files is used
+    upload_image "http://localhost/$output.qcow2" $TOKEN
+}
 
 # Restore xtrace
 $XTRACE
diff --git a/lib/tempest b/lib/tempest
index aaa7281..5142f24 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -24,6 +24,7 @@
 # ``DEFAULT_INSTANCE_TYPE``
 # ``DEFAULT_INSTANCE_USER``
 # ``CINDER_MULTI_LVM_BACKEND``
+# ``HEAT_CREATE_TEST_IMAGE``
 # ``stack.sh`` calls the entry points in this order:
 #
 # install_tempest
@@ -271,6 +272,12 @@
     iniset $TEMPEST_CONF boto http_socket_timeout 30
     iniset $TEMPEST_CONF boto ssh_user ${DEFAULT_INSTANCE_USER:-cirros}
 
+    # Orchestration test image
+    if [ $HEAT_CREATE_TEST_IMAGE == "True" ]; then
+        disk_image_create /usr/share/tripleo-image-elements "vm fedora heat-cfntools" "i386" "fedora-vm-heat-cfntools-tempest"
+        iniset $TEMPEST_CONF orchestration image_ref "fedora-vm-heat-cfntools-tempest"
+    fi
+
     # Scenario
     iniset $TEMPEST_CONF scenario img_dir "$FILES/images/cirros-0.3.1-x86_64-uec"