summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Herve <therve@redhat.com>2016-09-12 15:14:41 +0200
committerThomas Herve <therve@redhat.com>2016-10-15 20:58:34 +0200
commit4ca29508112aa3c2c5b1ad5a39dd959ab05a4440 (patch)
treea7a4bb1afa46b99cb2de6ef04edf2c9cee7e8048
parentf2182e12fa0ae3510cf2a4569f3f2a9e495f2350 (diff)
downloadheat-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
-rw-r--r--heat/engine/resources/openstack/barbican/container.py2
-rw-r--r--heat/engine/resources/openstack/barbican/order.py2
-rw-r--r--heat/engine/resources/openstack/barbican/secret.py2
-rw-r--r--heat/engine/resources/openstack/cinder/volume.py2
-rw-r--r--heat/engine/resources/openstack/designate/domain.py2
-rw-r--r--heat/engine/resources/openstack/heat/remote_stack.py2
-rw-r--r--heat/engine/resources/openstack/manila/share.py2
-rw-r--r--heat/engine/resources/openstack/manila/share_network.py2
-rw-r--r--heat/engine/resources/openstack/mistral/cron_trigger.py2
-rw-r--r--heat/engine/resources/openstack/neutron/neutron.py2
-rw-r--r--heat/engine/resources/openstack/neutron/port.py2
-rw-r--r--heat/engine/resources/openstack/nova/flavor.py2
-rw-r--r--heat/engine/resources/openstack/nova/floatingip.py2
-rw-r--r--heat/engine/resources/openstack/nova/server.py2
-rw-r--r--heat/engine/resources/openstack/sahara/cluster.py2
-rw-r--r--heat/engine/resources/openstack/senlin/cluster.py2
-rw-r--r--heat/engine/resources/openstack/senlin/node.py2
-rw-r--r--heat/engine/resources/openstack/senlin/receiver.py2
-rw-r--r--heat/engine/resources/openstack/trove/cluster.py2
-rw-r--r--heat/engine/resources/openstack/trove/os_database.py2
-rw-r--r--heat/tests/openstack/nova/test_server.py1
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'),