summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--cloudinit/distros/__init__.py16
2 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 9d954bf7..5597e10f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,9 @@
- Increase the usefulness, robustness, configurability of the chef module
so that it is more useful, more documented and better for users
- Fix how '=' signs are not handled that well in ssh_utils (LP: #1391303)
+ - Be more tolerant of ssh keys passed into 'ssh_authorized_keys'; allowing
+ for list, tuple, set, dict, string types and warning on other unexpected
+ types
0.7.6:
- open 0.7.6
- Enable vendordata on CloudSigma datasource (LP: #1303986)
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