~ubuntu-branches/ubuntu/quantal/cloud-init/quantal

« back to all changes in this revision

Viewing changes to cloudinit/config/cc_users_groups.py

  • Committer: Package Import Robot
  • Author(s): Scott Moser
  • Date: 2012-09-30 14:29:04 UTC
  • Revision ID: package-import@ubuntu.com-20120930142904-nq8fkve62i0xytqz
* add CloudStack to DataSources listed by dpkg-reconfigure (LP: #1002155)
* New upstream snapshot.
  * 0440 permissions on /etc/sudoers.d files rather than 0644
  * get host ssh keys to the console (LP: #1055688)
  * MAAS DataSource adjust timestamp in oauth header to one based on the
    timestamp in the response of a 403.  This accounts for a bad local
    clock. (LP: #978127)
  * re-start the salt daemon rather than start to ensure config changes
    are taken.
  * allow for python unicode types in yaml that is loaded.
  * cleanup in how config modules get at users and groups.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
#    You should have received a copy of the GNU General Public License
17
17
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
18
 
 
19
# Ensure this is aliased to a name not 'distros'
 
20
# since the module attribute 'distros'
 
21
# is a list of distros that are supported, not a sub-module
 
22
from cloudinit import distros as ds
 
23
 
19
24
from cloudinit.settings import PER_INSTANCE
20
25
 
21
26
frequency = PER_INSTANCE
22
27
 
23
28
 
24
 
def handle(name, cfg, cloud, log, _args):
25
 
    user_zero = None
26
 
 
27
 
    if 'groups' in cfg:
28
 
        for group in cfg['groups']:
29
 
            if isinstance(group, dict):
30
 
                for name, values in group.iteritems():
31
 
                    if isinstance(values, list):
32
 
                        cloud.distro.create_group(name, values)
33
 
                    elif isinstance(values, str):
34
 
                        cloud.distro.create_group(name, values.split(','))
35
 
            else:
36
 
                cloud.distro.create_group(group, [])
37
 
 
38
 
    if 'users' in cfg:
39
 
        user_zero = None
40
 
 
41
 
        for user_config in cfg['users']:
42
 
 
43
 
            # Handle the default user creation
44
 
            if 'default' in user_config:
45
 
                log.info("Creating default user")
46
 
 
47
 
                # Create the default user if so defined
48
 
                try:
49
 
                    cloud.distro.add_default_user()
50
 
 
51
 
                    if not user_zero:
52
 
                        user_zero = cloud.distro.get_default_user()
53
 
 
54
 
                except NotImplementedError:
55
 
 
56
 
                    if user_zero == name:
57
 
                        user_zero = None
58
 
 
59
 
                    log.warn("Distro has not implemented default user "
60
 
                             "creation. No default user will be created")
61
 
 
62
 
            elif isinstance(user_config, dict) and 'name' in user_config:
63
 
 
64
 
                name = user_config['name']
65
 
                if not user_zero:
66
 
                    user_zero = name
67
 
 
68
 
                # Make options friendly for distro.create_user
69
 
                new_opts = {}
70
 
                if isinstance(user_config, dict):
71
 
                    for opt in user_config:
72
 
                        new_opts[opt.replace('-', '_')] = user_config[opt]
73
 
 
74
 
                cloud.distro.create_user(**new_opts)
75
 
 
76
 
            else:
77
 
                # create user with no configuration
78
 
                cloud.distro.create_user(user_config)
 
29
def handle(name, cfg, cloud, _log, _args):
 
30
    (users, groups) = ds.normalize_users_groups(cfg, cloud.distro)
 
31
    for (name, members) in groups.items():
 
32
        cloud.distro.create_group(name, members)
 
33
    for (user, config) in users.items():
 
34
        cloud.distro.create_user(user, **config)