diff --git a/heat/engine/resources/openstack/keystone/endpoint.py b/heat/engine/resources/openstack/keystone/endpoint.py index 380b342518..6941f842a5 100644 --- a/heat/engine/resources/openstack/keystone/endpoint.py +++ b/heat/engine/resources/openstack/keystone/endpoint.py @@ -92,7 +92,14 @@ class KeystoneEndpoint(resource.Resource): [self.SERVICE], client_plugin=self.client_plugin(), finder='get_service_id' - ) + ), + translation.TranslationRule( + props, + translation.TranslationRule.RESOLVE, + [self.REGION], + client_plugin=self.client_plugin(), + finder='get_region_id' + ), ] def client(self): @@ -138,6 +145,16 @@ class KeystoneEndpoint(resource.Resource): name=name, enabled=enabled) + def parse_live_resource_data(self, resource_properties, resource_data): + endpoint_reality = {} + + endpoint_reality.update( + {self.SERVICE: resource_data.get('service_id'), + self.REGION: resource_data.get('region_id')}) + for key in (set(self.PROPERTIES) - {self.SERVICE, self.REGION}): + endpoint_reality.update({key: resource_data.get(key)}) + return endpoint_reality + def resource_mapping(): return { diff --git a/heat/tests/openstack/keystone/test_endpoint.py b/heat/tests/openstack/keystone/test_endpoint.py index da5a1502a0..9accc4cd60 100644 --- a/heat/tests/openstack/keystone/test_endpoint.py +++ b/heat/tests/openstack/keystone/test_endpoint.py @@ -375,3 +375,30 @@ class KeystoneEndpointTest(common.HeatTestCase): self.endpoints.get.return_value = mock_endpoint attrs = rsrc._show_resource() self.assertEqual({'attr': 'val'}, attrs) + + def test_get_live_state(self): + rsrc = self._setup_endpoint_resource('test_get_live_state') + mock_endpoint = mock.Mock() + mock_endpoint.to_dict.return_value = { + 'region_id': 'RegionOne', + 'links': {'self': 'some_link'}, + 'url': 'http://127.0.0.1:8004/v1/1234', + 'region': 'RegionOne', + 'enabled': True, + 'interface': 'admin', + 'service_id': '934f10ea63c24d82a8d9370cc0a1cb3b', + 'id': '7f1944ae8c524e2799119b5f2dcf9781', + 'name': 'fake'} + self.endpoints.get.return_value = mock_endpoint + + reality = rsrc.get_live_state(rsrc.properties) + expected = { + 'region': 'RegionOne', + 'enabled': True, + 'interface': 'admin', + 'service': '934f10ea63c24d82a8d9370cc0a1cb3b', + 'name': 'fake', + 'url': 'http://127.0.0.1:8004/v1/1234' + } + + self.assertEqual(expected, reality)