diff options
author | Joshua Harlow <harlowja@gmail.com> | 2014-11-22 12:36:46 -0800 |
---|---|---|
committer | Joshua Harlow <harlowja@gmail.com> | 2014-11-22 12:36:46 -0800 |
commit | e4d3fdb65bb31c2c3ed02ffdc14c0437379f64d8 (patch) | |
tree | a9b6b3881cc6f7cd532034f37c688c0e8ca29e98 | |
parent | ad492708076e20c20f7c8ee96b1b2250bcad7d8f (diff) | |
parent | 477a5418d55d45ddad55fcaa16ab3ac53652fdb9 (diff) | |
download | vyos-cloud-init-e4d3fdb65bb31c2c3ed02ffdc14c0437379f64d8.tar.gz vyos-cloud-init-e4d3fdb65bb31c2c3ed02ffdc14c0437379f64d8.zip |
Be more tolerant of 'ssh_authorized_keys' types
Instead of only expected a list, tuple, or set type
allow for a string type and dict to be passed in for 'ssh_authorized_keys',
and add log message that occurs if some other type is used that
can not be correctly processed.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | cloudinit/distros/__init__.py | 16 |
2 files changed, 17 insertions, 2 deletions
@@ -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 |