diff --git a/manifests/ec2-ebs-debian-official-amd64-hvm.manifest.json b/manifests/ec2-ebs-debian-official-amd64-hvm.manifest.json index 702d5fb..43806d2 100644 --- a/manifests/ec2-ebs-debian-official-amd64-hvm.manifest.json +++ b/manifests/ec2-ebs-debian-official-amd64-hvm.manifest.json @@ -45,7 +45,8 @@ }, "cloud_init": { "username": "admin", - "metadata_sources": "Ec2" + //"metadata_sources": "Ec2", + "disable_modules": [ "landscape", "byobu", "ssh-import-id" ] } } } diff --git a/manifests/ec2-ebs-debian-official-amd64-pvm.manifest.json b/manifests/ec2-ebs-debian-official-amd64-pvm.manifest.json index ffcf6b1..b5094e7 100644 --- a/manifests/ec2-ebs-debian-official-amd64-pvm.manifest.json +++ b/manifests/ec2-ebs-debian-official-amd64-pvm.manifest.json @@ -45,7 +45,8 @@ }, "cloud_init": { "username": "admin", - "metadata_sources": "Ec2" + //"metadata_sources": "Ec2", + "disable_modules": [ "landscape", "byobu", "ssh-import-id" ] } } } diff --git a/manifests/ec2-ebs-debian-official-i386-pvm.manifest.json b/manifests/ec2-ebs-debian-official-i386-pvm.manifest.json index 6428272..285d3e5 100644 --- a/manifests/ec2-ebs-debian-official-i386-pvm.manifest.json +++ b/manifests/ec2-ebs-debian-official-i386-pvm.manifest.json @@ -45,7 +45,8 @@ }, "cloud_init": { "username": "admin", - "metadata_sources": "Ec2" + //"metadata_sources": "Ec2", + "disable_modules": [ "landscape", "byobu", "ssh-import-id" ] } } } diff --git a/plugins/cloud_init/__init__.py b/plugins/cloud_init/__init__.py index b352bf3..d80033f 100644 --- a/plugins/cloud_init/__init__.py +++ b/plugins/cloud_init/__init__.py @@ -23,9 +23,11 @@ def validate_manifest(data, schema_validate): def resolve_tasks(tasklist, manifest): from tasks import SetUsername from tasks import SetMetadataSource + from tasks import AutoSetMetadataSource + from tasks import DisableModules from providers.ec2.tasks.initd import AddEC2InitScripts from common.tasks import initd - tasklist.add(SetUsername, SetMetadataSource) + tasklist.add(SetUsername, AutoSetMetadataSource, SetMetadataSource, DisableModules) tasklist.remove(AddEC2InitScripts, initd.AddExpandRoot, initd.AdjustExpandRootScript, diff --git a/plugins/cloud_init/manifest-schema.json b/plugins/cloud_init/manifest-schema.json index 9909339..719716a 100644 --- a/plugins/cloud_init/manifest-schema.json +++ b/plugins/cloud_init/manifest-schema.json @@ -12,6 +12,13 @@ "username": { "type": "string" }, + "disable_modules": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, "metadata_sources": { "type": "string" } diff --git a/plugins/cloud_init/tasks.py b/plugins/cloud_init/tasks.py index 9402032..cea1b6a 100644 --- a/plugins/cloud_init/tasks.py +++ b/plugins/cloud_init/tasks.py @@ -3,6 +3,7 @@ from common import phases from plugins.packages.tasks import InstallRemotePackages from common.tasks import apt from common.tools import log_check_call +import re class SetUsername(Task): @@ -28,6 +29,47 @@ class SetMetadataSource(Task): successors = [apt.AptUpdate] def run(self, info): - sources = "cloud-init cloud-init/datasources multiselect " + info.manifest.plugins['cloud_init']['metadata_sources'] - log_check_call(['/usr/sbin/chroot', info.root, '/usr/bin/debconf-set-selections' ], sources) + if "metadata_sources" in info.manifest.plugins['cloud_init']: + sources = "cloud-init cloud-init/datasources multiselect " + info.manifest.plugins['cloud_init']['metadata_sources'] + log_check_call(['/usr/sbin/chroot', info.root, '/usr/bin/debconf-set-selections' ], sources) + +class AutoSetMetadataSource(Task): + description = 'Auto-setting metadata source' + phase = phases.system_modification + predecessors = [apt.AptSources] + successors = [SetMetadataSource] + def run(self, info): + sources = "" + if info.manifest.provider == "ec2": + sources = "Ec2" + + if sources: + sources = "cloud-init cloud-init/datasources multiselect " + sources + log_check_call(['/usr/sbin/chroot', info.root, '/usr/bin/debconf-set-selections' ], sources) + +class DisableModules(Task): + description = 'Setting cloud.cfg modules' + phase = phases.system_modification + predecessors = [apt.AptUpgrade] + + def run(self, info): + patterns = "" + for pattern in info.manifest.plugins['cloud_init']['disable_modules']: + if patterns != "": + patterns = patterns + "|" + pattern + else: + patterns = "^\s+-\s+(" + pattern + patterns = patterns + ")$" + regex = re.compile(patterns) + + f = open(info.root + "/etc/cloud/cloud.cfg") + lines = f.readlines() + f.close() + + print("Pattern to match is " + patterns + "\n") + f = open(info.root + "/etc/cloud/cloud.cfg", "w") + for line in lines: + if not regex.match(line): + f.write(line) + f.close