summaryrefslogtreecommitdiff
path: root/cloudinit/distros
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/distros')
-rw-r--r--cloudinit/distros/__init__.py16
-rw-r--r--cloudinit/distros/net_util.py11
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: