From 682b747efc6ba9051562b2005280435a82d40173 Mon Sep 17 00:00:00 2001 From: James Bromberger Date: Tue, 17 Dec 2013 15:51:03 +0000 Subject: [PATCH] Permit cloud-init to be configured for its metadata sources using debconf. --- .../ec2-ebs-debian-official-amd64-hvm.manifest.json | 3 ++- .../ec2-ebs-debian-official-amd64-pvm.manifest.json | 3 ++- .../ec2-ebs-debian-official-i386-pvm.manifest.json | 3 ++- plugins/cloud_init/__init__.py | 3 ++- plugins/cloud_init/manifest-schema.json | 3 +++ plugins/cloud_init/tasks.py | 13 +++++++++++++ 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/manifests/ec2-ebs-debian-official-amd64-hvm.manifest.json b/manifests/ec2-ebs-debian-official-amd64-hvm.manifest.json index 2afe8bd..702d5fb 100644 --- a/manifests/ec2-ebs-debian-official-amd64-hvm.manifest.json +++ b/manifests/ec2-ebs-debian-official-amd64-hvm.manifest.json @@ -44,7 +44,8 @@ ] }, "cloud_init": { - "username": "admin" + "username": "admin", + "metadata_sources": "Ec2" } } } diff --git a/manifests/ec2-ebs-debian-official-amd64-pvm.manifest.json b/manifests/ec2-ebs-debian-official-amd64-pvm.manifest.json index 14cd563..ffcf6b1 100644 --- a/manifests/ec2-ebs-debian-official-amd64-pvm.manifest.json +++ b/manifests/ec2-ebs-debian-official-amd64-pvm.manifest.json @@ -44,7 +44,8 @@ ] }, "cloud_init": { - "username": "admin" + "username": "admin", + "metadata_sources": "Ec2" } } } diff --git a/manifests/ec2-ebs-debian-official-i386-pvm.manifest.json b/manifests/ec2-ebs-debian-official-i386-pvm.manifest.json index a3836ea..6428272 100644 --- a/manifests/ec2-ebs-debian-official-i386-pvm.manifest.json +++ b/manifests/ec2-ebs-debian-official-i386-pvm.manifest.json @@ -44,7 +44,8 @@ ] }, "cloud_init": { - "username": "admin" + "username": "admin", + "metadata_sources": "Ec2" } } } diff --git a/plugins/cloud_init/__init__.py b/plugins/cloud_init/__init__.py index ad9d973..b352bf3 100644 --- a/plugins/cloud_init/__init__.py +++ b/plugins/cloud_init/__init__.py @@ -22,9 +22,10 @@ def validate_manifest(data, schema_validate): def resolve_tasks(tasklist, manifest): from tasks import SetUsername + from tasks import SetMetadataSource from providers.ec2.tasks.initd import AddEC2InitScripts from common.tasks import initd - tasklist.add(SetUsername) + tasklist.add(SetUsername, SetMetadataSource) tasklist.remove(AddEC2InitScripts, initd.AddExpandRoot, initd.AdjustExpandRootScript, diff --git a/plugins/cloud_init/manifest-schema.json b/plugins/cloud_init/manifest-schema.json index 599855c..9909339 100644 --- a/plugins/cloud_init/manifest-schema.json +++ b/plugins/cloud_init/manifest-schema.json @@ -11,6 +11,9 @@ "properties": { "username": { "type": "string" + }, + "metadata_sources": { + "type": "string" } }, "required": ["username"] diff --git a/plugins/cloud_init/tasks.py b/plugins/cloud_init/tasks.py index 37883f2..9402032 100644 --- a/plugins/cloud_init/tasks.py +++ b/plugins/cloud_init/tasks.py @@ -1,6 +1,8 @@ from base import Task from common import phases from plugins.packages.tasks import InstallRemotePackages +from common.tasks import apt +from common.tools import log_check_call class SetUsername(Task): @@ -18,3 +20,14 @@ class SetUsername(Task): ' sudo: ALL=(ALL) NOPASSWD:ALL\n' ' shell: /bin/bash').format(username=username) sed_i(cloud_cfg, search, replace) + +class SetMetadataSource(Task): + description = 'Setting metadata source' + phase = phases.system_modification + predecessors = [apt.AptSources] + 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) +