Modularize init script installation

Don't install various init scripts when using cloud-init
This commit is contained in:
Anders Ingemann 2013-12-01 14:34:38 +01:00
parent 4acde32c5d
commit 668b9896c1
6 changed files with 50 additions and 37 deletions

View file

@ -11,3 +11,5 @@ class BootstrapInformation(object):
import os.path import os.path
workspace_dirname = '{id:x}'.format(id=self.run_id) workspace_dirname = '{id:x}'.format(id=self.run_id)
self.workspace = os.path.join(manifest.bootstrapper['workspace'], workspace_dirname) self.workspace = os.path.join(manifest.bootstrapper['workspace'], workspace_dirname)
self.initd = {'install': {}, 'disable': []}

View file

@ -1,43 +1,13 @@
from base import Task from base import Task
from common import phases from common import phases
from common.exceptions import TaskError
from common.tools import log_check_call from common.tools import log_check_call
import os.path import os.path
class ResolveInitScripts(Task):
description = 'Determining which startup scripts to install or disable'
phase = phases.system_modification
def run(self, info):
init_scripts = {}
init_scripts['expand-root'] = 'expand-root'
from subprocess import CalledProcessError
try:
log_check_call(['/usr/sbin/chroot', info.root,
'/usr/bin/dpkg-query', '-W', 'openssh-server'])
init_scripts['generate-ssh-hostkeys'] = 'generate-ssh-hostkeys'
if info.manifest.system['release'] == 'squeeze':
init_scripts['generate-ssh-hostkeys'] = 'squeeze/generate-ssh-hostkeys'
except CalledProcessError:
pass
disable_scripts = ['hwclock.sh']
if info.manifest.system['release'] == 'squeeze':
disable_scripts.append('hwclockfirst.sh')
init_scripts_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), '../assets/init.d'))
for name, path in init_scripts.iteritems():
init_scripts[name] = os.path.join(init_scripts_dir, path)
info.initd = {'install': init_scripts,
'disable': disable_scripts}
class InstallInitScripts(Task): class InstallInitScripts(Task):
description = 'Installing startup scripts' description = 'Installing startup scripts'
phase = phases.system_modification phase = phases.system_modification
predecessors = [ResolveInitScripts]
def run(self, info): def run(self, info):
import stat import stat
@ -55,6 +25,47 @@ class InstallInitScripts(Task):
log_check_call(['/usr/sbin/chroot', info.root, '/sbin/insserv', '--remove', name]) log_check_call(['/usr/sbin/chroot', info.root, '/sbin/insserv', '--remove', name])
class AddExpandRoot(Task):
description = 'Adding init script to expand the root volume'
phase = phases.system_modification
successors = [InstallInitScripts]
def run(self, info):
init_scripts_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), '../assets/init.d'))
info.initd['install']['expand-root'] = os.path.join(init_scripts_dir, 'expand-root')
class AddSSHKeyGeneration(Task):
description = 'Adding SSH private key generation init scripts'
phase = phases.system_modification
successors = [InstallInitScripts]
def run(self, info):
init_scripts_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), '../assets/init.d'))
install = info.initd['install']
from subprocess import CalledProcessError
try:
log_check_call(['/usr/sbin/chroot', info.root,
'/usr/bin/dpkg-query', '-W', 'openssh-server'])
if info.manifest.system['release'] == 'squeeze':
install['generate-ssh-hostkeys'] = os.path.join(init_scripts_dir, 'squeeze/generate-ssh-hostkeys')
else:
install['generate-ssh-hostkeys'] = os.path.join(init_scripts_dir, 'generate-ssh-hostkeys')
except CalledProcessError:
pass
class RemoveHWClock(Task):
description = 'Removing hardware clock init scripts'
phase = phases.system_modification
successors = [InstallInitScripts]
def run(self, info):
info.initd['disable'].append('hwclock.sh')
if info.manifest.system['release'] == 'squeeze':
info.initd['disable'].append('hwclockfirst.sh')
class AdjustExpandRootScript(Task): class AdjustExpandRootScript(Task):
description = 'Adjusting the expand-root script' description = 'Adjusting the expand-root script'
phase = phases.system_modification phase = phases.system_modification

View file

@ -15,10 +15,10 @@ class AptSources(Task):
manifest_vars = {'release': info.manifest.system['release'], manifest_vars = {'release': info.manifest.system['release'],
'architecture': info.manifest.system['architecture'], 'architecture': info.manifest.system['architecture'],
'apt_mirror': 'http://http.debian.net/debian'} 'apt_mirror': 'http://http.debian.net/debian'}
for name in info.manifest.plugins['packages']['sources'].iterkeys(): for name, lines in info.manifest.plugins['packages']['sources'].iteritems():
list_path = os.path.join(info.root, 'etc/apt/sources.list.d/', name + '.list') list_path = os.path.join(info.root, 'etc/apt/sources.list.d/', name + '.list')
with open(list_path, 'a') as source_list: with open(list_path, 'a') as source_list:
for line in info.manifest.plugins['packages']['sources'][name]: for line in lines:
source_list.write('{line}\n'.format(line=line.format(**manifest_vars))) source_list.write('{line}\n'.format(line=line.format(**manifest_vars)))

View file

@ -57,7 +57,9 @@ def tasks(tasklist, manifest):
common_network.RemoveDNSInfo, common_network.RemoveDNSInfo,
common_network.ConfigureNetworkIF, common_network.ConfigureNetworkIF,
network.EnableDHCPCDDNS, network.EnableDHCPCDDNS,
common_initd.ResolveInitScripts, common_initd.AddExpandRoot,
common_initd.AddSSHKeyGeneration,
common_initd.RemoveHWClock,
initd.AddEC2InitScripts, initd.AddEC2InitScripts,
common_initd.InstallInitScripts, common_initd.InstallInitScripts,
common_initd.AdjustExpandRootScript, common_initd.AdjustExpandRootScript,

View file

@ -1,6 +1,5 @@
from base import Task from base import Task
from common import phases from common import phases
from common.exceptions import TaskError
from common.tasks import initd from common.tasks import initd
import os.path import os.path
@ -8,7 +7,6 @@ import os.path
class AddEC2InitScripts(Task): class AddEC2InitScripts(Task):
description = 'Adding EC2 startup scripts' description = 'Adding EC2 startup scripts'
phase = phases.system_modification phase = phases.system_modification
predecessors = [initd.ResolveInitScripts]
successors = [initd.InstallInitScripts] successors = [initd.InstallInitScripts]
def run(self, info): def run(self, info):

View file

@ -45,7 +45,7 @@ def tasks(tasklist, manifest):
network.RemoveDNSInfo, network.RemoveDNSInfo,
network.ConfigureNetworkIF, network.ConfigureNetworkIF,
network.RemoveHostname, network.RemoveHostname,
initd.ResolveInitScripts, initd.AddSSHKeyGeneration,
initd.InstallInitScripts, initd.InstallInitScripts,
cleanup.ClearMOTD, cleanup.ClearMOTD,
cleanup.CleanTMP, cleanup.CleanTMP,