diff --git a/heat/engine/clients/os/nova.py b/heat/engine/clients/os/nova.py index 95a9923b71..f986a95ad6 100644 --- a/heat/engine/clients/os/nova.py +++ b/heat/engine/clients/os/nova.py @@ -448,10 +448,12 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers payload = jsonutils.loads(userdata) encoded_metadata = urlparse.quote(jsonutils.dumps(metadata)) - cfn_init_data = { + path_list = ["/var/lib/heat-cfntools/cfn-init-data", + "/var/lib/cloud/data/cfn-init-data"] + ignition_format_metadata = { "filesystem": "root", "group": {"name": "root"}, - "path": "/var/lib/os-collect-config/local-data", + "path": "", "user": {"name": "root"}, "contents": { "source": "data:," + encoded_metadata, @@ -459,16 +461,19 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers "mode": 0o640 } - storage = payload.setdefault('storage', {}) - try: - files = storage.setdefault('files', []) - except AttributeError: - raise ValueError('Ignition "storage" section must be a map') - else: + for path in path_list: + storage = payload.setdefault('storage', {}) try: - files.append(cfn_init_data) + files = storage.setdefault('files', []) except AttributeError: - raise ValueError('Ignition "files" section must be a list') + raise ValueError('Ignition "storage" section must be a map') + else: + try: + data = ignition_format_metadata.copy() + data["path"] = path + files.append(data) + except AttributeError: + raise ValueError('Ignition "files" section must be a list') return jsonutils.dumps(payload) diff --git a/heat/tests/clients/test_nova_client.py b/heat/tests/clients/test_nova_client.py index 4af266f364..32c55c7132 100644 --- a/heat/tests/clients/test_nova_client.py +++ b/heat/tests/clients/test_nova_client.py @@ -402,8 +402,10 @@ class NovaClientPluginUserdataTest(NovaClientPluginTestCase): userdata=userdata, user_data_format=ud_format) ig = json.loads(data) - self.assertEqual("/var/lib/os-collect-config/local-data", + self.assertEqual("/var/lib/heat-cfntools/cfn-init-data", ig["storage"]["files"][0]["path"]) + self.assertEqual("/var/lib/cloud/data/cfn-init-data", + ig["storage"]["files"][1]["path"]) self.assertEqual("data:,%7B%22os-collect-config%22%3A%20%7B%22heat" "%22%3A%20%7B%22password%22%3A%20%22%2A%2A%2A%22" "%7D%7D%7D",