Merge the old user style with the distro provided config.

When the old user: style entry is found, don't forget that
we need to use the distro settings that are provided but
override the name with the new name, this is now accomplished
by merging them together in the correct order (using the standard
cloud-init merging algo).
This commit is contained in:
harlowja 2013-01-19 17:51:24 -08:00
parent d8272fcf5d
commit ccb954b235

View File

@ -714,7 +714,7 @@ def normalize_users_groups(cfg, distro):
# Handle the previous style of doing this where the first user # Handle the previous style of doing this where the first user
# overrides the concept of the default user if provided in the user: XYZ # overrides the concept of the default user if provided in the user: XYZ
# format. # format.
old_user = None old_user = {}
if 'user' in cfg and cfg['user']: if 'user' in cfg and cfg['user']:
old_user = cfg['user'] old_user = cfg['user']
# Translate it into the format that is more useful # Translate it into the format that is more useful
@ -724,28 +724,32 @@ def normalize_users_groups(cfg, distro):
'name': old_user, 'name': old_user,
} }
if not isinstance(old_user, (dict)): if not isinstance(old_user, (dict)):
LOG.warn(("Format for 'user:' key must be a string or " LOG.warn(("Format for 'user' key must be a string or "
"dictionary and not %s"), util.obj_name(old_user)) "dictionary and not %s"), util.obj_name(old_user))
old_user = None old_user = {}
default_user_config = None # If no old user format, then assume the distro
if not old_user: # provides what the 'default' user maps to, but notice
# If no old user format, then assume the distro # that if this is provided, we won't automatically inject
# provides what the 'default' user maps to, but notice # a 'default' user into the users list, while if a old user
# that if this is provided, we won't automatically inject # format is provided we will.
# a 'default' user into the users list, while if a old user distro_user_config = {}
# format is provided we will. try:
try: distro_user_config = distro.get_default_user()
default_user_config = distro.get_default_user() except NotImplementedError:
except NotImplementedError: LOG.warn(("Distro has not implemented default user "
LOG.warn(("Distro has not implemented default user " "access. No distribution provided default user"
"access. No default user will be normalized.")) " will be normalized."))
else:
default_user_config = dict(old_user) # Merge the old user (which may just be an empty dict when not
# present with the distro provided default user configuration so
# that the old user style picks up all the distribution specific
# attributes (if any)
default_user_config = util.mergemanydict([old_user, distro_user_config])
base_users = cfg.get('users', []) base_users = cfg.get('users', [])
if not isinstance(base_users, (list, dict, str, basestring)): if not isinstance(base_users, (list, dict, str, basestring)):
LOG.warn(("Format for 'users:' key must be a comma separated string" LOG.warn(("Format for 'users' key must be a comma separated string"
" or a dictionary or a list and not %s"), " or a dictionary or a list and not %s"),
util.obj_name(base_users)) util.obj_name(base_users))
base_users = [] base_users = []