From c8ab73472f7420542365464586ef9eb5389a3891 Mon Sep 17 00:00:00 2001 From: Peter Wagner Date: Sat, 16 Apr 2016 08:45:59 -0400 Subject: [PATCH] cloud-init: modify groups --- bootstrapvz/plugins/cloud_init/README.rst | 3 +++ bootstrapvz/plugins/cloud_init/__init__.py | 2 ++ .../plugins/cloud_init/manifest-schema.yml | 4 ++++ bootstrapvz/plugins/cloud_init/tasks.py | 16 ++++++++++++++++ 4 files changed, 25 insertions(+) diff --git a/bootstrapvz/plugins/cloud_init/README.rst b/bootstrapvz/plugins/cloud_init/README.rst index b5dc6c8..73439a7 100644 --- a/bootstrapvz/plugins/cloud_init/README.rst +++ b/bootstrapvz/plugins/cloud_init/README.rst @@ -13,6 +13,9 @@ Settings - ``username``: The username of the account to create. ``required`` +- ``groups``: A list of strings specifying which additional groups the account + should be added to. + ``optional`` - ``disable_modules``: A list of strings specifying which cloud-init modules should be disabled. ``optional`` diff --git a/bootstrapvz/plugins/cloud_init/__init__.py b/bootstrapvz/plugins/cloud_init/__init__.py index bc471c2..d3c8a33 100644 --- a/bootstrapvz/plugins/cloud_init/__init__.py +++ b/bootstrapvz/plugins/cloud_init/__init__.py @@ -24,6 +24,8 @@ def resolve_tasks(taskset, manifest): options = manifest.plugins['cloud_init'] if 'username' in options: taskset.add(tasks.SetUsername) + if 'groups' in options and len(options['groups']): + taskset.add(tasks.SetGroups) if 'disable_modules' in options: taskset.add(tasks.DisableModules) diff --git a/bootstrapvz/plugins/cloud_init/manifest-schema.yml b/bootstrapvz/plugins/cloud_init/manifest-schema.yml index 1950c21..704e925 100644 --- a/bootstrapvz/plugins/cloud_init/manifest-schema.yml +++ b/bootstrapvz/plugins/cloud_init/manifest-schema.yml @@ -22,6 +22,10 @@ properties: type: object properties: username: {type: string} + groups: + type: array + items: {type: string} + uniqueItems: true metadata_sources: {type: string} disable_modules: type: array diff --git a/bootstrapvz/plugins/cloud_init/tasks.py b/bootstrapvz/plugins/cloud_init/tasks.py index 2947214..b25a6c1 100644 --- a/bootstrapvz/plugins/cloud_init/tasks.py +++ b/bootstrapvz/plugins/cloud_init/tasks.py @@ -38,6 +38,22 @@ class SetUsername(Task): sed_i(cloud_cfg, search, replace) +class SetGroups(Task): + description = 'Setting groups in cloud.cfg' + phase = phases.system_modification + + @classmethod + def run(cls, info): + from bootstrapvz.common.tools import sed_i + cloud_cfg = os.path.join(info.root, 'etc/cloud/cloud.cfg') + groups = info.manifest.plugins['cloud_init']['groups'] + search = ('^ groups: \[adm, audio, cdrom, dialout, floppy, video,' + ' plugdev, dip\]$') + replace = (' groups: [adm, audio, cdrom, dialout, floppy, video,' + ' plugdev, dip, {groups}]').format(groups=', '.join(groups)) + sed_i(cloud_cfg, search, replace) + + class SetMetadataSource(Task): description = 'Setting metadata source' phase = phases.package_installation