diff options
-rw-r--r-- | heat/engine/resources/openstack/nova/server.py | 30 | ||||
-rw-r--r-- | heat/engine/rsrc_defn.py | 7 | ||||
-rw-r--r-- | heat/tests/nova/test_server.py | 24 |
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': []} |