Merge lp:~harlowja/cloud-init/group-dict-fix into lp:~cloud-init-dev/cloud-init/trunk

Proposed by Joshua Harlow
Status: Merged
Merged at revision: 707
Proposed branch: lp:~harlowja/cloud-init/group-dict-fix
Merge into: lp:~cloud-init-dev/cloud-init/trunk
Diff against target: 77 lines (+50/-4)
2 files modified
cloudinit/distros/__init__.py (+28/-4)
tests/unittests/test_distros/test_user_data_normalize.py (+22/-0)
To merge this branch: bzr merge lp:~harlowja/cloud-init/group-dict-fix
Reviewer Review Type Date Requested Status
cloud-init Commiters Pending
Review via email: mp+133768@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'cloudinit/distros/__init__.py'
--- cloudinit/distros/__init__.py 2012-11-09 22:40:41 +0000
+++ cloudinit/distros/__init__.py 2012-11-09 23:30:25 +0000
@@ -425,12 +425,36 @@
425# is the standard form used in the rest425# is the standard form used in the rest
426# of cloud-init426# of cloud-init
427def _normalize_groups(grp_cfg):427def _normalize_groups(grp_cfg):
428 if isinstance(grp_cfg, (str, basestring, list)):428 if isinstance(grp_cfg, (str, basestring)):
429 grp_cfg = grp_cfg.strip().split(",")
430 if isinstance(grp_cfg, (list)):
429 c_grp_cfg = {}431 c_grp_cfg = {}
430 for i in util.uniq_merge(grp_cfg):432 for i in grp_cfg:
431 c_grp_cfg[i] = []433 if isinstance(i, (dict)):
434 for k, v in i.items():
435 if k not in c_grp_cfg:
436 if isinstance(v, (list)):
437 c_grp_cfg[k] = list(v)
438 elif isinstance(v, (basestring, str)):
439 c_grp_cfg[k] = [v]
440 else:
441 raise TypeError("Bad group member type %s" %
442 util.obj_name(v))
443 else:
444 if isinstance(v, (list)):
445 c_grp_cfg[k].extend(v)
446 elif isinstance(v, (basestring, str)):
447 c_grp_cfg[k].append(v)
448 else:
449 raise TypeError("Bad group member type %s" %
450 util.obj_name(v))
451 elif isinstance(i, (str, basestring)):
452 if i not in c_grp_cfg:
453 c_grp_cfg[i] = []
454 else:
455 raise TypeError("Unknown group name type %s" %
456 util.obj_name(i))
432 grp_cfg = c_grp_cfg457 grp_cfg = c_grp_cfg
433
434 groups = {}458 groups = {}
435 if isinstance(grp_cfg, (dict)):459 if isinstance(grp_cfg, (dict)):
436 for (grp_name, grp_members) in grp_cfg.items():460 for (grp_name, grp_members) in grp_cfg.items():
437461
=== modified file 'tests/unittests/test_distros/test_user_data_normalize.py'
--- tests/unittests/test_distros/test_user_data_normalize.py 2012-10-23 10:18:24 +0000
+++ tests/unittests/test_distros/test_user_data_normalize.py 2012-11-09 23:30:25 +0000
@@ -30,6 +30,28 @@
30 def _norm(self, cfg, distro):30 def _norm(self, cfg, distro):
31 return distros.normalize_users_groups(cfg, distro)31 return distros.normalize_users_groups(cfg, distro)
3232
33 def test_group_dict(self):
34 distro = self._make_distro('ubuntu')
35 g = {'groups': [
36 {
37 'ubuntu': ['foo', 'bar'],
38 'bob': 'users',
39 },
40 'cloud-users',
41 {
42 'bob': 'users2',
43 },
44 ]
45 }
46 (users, groups) = self._norm(g, distro)
47 self.assertIn('ubuntu', groups)
48 ub_members = groups['ubuntu']
49 self.assertEquals(sorted(['foo', 'bar']), sorted(ub_members))
50 self.assertIn('bob', groups)
51 b_members = groups['bob']
52 self.assertEquals(sorted(['users', 'users2']),
53 sorted(b_members))
54
33 def test_basic_groups(self):55 def test_basic_groups(self):
34 distro = self._make_distro('ubuntu')56 distro = self._make_distro('ubuntu')
35 ug_cfg = {57 ug_cfg = {