diff options
author | Thomas Herve <therve@redhat.com> | 2016-09-12 15:14:41 +0200 |
---|---|---|
committer | Thomas Herve <therve@redhat.com> | 2016-10-15 20:58:34 +0200 |
commit | 4ca29508112aa3c2c5b1ad5a39dd959ab05a4440 (patch) | |
tree | a7a4bb1afa46b99cb2de6ef04edf2c9cee7e8048 | |
parent | f2182e12fa0ae3510cf2a4569f3f2a9e495f2350 (diff) | |
download | heat-4ca29508112aa3c2c5b1ad5a39dd959ab05a4440.tar.gz |
Don't resolve attribute pre-storage
Handle calls to _resolve_attribute when resource_id is None, removing
useless API calls to backends.
Change-Id: I2da7bf25193dbf10207564554fca93b4571c8858
21 files changed, 41 insertions, 0 deletions
diff --git a/heat/engine/resources/openstack/barbican/container.py b/heat/engine/resources/openstack/barbican/container.py index 94777a983..91d205e14 100644 --- a/heat/engine/resources/openstack/barbican/container.py +++ b/heat/engine/resources/openstack/barbican/container.py @@ -143,6 +143,8 @@ class GenericContainer(resource.Resource): return container.status == 'ACTIVE' def _resolve_attribute(self, name): + if self.resource_id is None: + return container = self.client().containers.get(self.resource_id) return getattr(container, name, None) diff --git a/heat/engine/resources/openstack/barbican/order.py b/heat/engine/resources/openstack/barbican/order.py index c2a068316..814473745 100644 --- a/heat/engine/resources/openstack/barbican/order.py +++ b/heat/engine/resources/openstack/barbican/order.py @@ -255,6 +255,8 @@ class Order(resource.Resource): return order.status == 'ACTIVE' def _resolve_attribute(self, name): + if self.resource_id is None: + return client = self.client() order = client.orders.get(self.resource_id) if name in ( diff --git a/heat/engine/resources/openstack/barbican/secret.py b/heat/engine/resources/openstack/barbican/secret.py index c7dabfd8f..3503cdad7 100644 --- a/heat/engine/resources/openstack/barbican/secret.py +++ b/heat/engine/resources/openstack/barbican/secret.py @@ -179,6 +179,8 @@ class Secret(resource.Resource): value='application/octet-stream') def _resolve_attribute(self, name): + if self.resource_id is None: + return secret = self.client().secrets.get(self.resource_id) if name == self.DECRYPTED_PAYLOAD: diff --git a/heat/engine/resources/openstack/cinder/volume.py b/heat/engine/resources/openstack/cinder/volume.py index 1940fc518..c3684ed1c 100644 --- a/heat/engine/resources/openstack/cinder/volume.py +++ b/heat/engine/resources/openstack/cinder/volume.py @@ -281,6 +281,8 @@ class CinderVolume(vb.BaseVolume, sh.SchedulerHintsMixin): return arguments def _resolve_attribute(self, name): + if self.resource_id is None: + return cinder = self.client() vol = cinder.volumes.get(self.resource_id) if name == self.METADATA_ATTR: diff --git a/heat/engine/resources/openstack/designate/domain.py b/heat/engine/resources/openstack/designate/domain.py index 128cf32e7..c9f5502ad 100644 --- a/heat/engine/resources/openstack/designate/domain.py +++ b/heat/engine/resources/openstack/designate/domain.py @@ -109,6 +109,8 @@ class DesignateDomain(resource.Resource): self.client_plugin().domain_update(**args) def _resolve_attribute(self, name): + if self.resource_id is None: + return if name == self.SERIAL: domain = self.client().domains.get(self.resource_id) return domain.serial diff --git a/heat/engine/resources/openstack/heat/remote_stack.py b/heat/engine/resources/openstack/heat/remote_stack.py index fc807a636..f67e19063 100644 --- a/heat/engine/resources/openstack/heat/remote_stack.py +++ b/heat/engine/resources/openstack/heat/remote_stack.py @@ -289,6 +289,8 @@ class RemoteStack(resource.Resource): return self._check_action_complete(action=self.CHECK) def _resolve_attribute(self, name): + if self.resource_id is None: + return stack = self.heat().stacks.get(stack_id=self.resource_id) if name == self.NAME_ATTR: value = getattr(stack, name, None) diff --git a/heat/engine/resources/openstack/manila/share.py b/heat/engine/resources/openstack/manila/share.py index 84fb5544a..433da56ce 100644 --- a/heat/engine/resources/openstack/manila/share.py +++ b/heat/engine/resources/openstack/manila/share.py @@ -195,6 +195,8 @@ class ManilaShare(resource.Resource): return self.client().shares.get(self.resource_id) def _resolve_attribute(self, name): + if self.resource_id is None: + return share = self._request_share() return six.text_type(getattr(share, name)) diff --git a/heat/engine/resources/openstack/manila/share_network.py b/heat/engine/resources/openstack/manila/share_network.py index 1c047ba98..6dbe399dd 100644 --- a/heat/engine/resources/openstack/manila/share_network.py +++ b/heat/engine/resources/openstack/manila/share_network.py @@ -113,6 +113,8 @@ class ManilaShareNetwork(resource.Resource): return self.client().share_networks.get(self.resource_id) def _resolve_attribute(self, name): + if self.resource_id is None: + return network = self._request_network() return getattr(network, name, None) diff --git a/heat/engine/resources/openstack/mistral/cron_trigger.py b/heat/engine/resources/openstack/mistral/cron_trigger.py index 73ca60f39..67bcb387c 100644 --- a/heat/engine/resources/openstack/mistral/cron_trigger.py +++ b/heat/engine/resources/openstack/mistral/cron_trigger.py @@ -135,6 +135,8 @@ class CronTrigger(resource.Resource): self.resource_id_set(cron_trigger.name) def _resolve_attribute(self, name): + if self.resource_id is None: + return trigger = self.client().cron_triggers.get(self.resource_id) if name == self.NEXT_EXECUTION_TIME: return trigger.next_execution_time diff --git a/heat/engine/resources/openstack/neutron/neutron.py b/heat/engine/resources/openstack/neutron/neutron.py index 556295793..c54a35fe4 100644 --- a/heat/engine/resources/openstack/neutron/neutron.py +++ b/heat/engine/resources/openstack/neutron/neutron.py @@ -95,6 +95,8 @@ class NeutronResource(resource.Resource): result=_('Resource is not built')) def _resolve_attribute(self, name): + if self.resource_id is None: + return attributes = self._show_resource() return attributes[name] diff --git a/heat/engine/resources/openstack/neutron/port.py b/heat/engine/resources/openstack/neutron/port.py index 2728a14d8..24107facd 100644 --- a/heat/engine/resources/openstack/neutron/port.py +++ b/heat/engine/resources/openstack/neutron/port.py @@ -485,6 +485,8 @@ class Port(neutron.NeutronResource): return True def _resolve_attribute(self, name): + if self.resource_id is None: + return if name == self.SUBNETS_ATTR: subnets = [] try: diff --git a/heat/engine/resources/openstack/nova/flavor.py b/heat/engine/resources/openstack/nova/flavor.py index c162459bf..4b0d6a7d8 100644 --- a/heat/engine/resources/openstack/nova/flavor.py +++ b/heat/engine/resources/openstack/nova/flavor.py @@ -155,6 +155,8 @@ class NovaFlavor(resource.Resource): flavor.set_keys(new_keys) def _resolve_attribute(self, name): + if self.resource_id is None: + return flavor = self.client().flavors.get(self.resource_id) if name == self.IS_PUBLIC_ATTR: return getattr(flavor, name) diff --git a/heat/engine/resources/openstack/nova/floatingip.py b/heat/engine/resources/openstack/nova/floatingip.py index 5481b995c..7684ac5e4 100644 --- a/heat/engine/resources/openstack/nova/floatingip.py +++ b/heat/engine/resources/openstack/nova/floatingip.py @@ -98,6 +98,8 @@ class NovaFloatingIp(resource.Resource): self._floating_ip = floating_ip def _resolve_attribute(self, key): + if self.resource_id is None: + return floating_ip = self._get_resource() attributes = { self.POOL_ATTR: getattr(floating_ip, self.POOL_ATTR, None), diff --git a/heat/engine/resources/openstack/nova/server.py b/heat/engine/resources/openstack/nova/server.py index 0d06bef14..61313bb81 100644 --- a/heat/engine/resources/openstack/nova/server.py +++ b/heat/engine/resources/openstack/nova/server.py @@ -1117,6 +1117,8 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin, return nets def _resolve_attribute(self, name): + if self.resource_id is None: + return if name == self.FIRST_ADDRESS: return self.client_plugin().server_to_ipaddress( self.resource_id) or '' diff --git a/heat/engine/resources/openstack/sahara/cluster.py b/heat/engine/resources/openstack/sahara/cluster.py index def1c928f..1852cf28b 100644 --- a/heat/engine/resources/openstack/sahara/cluster.py +++ b/heat/engine/resources/openstack/sahara/cluster.py @@ -279,6 +279,8 @@ class SaharaCluster(resource.Resource): return False def _resolve_attribute(self, name): + if self.resource_id is None: + return cluster = self.client().clusters.get(self.resource_id) return getattr(cluster, name, None) diff --git a/heat/engine/resources/openstack/senlin/cluster.py b/heat/engine/resources/openstack/senlin/cluster.py index 79265283d..df9932845 100644 --- a/heat/engine/resources/openstack/senlin/cluster.py +++ b/heat/engine/resources/openstack/senlin/cluster.py @@ -254,6 +254,8 @@ class Cluster(resource.Resource): raise exception.StackValidationFailed(message=msg) def _resolve_attribute(self, name): + if self.resource_id is None: + return cluster = self.client().get_cluster(self.resource_id) return getattr(cluster, name, None) diff --git a/heat/engine/resources/openstack/senlin/node.py b/heat/engine/resources/openstack/senlin/node.py index 2ca7d53e8..2b5156a06 100644 --- a/heat/engine/resources/openstack/senlin/node.py +++ b/heat/engine/resources/openstack/senlin/node.py @@ -136,6 +136,8 @@ class Node(resource.Resource): return self.client_plugin().check_action_status(action_id) def _resolve_attribute(self, name): + if self.resource_id is None: + return node = self.client().get_node(self.resource_id, details=True) return getattr(node, name, None) diff --git a/heat/engine/resources/openstack/senlin/receiver.py b/heat/engine/resources/openstack/senlin/receiver.py index b383d14fa..ff903e0da 100644 --- a/heat/engine/resources/openstack/senlin/receiver.py +++ b/heat/engine/resources/openstack/senlin/receiver.py @@ -121,6 +121,8 @@ class Receiver(resource.Resource): return recv.to_dict() def _resolve_attribute(self, name): + if self.resource_id is None: + return recv = self.client().get_receiver(self.resource_id) return getattr(recv, name, None) diff --git a/heat/engine/resources/openstack/trove/cluster.py b/heat/engine/resources/openstack/trove/cluster.py index ec6c542f7..64372d66c 100644 --- a/heat/engine/resources/openstack/trove/cluster.py +++ b/heat/engine/resources/openstack/trove/cluster.py @@ -237,6 +237,8 @@ class TroveCluster(resource.Resource): self.DATASTORE_TYPE, self.DATASTORE_VERSION) def _resolve_attribute(self, name): + if self.resource_id is None: + return if name == self.INSTANCES_ATTR: instances = [] cluster = self.client().clusters.get(self.resource_id) diff --git a/heat/engine/resources/openstack/trove/os_database.py b/heat/engine/resources/openstack/trove/os_database.py index 833b0f31a..b0f94a8f1 100644 --- a/heat/engine/resources/openstack/trove/os_database.py +++ b/heat/engine/resources/openstack/trove/os_database.py @@ -674,6 +674,8 @@ class OSDBInstance(resource.Resource): return self._href def _resolve_attribute(self, name): + if self.resource_id is None: + return if name == self.HOSTNAME: return self.dbinstance.hostname elif name == self.HREF: diff --git a/heat/tests/openstack/nova/test_server.py b/heat/tests/openstack/nova/test_server.py index 2f5070b88..fae187204 100644 --- a/heat/tests/openstack/nova/test_server.py +++ b/heat/tests/openstack/nova/test_server.py @@ -498,6 +498,7 @@ class ServersTest(common.HeatTestCase): server = self._setup_test_server(return_server, server_name, override_name=True) + server.resource_id = '1234' interfaces = [ self._create_fake_iface('1234', 'fa:16:3e:8c:22:aa', '4.5.6.7'), |