diff options
author | Ben Howard <ben.howard@canonical.com> | 2012-08-31 12:45:40 -0600 |
---|---|---|
committer | Ben Howard <ben.howard@canonical.com> | 2012-08-31 12:45:40 -0600 |
commit | b696c2a57821e0e1fe18400016c906b92f8c271e (patch) | |
tree | 91d6d25beded00359f318a25f9d4808cc92ed361 /cloudinit/config | |
parent | 09cec0837a20f6cfafa520aa0ff2e484e1fd9c01 (diff) | |
download | vyos-cloud-init-b696c2a57821e0e1fe18400016c906b92f8c271e.tar.gz vyos-cloud-init-b696c2a57821e0e1fe18400016c906b92f8c271e.zip |
- Converted user list to user dict to allow exclusion of the default user
on Ubuntu systems via cloud-config (LP: #1041384).
- Fixed bug with user creation on Ubuntu where the default user groups are
not set properly (LP: #1044044).
- Fixed documentation for user creation (LP: #1044508).
Diffstat (limited to 'cloudinit/config')
-rw-r--r-- | cloudinit/config/cc_ssh.py | 2 | ||||
-rw-r--r-- | cloudinit/config/cc_ssh_import_id.py | 34 | ||||
-rw-r--r-- | cloudinit/config/cc_users_groups.py | 24 |
3 files changed, 41 insertions, 19 deletions
diff --git a/cloudinit/config/cc_ssh.py b/cloudinit/config/cc_ssh.py index 439c8eb8..0ded62ba 100644 --- a/cloudinit/config/cc_ssh.py +++ b/cloudinit/config/cc_ssh.py @@ -107,7 +107,7 @@ def handle(_name, cfg, cloud, log, _args): user = cloud.distro.get_default_user() if 'users' in cfg: - user_zero = cfg['users'].keys()[0] + user_zero = cfg['users'][0] if user_zero != "default": user = user_zero diff --git a/cloudinit/config/cc_ssh_import_id.py b/cloudinit/config/cc_ssh_import_id.py index c5f07376..b3bb9bef 100644 --- a/cloudinit/config/cc_ssh_import_id.py +++ b/cloudinit/config/cc_ssh_import_id.py @@ -40,18 +40,31 @@ def handle(_name, cfg, cloud, log, args): # import for cloudinit created users elist = [] - for user in cfg['users'].keys(): - if user == "default": + for user_cfg in cfg['users']: + user = None + import_ids = [] + + if isinstance(user_cfg, str) and user_cfg == "default": user = cloud.distro.get_default_user() if not user: continue + import_ids = util.get_cfg_option_list(cfg, "ssh_import_id", []) - else: - if not isinstance(cfg['users'][user], dict): - log.debug("cfg['users'][%s] not a dict, skipping ssh_import", - user) - import_ids = util.get_cfg_option_list(cfg['users'][user], - "ssh_import_id", []) + + elif isinstance(user_cfg, dict): + user = None + import_ids = [] + + try: + user = user_cfg['name'] + import_ids = user_cfg['ssh_import_id'] + + if import_ids and isinstance(import_ids, str): + import_ids = import_ids.split(',') + + except: + log.debug("user %s is not configured for ssh_import" % user) + continue if not len(import_ids): continue @@ -59,8 +72,8 @@ def handle(_name, cfg, cloud, log, args): try: import_ssh_ids(import_ids, user, log) except Exception as exc: - util.logexc(exc, "ssh-import-id failed for: %s %s" % - (user, import_ids)) + util.logexc(log, "ssh-import-id failed for: %s %s" % + (user, import_ids), exc) elist.append(exc) if len(elist): @@ -68,6 +81,7 @@ def handle(_name, cfg, cloud, log, args): def import_ssh_ids(ids, user, log): + if not (user and ids): log.debug("empty user(%s) or ids(%s). not importing", user, ids) return diff --git a/cloudinit/config/cc_users_groups.py b/cloudinit/config/cc_users_groups.py index 1e241623..418f3330 100644 --- a/cloudinit/config/cc_users_groups.py +++ b/cloudinit/config/cc_users_groups.py @@ -38,19 +38,17 @@ def handle(name, cfg, cloud, log, _args): if 'users' in cfg: user_zero = None - for name, user_config in cfg['users'].iteritems(): - if not user_zero: - user_zero = name + for user_config in cfg['users']: # Handle the default user creation - if name == "default" and user_config: + if 'default' in user_config: log.info("Creating default user") # Create the default user if so defined try: cloud.distro.add_default_user() - if user_zero == name: + if not user_zero: user_zero = cloud.distro.get_default_user() except NotImplementedError: @@ -60,11 +58,21 @@ def handle(name, cfg, cloud, log, _args): log.warn("Distro has not implemented default user " "creation. No default user will be created") - else: + + elif isinstance(user_config, dict) and 'name' in user_config: + + name = user_config['name'] + if not user_zero: + user_zero = name + # Make options friendly for distro.create_user new_opts = {} if isinstance(user_config, dict): for opt in user_config: - new_opts[opt.replace('-', '')] = user_config[opt] + new_opts[opt.replace('-', '_')] = user_config[opt] + + cloud.distro.create_user(**new_opts) - cloud.distro.create_user(name, **new_opts) + else: + # create user with no configuration + cloud.distro.create_user(user_config) |