diff options
author | Steve Baker <sbaker@redhat.com> | 2015-12-15 08:55:00 +1300 |
---|---|---|
committer | Steve Baker <sbaker@redhat.com> | 2016-03-07 13:01:40 +1300 |
commit | 55f6324cf79aca151d76f9baa0fbb37cfb1c72fb (patch) | |
tree | c5470d8379ce5cb2ad9f6df7fca4c584bf4a05b6 | |
parent | 53356991337f0ee0d86f1f051883c26dfa40f55c (diff) | |
download | heat-55f6324cf79aca151d76f9baa0fbb37cfb1c72fb.tar.gz |
Build list of enabled os-collect-config collectors
When changing the software_config_transport for an existing server,
os-collect-config will continue using the data from the old transport
which will become increasingly stale and will sometimes mask values from
the new transport.
The default list of collectors in os-collect-config is:
heat_local, ec2, cfn, heat, request, local, zaqar
This change explicitly enables these collectors:
ec2, <current transport>, local
``ec2`` is the nova metadata service, so should always be enabled.
``local`` allows local file overrides - this is generally unused but is
enabled for users who choose to use it for additional config data, or to
override the heat provided data.
``heat_local`` is only used on the first run of an unconfigured
os-collect-config for bootstrapping its own config file, so it can and
should be disabled for subsequent polling.
Change-Id: I9cdb057212c7a4404f6966a55cde9eab5ad86759
Closes-Bug: #1523676
(cherry picked from commit 5d1762fec6a7d3f2eaa5f7e4e7ac048e77843cb0)
-rw-r--r-- | heat/engine/resources/openstack/nova/server.py | 30 | ||||
-rw-r--r-- | heat/tests/nova/test_server.py | 24 |
2 files changed, 42 insertions, 12 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/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': []} |