diff options
Diffstat (limited to 'cloudinit/distros')
-rw-r--r-- | cloudinit/distros/__init__.py | 16 | ||||
-rw-r--r-- | cloudinit/distros/net_util.py | 11 |
2 files changed, 19 insertions, 8 deletions
diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py index 2599d9f2..83c2eebf 100644 --- a/cloudinit/distros/__init__.py +++ b/cloudinit/distros/__init__.py @@ -387,8 +387,20 @@ class Distro(object): # Import SSH keys if 'ssh_authorized_keys' in kwargs: - keys = set(kwargs['ssh_authorized_keys']) or [] - ssh_util.setup_user_keys(keys, name, options=None) + # Try to handle this in a smart manner. + keys = kwargs['ssh_authorized_keys'] + if isinstance(keys, (basestring, str)): + keys = [keys] + if isinstance(keys, dict): + keys = list(keys.values()) + if keys is not None: + if not isinstance(keys, (tuple, list, set)): + LOG.warn("Invalid type '%s' detected for" + " 'ssh_authorized_keys', expected list," + " string, dict, or set.", type(keys)) + else: + keys = set(keys) or [] + ssh_util.setup_user_keys(keys, name, options=None) return True diff --git a/cloudinit/distros/net_util.py b/cloudinit/distros/net_util.py index f8c34846..dd63a6a3 100644 --- a/cloudinit/distros/net_util.py +++ b/cloudinit/distros/net_util.py @@ -113,11 +113,11 @@ def translate_network(settings): for info in ifaces: if 'iface' not in info: continue + iface_details = info['iface'].split(None) + # Check if current device *may* have an ipv6 IP use_ipv6 = False - # Check if current device has an ipv6 IP - if 'inet6' in info['iface']: + if 'inet6' in iface_details: use_ipv6 = True - iface_details = info['iface'].split(None) dev_name = None if len(iface_details) >= 1: dev = iface_details[0].strip().lower() @@ -160,9 +160,8 @@ def translate_network(settings): hw_addr = hw_split[1] if hw_addr: iface_info['hwaddress'] = hw_addr - - # If ipv6 is enabled, device will have multiple IPs. - # Update the dictionary instead of overwriting it + # If ipv6 is enabled, device will have multiple IPs, so we need to + # update the dictionary instead of overwriting it... if dev_name in real_ifaces: real_ifaces[dev_name].update(iface_info) else: |