diff --git a/heat/engine/resources/openstack/keystone/region.py b/heat/engine/resources/openstack/keystone/region.py index 7dad0d33d5..b52cf009dc 100644 --- a/heat/engine/resources/openstack/keystone/region.py +++ b/heat/engine/resources/openstack/keystone/region.py @@ -18,6 +18,7 @@ from heat.engine import constraints from heat.engine import properties from heat.engine import resource from heat.engine import support +from heat.engine import translation class KeystoneRegion(resource.Resource): @@ -68,6 +69,17 @@ class KeystoneRegion(resource.Resource): ) } + def translation_rules(self, properties): + return [ + translation.TranslationRule( + properties, + translation.TranslationRule.RESOLVE, + [self.PARENT_REGION], + client_plugin=self.client_plugin(), + finder='get_region_id' + ) + ] + def client(self): return super(KeystoneRegion, self).client().client @@ -98,6 +110,13 @@ class KeystoneRegion(resource.Resource): enabled=enabled ) + def parse_live_resource_data(self, resource_properties, resource_data): + return { + self.DESCRIPTION: resource_data.get(self.DESCRIPTION), + self.ENABLED: resource_data.get(self.ENABLED), + self.PARENT_REGION: resource_data.get('parent_region_id') + } + def resource_mapping(): return { diff --git a/heat/tests/openstack/keystone/test_region.py b/heat/tests/openstack/keystone/test_region.py index a156f3bd00..92169e2ec0 100644 --- a/heat/tests/openstack/keystone/test_region.py +++ b/heat/tests/openstack/keystone/test_region.py @@ -145,3 +145,23 @@ class KeystoneRegionTest(common.HeatTestCase): enabled=prop_diff[region.KeystoneRegion.ENABLED], parent_region='test_parent_region' ) + + def test_region_get_live_state(self): + self.test_region.resource_id = '477e8273-60a7-4c41-b683-fdb0bc7cd151' + mock_dict = mock.MagicMock() + mock_dict.to_dict.return_value = { + "parent_region_id": None, + "enabled": True, + "id": "79e4d02f8b454a7885c413d5d4297813", + "links": {"self": "link"}, + "description": "" + } + self.regions.get.return_value = mock_dict + + reality = self.test_region.get_live_state(self.test_region.properties) + expected = { + "parent_region": None, + "enabled": True, + "description": "" + } + self.assertEqual(expected, reality)