2013-12-01 12:26:09 +01:00
|
|
|
from base import Task
|
|
|
|
from common import phases
|
|
|
|
from plugins.packages.tasks import InstallRemotePackages
|
2013-12-17 15:51:03 +00:00
|
|
|
from common.tasks import apt
|
|
|
|
from common.tools import log_check_call
|
2013-12-19 11:44:34 +00:00
|
|
|
import re
|
2013-12-01 12:26:09 +01:00
|
|
|
|
|
|
|
|
|
|
|
class SetUsername(Task):
|
|
|
|
description = 'Setting username in cloud.cfg'
|
|
|
|
phase = phases.system_modification
|
|
|
|
predecessors = [InstallRemotePackages]
|
|
|
|
|
|
|
|
def run(self, info):
|
|
|
|
from common.tools import sed_i
|
|
|
|
import os.path
|
|
|
|
cloud_cfg = os.path.join(info.root, 'etc/cloud/cloud.cfg')
|
|
|
|
username = info.manifest.plugins['cloud_init']['username']
|
|
|
|
search = '^ name: debian$'
|
|
|
|
replace = (' name: {username}\n'
|
|
|
|
' sudo: ALL=(ALL) NOPASSWD:ALL\n'
|
|
|
|
' shell: /bin/bash').format(username=username)
|
|
|
|
sed_i(cloud_cfg, search, replace)
|
2013-12-17 15:51:03 +00:00
|
|
|
|
|
|
|
class SetMetadataSource(Task):
|
|
|
|
description = 'Setting metadata source'
|
|
|
|
phase = phases.system_modification
|
|
|
|
predecessors = [apt.AptSources]
|
|
|
|
successors = [apt.AptUpdate]
|
|
|
|
|
|
|
|
def run(self, info):
|
2013-12-19 11:44:34 +00:00
|
|
|
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)
|
2013-12-17 15:51:03 +00:00
|
|
|
|
2013-12-19 11:44:34 +00:00
|
|
|
|
|
|
|
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:
|
2013-12-19 14:21:33 +00:00
|
|
|
print ("Setting metadata source to " + sources)
|
2013-12-19 11:44:34 +00:00
|
|
|
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):
|
2013-12-19 14:21:33 +00:00
|
|
|
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)
|
2013-12-19 11:44:34 +00:00
|
|
|
|
2013-12-19 14:21:33 +00:00
|
|
|
f = open(info.root + "/etc/cloud/cloud.cfg")
|
|
|
|
lines = f.readlines()
|
|
|
|
f.close()
|
2013-12-19 11:44:34 +00:00
|
|
|
|
2013-12-19 14:21:33 +00:00
|
|
|
f = open(info.root + "/etc/cloud/cloud.cfg", "w")
|
|
|
|
for line in lines:
|
2013-12-19 11:44:34 +00:00
|
|
|
if not regex.match(line):
|
|
|
|
f.write(line)
|
2013-12-19 14:21:33 +00:00
|
|
|
f.close
|