orchestration add basic support for environment API test
Adds support for passing environment into create/update API calls,
and implements a basic test which proves a parameter can be passed
via an environment.
These links document this interface, which is currently not tested
in tempest:
http://api.openstack.org/api-ref-orchestration-v1.html
http://docs.openstack.org/developer/heat/template_guide/environment.html
Change-Id: Id3e3a69370603d5a700ef0d0b1dcb09a3765b09f
Partial-Bug: #1317095
diff --git a/tempest/api/orchestration/base.py b/tempest/api/orchestration/base.py
index 4e40de9..df3efdb 100644
--- a/tempest/api/orchestration/base.py
+++ b/tempest/api/orchestration/base.py
@@ -60,11 +60,13 @@
return admin_client
@classmethod
- def create_stack(cls, stack_name, template_data, parameters={}):
+ def create_stack(cls, stack_name, template_data, parameters={},
+ environment=None):
resp, body = cls.client.create_stack(
stack_name,
template=template_data,
- parameters=parameters)
+ parameters=parameters,
+ environment=environment)
stack_id = resp['location'].split('/')[-1]
stack_identifier = '%s/%s' % (stack_name, stack_id)
cls.stacks.append(stack_identifier)
diff --git a/tempest/api/orchestration/stacks/templates/random_string.yaml b/tempest/api/orchestration/stacks/templates/random_string.yaml
new file mode 100644
index 0000000..dfd2342
--- /dev/null
+++ b/tempest/api/orchestration/stacks/templates/random_string.yaml
@@ -0,0 +1,18 @@
+heat_template_version: 2013-05-23
+
+parameters:
+ random_length:
+ type: number
+ default: 10
+
+resources:
+ random:
+ type: OS::Heat::RandomString
+ properties:
+ length: {get_param: random_length}
+
+outputs:
+ random_length:
+ value: {get_param: random_length}
+ random_value:
+ value: {get_attr: [random, value]}
diff --git a/tempest/api/orchestration/stacks/test_environment.py b/tempest/api/orchestration/stacks/test_environment.py
new file mode 100644
index 0000000..7ed65e8
--- /dev/null
+++ b/tempest/api/orchestration/stacks/test_environment.py
@@ -0,0 +1,42 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import logging
+
+from tempest.api.orchestration import base
+from tempest.common.utils import data_utils
+from tempest import config
+from tempest import test
+
+
+CONF = config.CONF
+LOG = logging.getLogger(__name__)
+
+
+class StackEnvironmentTest(base.BaseOrchestrationTest):
+
+ @test.attr(type='gate')
+ def test_environment_parameter(self):
+ """Test passing a stack parameter via the environment."""
+ stack_name = data_utils.rand_name('heat')
+ template = self.load_template('random_string')
+ environment = {'parameters': {'random_length': 20}}
+
+ stack_identifier = self.create_stack(stack_name, template,
+ environment=environment)
+ self.client.wait_for_stack_status(stack_identifier, 'CREATE_COMPLETE')
+
+ random_len = self.get_stack_output(stack_identifier, 'random_length')
+ self.assertEqual(20, random_len)
+
+ random_value = self.get_stack_output(stack_identifier, 'random_value')
+ self.assertEqual(20, len(random_value))
diff --git a/tempest/services/orchestration/json/orchestration_client.py b/tempest/services/orchestration/json/orchestration_client.py
index 2311bdd..1bbdb07 100644
--- a/tempest/services/orchestration/json/orchestration_client.py
+++ b/tempest/services/orchestration/json/orchestration_client.py
@@ -45,28 +45,31 @@
return resp, body['stacks']
def create_stack(self, name, disable_rollback=True, parameters={},
- timeout_mins=60, template=None, template_url=None):
+ timeout_mins=60, template=None, template_url=None,
+ environment=None):
headers, body = self._prepare_update_create(
name,
disable_rollback,
parameters,
timeout_mins,
template,
- template_url)
+ template_url,
+ environment)
uri = 'stacks'
resp, body = self.post(uri, headers=headers, body=body)
return resp, body
def update_stack(self, stack_identifier, name, disable_rollback=True,
parameters={}, timeout_mins=60, template=None,
- template_url=None):
+ template_url=None, environment=None):
headers, body = self._prepare_update_create(
name,
disable_rollback,
parameters,
timeout_mins,
template,
- template_url)
+ template_url,
+ environment)
uri = "stacks/%s" % stack_identifier
resp, body = self.put(uri, headers=headers, body=body)
@@ -74,13 +77,15 @@
def _prepare_update_create(self, name, disable_rollback=True,
parameters={}, timeout_mins=60,
- template=None, template_url=None):
+ template=None, template_url=None,
+ environment=None):
post_body = {
"stack_name": name,
"disable_rollback": disable_rollback,
"parameters": parameters,
"timeout_mins": timeout_mins,
- "template": "HeatTemplateFormatVersion: '2012-12-12'\n"
+ "template": "HeatTemplateFormatVersion: '2012-12-12'\n",
+ "environment": environment
}
if template:
post_body['template'] = template