summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heat/engine/resources/openstack/nova/server.py30
-rw-r--r--heat/engine/rsrc_defn.py7
-rw-r--r--heat/tests/nova/test_server.py24
3 files changed, 44 insertions, 17 deletions
diff --git a/heat/engine/resources/openstack/nova/server.py b/heat/engine/resources/openstack/nova/server.py
index 0b263b73d..6aa9c24f4 100644
--- a/heat/engine/resources/openstack/nova/server.py
+++ b/heat/engine/resources/openstack/nova/server.py
@@ -555,6 +555,9 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
meta['deployments'] = meta.get('deployments', [])
meta['os-collect-config'] = meta.get('os-collect-config', {})
occ = meta['os-collect-config']
+ collectors = ['ec2']
+ occ['collectors'] = collectors
+
# set existing values to None to override any boot-time config
occ_keys = ('heat', 'zaqar', 'cfn', 'request')
for occ_key in occ_keys:
@@ -572,21 +575,18 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
'project_id': self.stack.stack_user_project_id,
'stack_id': self.stack.identifier().stack_path(),
'resource_name': self.name}})
+ collectors.append('heat')
elif self.transport_zaqar_message(props):
queue_id = self.physical_resource_name()
self.data_set('metadata_queue_id', queue_id)
- zaqar_plugin = self.client_plugin('zaqar')
- zaqar = zaqar_plugin.create_for_tenant(
- self.stack.stack_user_project_id)
- queue = zaqar.queue(queue_id)
- queue.post({'body': meta, 'ttl': zaqar_plugin.DEFAULT_TTL})
occ.update({'zaqar': {
'user_id': self._get_user_id(),
'password': self.password,
'auth_url': self.context.auth_url,
'project_id': self.stack.stack_user_project_id,
'queue_id': queue_id}})
+ collectors.append('zaqar')
elif self.transport_poll_server_cfn(props):
occ.update({'cfn': {
@@ -595,6 +595,7 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
'secret_access_key': self.secret_key,
'stack_name': self.stack.name,
'path': '%s.Metadata' % self.name}})
+ collectors.append('cfn')
elif self.transport_poll_temp_url(props):
container = self.physical_resource_name()
@@ -611,13 +612,28 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
self.data_set('metadata_put_url', put_url)
self.data_set('metadata_object_name', object_name)
+ collectors.append('request')
occ.update({'request': {
'metadata_url': url}})
- self.client('swift').put_object(
- container, object_name, jsonutils.dumps(meta))
+ collectors.append('local')
self.metadata_set(meta)
+ # push replacement polling config to any existing push-based sources
+ queue_id = self.data().get('metadata_queue_id')
+ if queue_id:
+ zaqar_plugin = self.client_plugin('zaqar')
+ zaqar = zaqar_plugin.create_for_tenant(
+ self.stack.stack_user_project_id, self._user_token())
+ queue = zaqar.queue(queue_id)
+ queue.post({'body': meta, 'ttl': zaqar_plugin.DEFAULT_TTL})
+
+ object_name = self.data().get('metadata_object_name')
+ if object_name:
+ container = self.physical_resource_name()
+ self.client('swift').put_object(
+ container, object_name, jsonutils.dumps(meta))
+
def _register_access_key(self):
'''
Access is limited to this resource, which created the keypair
diff --git a/heat/engine/rsrc_defn.py b/heat/engine/rsrc_defn.py
index e324775ce..5c340f56f 100644
--- a/heat/engine/rsrc_defn.py
+++ b/heat/engine/rsrc_defn.py
@@ -322,6 +322,8 @@ class ResourceDefinition(ResourceDefinitionCore, collections.Mapping):
return super(ResourceDefinition, self).__eq__(other)
+ __hash__ = ResourceDefinitionCore.__hash__
+
def __iter__(self):
"""Iterate over the available CFN template keys.
@@ -377,11 +379,6 @@ class ResourceDefinition(ResourceDefinitionCore, collections.Mapping):
raise KeyError(key)
- def __hash__(self):
- """Return a hash of the ResourceDefinition object."""
- warnings.warn(self._deprecation_msg, DeprecationWarning)
- return super(ResourceDefinition, self).__hash__()
-
def __len__(self):
"""Return the number of available CFN template keys.
diff --git a/heat/tests/nova/test_server.py b/heat/tests/nova/test_server.py
index 251b74185..eb7caed5a 100644
--- a/heat/tests/nova/test_server.py
+++ b/heat/tests/nova/test_server.py
@@ -747,7 +747,8 @@ class ServersTest(common.HeatTestCase):
'path': 'WebServer.Metadata',
'secret_access_key': '8901',
'stack_name': 'software_config_s'
- }
+ },
+ 'collectors': ['ec2', 'cfn', 'local']
},
'deployments': []
}, server.metadata_get())
@@ -765,6 +766,7 @@ class ServersTest(common.HeatTestCase):
'secret_access_key': '8901',
'stack_name': 'software_config_s'
},
+ 'collectors': ['ec2', 'cfn', 'local'],
'polling_interval': 10
},
'deployments': []
@@ -826,7 +828,8 @@ class ServersTest(common.HeatTestCase):
'resource_name': 'WebServer',
'stack_id': 'software_config_s/%s' % stack.id,
'user_id': '1234'
- }
+ },
+ 'collectors': ['ec2', 'heat', 'local']
},
'deployments': []
}, server.metadata_get())
@@ -845,6 +848,7 @@ class ServersTest(common.HeatTestCase):
'stack_id': 'software_config_s/%s' % stack.id,
'user_id': '1234'
},
+ 'collectors': ['ec2', 'heat', 'local'],
'polling_interval': 10
},
'deployments': []
@@ -906,6 +910,8 @@ class ServersTest(common.HeatTestCase):
server.physical_resource_name(), object_name)
self.assertEqual(test_path, urlparse.urlparse(metadata_put_url).path)
self.assertEqual(test_path, urlparse.urlparse(metadata_url).path)
+ sc.put_object.assert_called_once_with(
+ container_name, object_name, jsonutils.dumps(md))
sc.head_container.return_value = {'x-container-object-count': '0'}
server._delete_temp_url()
@@ -924,7 +930,8 @@ class ServersTest(common.HeatTestCase):
'os-collect-config': {
'request': {
'metadata_url': metadata_url
- }
+ },
+ 'collectors': ['ec2', 'request', 'local']
},
'deployments': []
}, server.metadata_get())
@@ -939,6 +946,7 @@ class ServersTest(common.HeatTestCase):
'request': {
'metadata_url': metadata_url
},
+ 'collectors': ['ec2', 'request', 'local'],
'polling_interval': 10
},
'deployments': []
@@ -1014,7 +1022,8 @@ class ServersTest(common.HeatTestCase):
'auth_url': 'http://server.test:5000/v2.0',
'project_id': '8888',
'queue_id': queue_id
- }
+ },
+ 'collectors': ['ec2', 'zaqar', 'local']
},
'deployments': []
}, server.metadata_get())
@@ -1031,6 +1040,7 @@ class ServersTest(common.HeatTestCase):
'project_id': '8888',
'queue_id': queue_id
},
+ 'collectors': ['ec2', 'zaqar', 'local'],
'polling_interval': 10
},
'deployments': []
@@ -1602,7 +1612,8 @@ class ServersTest(common.HeatTestCase):
'path': 'WebServer.Metadata',
'secret_access_key': '8901',
'stack_name': 'update_meta_sc'
- }
+ },
+ 'collectors': ['ec2', 'cfn', 'local']
},
'deployments': []}
self.assertEqual(expected_md, server.metadata_get())
@@ -1636,6 +1647,7 @@ class ServersTest(common.HeatTestCase):
'secret_access_key': '8901',
'stack_name': 'update_meta_sc'
},
+ 'collectors': ['ec2', 'cfn', 'local'],
'polling_interval': 10
},
'deployments': []}
@@ -1669,6 +1681,7 @@ class ServersTest(common.HeatTestCase):
'secret_access_key': '8901',
'stack_name': 'update_meta_sc'
},
+ 'collectors': ['ec2', 'cfn', 'local'],
'polling_interval': 10
},
'deployments': []}
@@ -1711,6 +1724,7 @@ class ServersTest(common.HeatTestCase):
'request': {
'metadata_url': 'the_url',
},
+ 'collectors': ['ec2', 'request', 'local'],
'polling_interval': 10
},
'deployments': []}