Integration test for software-config tools

This test currently exercises the following hooks:
- script
- puppet
- cfn-init
This requires devstack building a custom image. Since gating doesn't
yet have a test image available the test is skipped by default via
config value skip_software_config_tests.

To run this test locally, build your own custom image and set
skip_software_config_tests=false in
heat_integrationtests/heat_integrationtests.conf

Change-Id: I9d27664638de95e52bc954e1fa00299e6711de90
diff --git a/common/config.py b/common/config.py
index ec7df2e..d4d41b0 100644
--- a/common/config.py
+++ b/common/config.py
@@ -85,6 +85,9 @@
     cfg.IntOpt('tenant_network_mask_bits',
                default=28,
                help="The mask bits for tenant ipv4 subnets"),
+    cfg.BoolOpt('skip_software_config_tests',
+                default=True,
+                help="Skip software config deployment tests"),
     cfg.IntOpt('volume_size',
                default=1,
                help='Default size in GB for volumes created by volumes tests'),
diff --git a/common/test.py b/common/test.py
index c8bce8b..02f7f8a 100644
--- a/common/test.py
+++ b/common/test.py
@@ -311,7 +311,8 @@
 
         stack = self.client.stacks.get(name)
         stack_identifier = '%s/%s' % (name, stack.id)
-        self._wait_for_stack_status(stack_identifier, expected_status)
+        if expected_status:
+            self._wait_for_stack_status(stack_identifier, expected_status)
         return stack_identifier
 
     def stack_adopt(self, stack_name=None, files=None,