Merge pull request #125 from JamesBromberger/python

Permit cloud-init to be configured for its metadata sources using debcon...
This commit is contained in:
Anders Ingemann 2013-12-29 06:02:19 -08:00
commit bc8038729a
6 changed files with 101 additions and 10 deletions

View file

@ -10,8 +10,8 @@
"workspace": "/target" "workspace": "/target"
}, },
"image": { "image": {
"name": "debian-{release}-{architecture}-{virtualization}-{%y}{%m}{%d}", "name": "debian-{release}-{architecture}-{virtualization}-{%Y}-{%m}-{%d}-ebs",
"description": "Debian {release} {architecture} AMI ({virtualization})" "description": "Debian {release} {architecture}"
}, },
"system": { "system": {
"release": "wheezy", "release": "wheezy",
@ -44,7 +44,9 @@
] ]
}, },
"cloud_init": { "cloud_init": {
"username": "admin" "username": "admin",
//"metadata_sources": "Ec2",
"disable_modules": [ "landscape", "byobu", "ssh-import-id" ]
} }
} }
} }

View file

@ -10,8 +10,8 @@
"workspace": "/target" "workspace": "/target"
}, },
"image": { "image": {
"name": "debian-{release}-{architecture}-{virtualization}-{%y}{%m}{%d}", "name": "debian-{release}-{architecture}-{virtualization}-{%Y}-{%m}-{%d}-ebs",
"description": "Debian {release} {architecture} AMI ({virtualization})" "description": "Debian {release} {architecture}"
}, },
"system": { "system": {
"release": "wheezy", "release": "wheezy",
@ -44,7 +44,9 @@
] ]
}, },
"cloud_init": { "cloud_init": {
"username": "admin" "username": "admin",
//"metadata_sources": "Ec2",
"disable_modules": [ "landscape", "byobu", "ssh-import-id" ]
} }
} }
} }

View file

@ -10,8 +10,8 @@
"workspace": "/target" "workspace": "/target"
}, },
"image": { "image": {
"name": "debian-{release}-{architecture}-{virtualization}-{%y}{%m}{%d}", "name": "debian-{release}-{architecture}-{virtualization}-{%Y}-{%m}-{%d}-ebs",
"description": "Debian {release} {architecture} AMI ({virtualization})" "description": "Debian {release} {architecture}"
}, },
"system": { "system": {
"release": "wheezy", "release": "wheezy",
@ -44,7 +44,9 @@
] ]
}, },
"cloud_init": { "cloud_init": {
"username": "admin" "username": "admin",
//"metadata_sources": "Ec2",
"disable_modules": [ "landscape", "byobu", "ssh-import-id" ]
} }
} }
} }

View file

@ -22,9 +22,21 @@ def validate_manifest(data, schema_validate):
def resolve_tasks(tasklist, manifest): def resolve_tasks(tasklist, manifest):
from tasks import SetUsername from tasks import SetUsername
from tasks import SetMetadataSource
from tasks import AutoSetMetadataSource
from tasks import DisableModules
from providers.ec2.tasks.initd import AddEC2InitScripts from providers.ec2.tasks.initd import AddEC2InitScripts
from common.tasks import initd from common.tasks import initd
options = manifest.plugins['cloud_init']
tasklist.add(AutoSetMetadataSource)
if 'username' in options:
tasklist.add(SetUsername) tasklist.add(SetUsername)
if 'disable_modules' in options:
tasklist.add(DisableModules)
if 'metadata_sources' in options:
tasklist.add(SetMetadataSource)
tasklist.remove(AddEC2InitScripts, tasklist.remove(AddEC2InitScripts,
initd.AddExpandRoot, initd.AddExpandRoot,
initd.AdjustExpandRootScript, initd.AdjustExpandRootScript,

View file

@ -11,6 +11,16 @@
"properties": { "properties": {
"username": { "username": {
"type": "string" "type": "string"
},
"disable_modules": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"metadata_sources": {
"type": "string"
} }
}, },
"required": ["username"] "required": ["username"]

View file

@ -1,6 +1,9 @@
from base import Task from base import Task
from common import phases from common import phases
from plugins.packages.tasks import InstallRemotePackages from plugins.packages.tasks import InstallRemotePackages
from common.tasks import apt
from common.tools import log_check_call
import re
class SetUsername(Task): class SetUsername(Task):
@ -18,3 +21,63 @@ class SetUsername(Task):
' sudo: ALL=(ALL) NOPASSWD:ALL\n' ' sudo: ALL=(ALL) NOPASSWD:ALL\n'
' shell: /bin/bash').format(username=username) ' shell: /bin/bash').format(username=username)
sed_i(cloud_cfg, search, replace) 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):
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:
print ("Setting metadata source to " + 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):
if 'disable_modules' in info.manifest.plugins['cloud_init']:
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)
try:
f = open(info.root + "/etc/cloud/cloud.cfg")
lines = f.readlines()
f.close()
except:
print "Cannot read cloud.cfg"
return -1
f = open(info.root + "/etc/cloud/cloud.cfg", "w")
for line in lines:
if not regex.match(line):
f.write(line)
f.close