From a091bec1f2cf62c2dcb164ce5670051b9a08b9ea Mon Sep 17 00:00:00 2001 From: Rabi Mishra Date: Fri, 10 Jul 2015 09:26:50 +0530 Subject: [PATCH] Make 'server' property of SoftwareDeployment mandatory Change-Id: I6c1d82cc4cc6df4d5edac93537c546ac6ffcad7e Closes-Bug: #1473063 --- .../openstack/heat/software_deployment.py | 1 + heat/tests/test_software_deployment.py | 19 +++++++++++++++++++ heat/tests/test_structured_config.py | 1 + 3 files changed, 21 insertions(+) diff --git a/heat/engine/resources/openstack/heat/software_deployment.py b/heat/engine/resources/openstack/heat/software_deployment.py index b782e8758..f021b0f72 100644 --- a/heat/engine/resources/openstack/heat/software_deployment.py +++ b/heat/engine/resources/openstack/heat/software_deployment.py @@ -126,6 +126,7 @@ class SoftwareDeployment(signal_responder.SignalResponder): SERVER: properties.Schema( properties.Schema.STRING, _('ID of Nova server to apply configuration to.'), + required=True, constraints=[ constraints.CustomConstraint('nova.server') ] diff --git a/heat/tests/test_software_deployment.py b/heat/tests/test_software_deployment.py index 45a4d073f..8e92adb24 100644 --- a/heat/tests/test_software_deployment.py +++ b/heat/tests/test_software_deployment.py @@ -146,6 +146,16 @@ class SoftwareDeploymentTest(common.HeatTestCase): } } + template_no_server = { + 'HeatTemplateFormatVersion': '2012-12-12', + 'Resources': { + 'deployment_mysql': { + 'Type': 'OS::Heat::SoftwareDeployment', + 'Properties': {} + } + } + } + def setUp(self): super(SoftwareDeploymentTest, self).setUp() self.ctx = utils.dummy_context() @@ -184,6 +194,15 @@ class SoftwareDeploymentTest(common.HeatTestCase): server = self.stack['server'] self.assertTrue(server.user_data_software_config()) + def test_validate_without_server(self): + stack = utils.parse_stack(self.template_no_server) + snip = stack.t.resource_definitions(stack)['deployment_mysql'] + deployment = sd.SoftwareDeployment('deployment_mysql', snip, stack) + err = self.assertRaises(exc.StackValidationFailed, deployment.validate) + self.assertEqual("Property error: " + "Resources.deployment_mysql.Properties: " + "Property server not assigned", six.text_type(err)) + def test_validate_failed(self): template = dict(self.template_with_server) props = template['Resources']['server']['Properties'] diff --git a/heat/tests/test_structured_config.py b/heat/tests/test_structured_config.py index 92d2e8bb0..599e7a322 100644 --- a/heat/tests/test_structured_config.py +++ b/heat/tests/test_structured_config.py @@ -170,6 +170,7 @@ class StructuredDeploymentDerivedTest(common.HeatTestCase): super(StructuredDeploymentDerivedTest, self).setUp() self.ctx = utils.dummy_context() props = { + 'server': '9f1f0e00-05d2-4ca5-8602-95021f19c9d0', 'input_values': {'bar': 'baz'}, } self.template['Resources']['deploy_mysql']['Properties'] = props