From c14687a171a177b48acc3e5544031bac3cc1173e Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Sat, 4 Jun 2016 22:04:09 +0200 Subject: [PATCH] cloud-init: Add option to enable modules Snatched from PR #256 by @JamesBromberger --- bootstrapvz/plugins/cloud_init/__init__.py | 2 ++ .../plugins/cloud_init/manifest-schema.yml | 9 +++++++ bootstrapvz/plugins/cloud_init/tasks.py | 26 ++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/bootstrapvz/plugins/cloud_init/__init__.py b/bootstrapvz/plugins/cloud_init/__init__.py index 95fa97f..1c94924 100644 --- a/bootstrapvz/plugins/cloud_init/__init__.py +++ b/bootstrapvz/plugins/cloud_init/__init__.py @@ -26,6 +26,8 @@ def resolve_tasks(taskset, manifest): taskset.add(tasks.SetUsername) if 'groups' in options and len(options['groups']): taskset.add(tasks.SetGroups) + if 'enable_modules' in options: + taskset.add(tasks.EnableModules) 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 704e925..efa5f78 100644 --- a/bootstrapvz/plugins/cloud_init/manifest-schema.yml +++ b/bootstrapvz/plugins/cloud_init/manifest-schema.yml @@ -31,5 +31,14 @@ properties: type: array items: {type: string} uniqueItems: true + enable_modules: + type: object + properties: + cloud_init_modules: + type: array + properties: + module: {type: string} + position: { type: number} + additionalProperties: false required: [username] additionalProperties: false diff --git a/bootstrapvz/plugins/cloud_init/tasks.py b/bootstrapvz/plugins/cloud_init/tasks.py index 2d1aee4..9282da5 100644 --- a/bootstrapvz/plugins/cloud_init/tasks.py +++ b/bootstrapvz/plugins/cloud_init/tasks.py @@ -77,7 +77,7 @@ class SetMetadataSource(Task): class DisableModules(Task): - description = 'Setting cloud.cfg modules' + description = 'Disabling cloud.cfg modules' phase = phases.system_modification @classmethod @@ -97,3 +97,27 @@ class DisableModules(Task): for line in fileinput.input(files=cloud_cfg, inplace=True): if not regex.match(line): print line, + + +class EnableModules(Task): + description = 'Enabling cloud.cfg modules' + phase = phases.system_modification + + @classmethod + def run(cls, info): + import fileinput + import re + cloud_cfg = os.path.join(info.root, 'etc/cloud/cloud.cfg') + for section in info.manifest.plugins['cloud_init']['enable_modules']: + regex = re.compile("^%s:" % section) + for entry in info.manifest.plugins['cloud_init']['enable_modules'][section]: + count = 0 + counting = 0 + for line in fileinput.input(files=cloud_cfg, inplace=True): + if regex.match(line) and not counting: + counting = True + if counting: + count = count + 1 + if int(entry['position']) == int(count): + print(" - %s" % entry['module']) + print line,