userdata = None
userdata_list = []
- # For more information, check https://cloudinit.readthedocs.io/en/latest/reference/merging.html
- # Basically, with this, we don't override the provider's cloud config
- merge_how = yaml.safe_dump(
- {
- "merge_how": [
- {
- "name": "list",
- "settings": ["append", "recurse_dict", "recurse_list"],
- },
- {
- "name": "dict",
- "settings": ["no_replace", "recurse_list", "recurse_dict"],
- },
- ]
- },
- indent=4,
- default_flow_style=False,
- )
-
if isinstance(cloud_config, dict):
if cloud_config.get("user-data"):
if isinstance(cloud_config["user-data"], str):
- userdata_list.append(cloud_config["user-data"] + f"\n{merge_how}")
+ userdata_list.append(cloud_config["user-data"])
else:
for u in cloud_config["user-data"]:
- userdata_list.append(u + f"\n{merge_how}")
+ userdata_list.append(u)
if cloud_config.get("boot-data-drive") is not None:
config_drive = cloud_config["boot-data-drive"]
# default user
if cloud_config.get("key-pairs"):
userdata_dict["ssh-authorized-keys"] = cloud_config["key-pairs"]
- userdata_dict["system_info"] = {
- "default_user": {
- "ssh_authorized_keys": cloud_config["key-pairs"],
+ userdata_dict["users"] = [
+ {
+ "default": None,
+ "ssh-authorized-keys": cloud_config["key-pairs"],
}
- }
- userdata_dict["users"] = ["default"]
+ ]
if cloud_config.get("users"):
if "users" not in userdata_dict:
userdata_list.append(
"#cloud-config\n"
+ yaml.safe_dump(userdata_dict, indent=4, default_flow_style=False)
- + f"\n{merge_how}"
)
userdata = self._create_mimemultipart(userdata_list)
self.logger.debug("userdata: %s", userdata)
--- /dev/null
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+---
+prelude: >
+ This change reverts the fix of bug 2217, because it breaks the creation of
+ virtual machines with a config drive.
+fixes:
+ - |
+ The merge_how dictionary is wrongly appended to the user data, leading to
+ failures in the bootstrap of the VM.
+