diff options
| -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 | 
