mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 07:26:29 +00:00
Merge pull request #125 from JamesBromberger/python
Permit cloud-init to be configured for its metadata sources using debcon...
This commit is contained in:
commit
bc8038729a
6 changed files with 101 additions and 10 deletions
|
@ -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" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
tasklist.add(SetUsername)
|
|
||||||
|
options = manifest.plugins['cloud_init']
|
||||||
|
tasklist.add(AutoSetMetadataSource)
|
||||||
|
if 'username' in options:
|
||||||
|
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,
|
||||||
|
|
|
@ -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"]
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue