summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--devstack/lib/heat3
-rw-r--r--heat/engine/resources/openstack/nova/server.py12
-rw-r--r--heat/engine/resources/openstack/senlin/cluster.py8
-rw-r--r--heat/tests/openstack/senlin/test_cluster.py4
-rw-r--r--heat/tests/test_engine_service.py50
-rw-r--r--releasenotes/notes/honor-hidden-parameter-in-stack-env-show-cmd-062065545dfef82a.yaml4
6 files changed, 72 insertions, 9 deletions
diff --git a/devstack/lib/heat b/devstack/lib/heat
index 8e953ca26..170d034eb 100644
--- a/devstack/lib/heat
+++ b/devstack/lib/heat
@@ -437,7 +437,8 @@ function configure_tempest_for_heat {
# Skip AutoscalingLoadBalancerTest and AutoscalingLoadBalancerv2Test as deprecated neutron-lbaas service is not enabled
# Skip CfnInitIntegrationTest as latest fedora images don't have heat-cfntools
iniset $TEMPEST_CONFIG heat_plugin skip_scenario_test_list 'AutoscalingLoadBalancerTest, AutoscalingLoadBalancerv2Test, \
- SoftwareConfigIntegrationTest, AodhAlarmTest, CfnInitIntegrationTest'
+ SoftwareConfigIntegrationTest, AodhAlarmTest, CfnInitIntegrationTest, \
+ BasicResourcesTest'
# Skip LoadBalancerv2Test as deprecated neutron-lbaas service is not enabled.
# Also Skip a few tests failing because of a known libvirt issue in Jammy
# https://bugs.launchpad.net/nova/+bug/1998274
diff --git a/heat/engine/resources/openstack/nova/server.py b/heat/engine/resources/openstack/nova/server.py
index 6cb782a4a..700527dee 100644
--- a/heat/engine/resources/openstack/nova/server.py
+++ b/heat/engine/resources/openstack/nova/server.py
@@ -944,9 +944,19 @@ class Server(server_base.BaseServer, sh.SchedulerHintsMixin,
def parse_live_resource_data(self, resource_properties, resource_data):
server, server_data = resource_data
+ flavor = server_data.get(self.FLAVOR)
+ # NOTE(pas-ha) since compute API 2.47 flavor in instance
+ # does not have "id" but "original_name" instead,
+ # check for both here, and fail if none of them are in flavor.
+ if "id" in flavor:
+ flavor_value = flavor["id"]
+ elif "original_name" in flavor:
+ flavor_value = flavor["original_name"]
+ else:
+ raise KeyError("Flavor does not contain id or original_name")
result = {
# there's a risk that flavor id will be int type, so cast to str
- self.FLAVOR: str(server_data.get(self.FLAVOR)['id']),
+ self.FLAVOR: str(flavor_value),
self.IMAGE: str(server_data.get(self.IMAGE)['id']),
self.NAME: server_data.get(self.NAME),
self.METADATA: server_data.get(self.METADATA),
diff --git a/heat/engine/resources/openstack/senlin/cluster.py b/heat/engine/resources/openstack/senlin/cluster.py
index 02c59fa64..6d68bb919 100644
--- a/heat/engine/resources/openstack/senlin/cluster.py
+++ b/heat/engine/resources/openstack/senlin/cluster.py
@@ -322,11 +322,11 @@ class Cluster(res_base.BaseSenlinResource):
params['cluster'] = cluster_obj
if self.PROFILE in params:
params['profile_id'] = params.pop(self.PROFILE)
+
+ self.client().update_cluster(**params)
action = {
- 'func': 'update_cluster',
- 'params': params,
- 'action_id': None,
- 'done': False,
+ 'cluster_id': self.resource_id,
+ 'done': False
}
actions.append(action)
# Resize Cluster
diff --git a/heat/tests/openstack/senlin/test_cluster.py b/heat/tests/openstack/senlin/test_cluster.py
index 32b39fb54..5a451801c 100644
--- a/heat/tests/openstack/senlin/test_cluster.py
+++ b/heat/tests/openstack/senlin/test_cluster.py
@@ -196,7 +196,7 @@ class SenlinClusterTest(common.HeatTestCase):
rsrc_defns = template.Template(new_t).resource_definitions(self.stack)
new_cluster = rsrc_defns['senlin-cluster']
self.senlin_mock.update_cluster.return_value = mock.Mock(
- location='/actions/fake-action')
+ cluster=new_cluster)
self.senlin_mock.get_action.return_value = mock.Mock(
status='SUCCEEDED')
scheduler.TaskRunner(cluster.update, new_cluster)()
@@ -207,7 +207,7 @@ class SenlinClusterTest(common.HeatTestCase):
}
self.senlin_mock.update_cluster.assert_called_once_with(
cluster=self.fake_cl, **cluster_update_kwargs)
- self.assertEqual(2, self.senlin_mock.get_action.call_count)
+ self.assertEqual(1, self.senlin_mock.get_action.call_count)
def test_cluster_update_desire_capacity(self):
cluster = self._create_cluster(self.t)
diff --git a/heat/tests/test_engine_service.py b/heat/tests/test_engine_service.py
index 9ce13e308..3e505e39a 100644
--- a/heat/tests/test_engine_service.py
+++ b/heat/tests/test_engine_service.py
@@ -991,6 +991,56 @@ class StackServiceTest(common.HeatTestCase):
# Verify
self.assertEqual(env, found)
+ def test_get_environment_hidden_param(self):
+ # Setup
+ env = {
+ 'parameters': {
+ 'admin': 'testuser',
+ 'pass': 'pa55w0rd'
+ },
+ 'parameter_defaults': {
+ 'secret': 'dummy'
+ },
+ 'resource_registry': {
+ 'res': 'resource.yaml'
+ }
+ }
+ t = {
+ 'heat_template_version': '2018-08-31',
+ 'parameters': {
+ 'admin': {'type': 'string'},
+ 'pass': {'type': 'string', 'hidden': True}
+ },
+ 'resources': {
+ 'res1': {'type': 'res'}
+ }
+ }
+ files = {
+ 'resource.yaml': '''
+ heat_template_version: 2018-08-31
+ parameters:
+ secret:
+ type: string
+ hidden: true
+ '''
+ }
+ tmpl = templatem.Template(t, files=files)
+ stack = parser.Stack(self.ctx, 'get_env_stack', tmpl)
+ stack.store()
+
+ mock_get_stack = self.patchobject(self.eng, '_get_stack')
+ mock_get_stack.return_value = mock.MagicMock()
+ mock_get_stack.return_value.raw_template.environment = env
+ self.patchobject(templatem.Template, 'load', return_value=tmpl)
+
+ # Test
+ found = self.eng.get_environment(self.ctx, stack.identifier())
+
+ # Verify
+ env['parameters']['pass'] = '******'
+ env['parameter_defaults']['secret'] = '******'
+ self.assertEqual(env, found)
+
def test_get_environment_no_env(self):
# Setup
exc = exception.EntityNotFound(entity='stack', name='missing')
diff --git a/releasenotes/notes/honor-hidden-parameter-in-stack-env-show-cmd-062065545dfef82a.yaml b/releasenotes/notes/honor-hidden-parameter-in-stack-env-show-cmd-062065545dfef82a.yaml
index 385e3d4d5..8a3a366ee 100644
--- a/releasenotes/notes/honor-hidden-parameter-in-stack-env-show-cmd-062065545dfef82a.yaml
+++ b/releasenotes/notes/honor-hidden-parameter-in-stack-env-show-cmd-062065545dfef82a.yaml
@@ -1,4 +1,6 @@
---
fixes:
- |
- Honor ``hidden`` parameter in ``stack environment show`` command
+ Honor ``hidden`` parameter in get stack environment API. Now values passed
+ to hidden parameters are replaced by '******', similarly to the other
+ APIs such as show stack details API.