diff --git a/providers/ec2/assets/init.d/expand-volume b/common/assets/init.d/expand-volume similarity index 100% rename from providers/ec2/assets/init.d/expand-volume rename to common/assets/init.d/expand-volume diff --git a/providers/ec2/assets/init.d/generate-ssh-hostkeys b/common/assets/init.d/generate-ssh-hostkeys similarity index 100% rename from providers/ec2/assets/init.d/generate-ssh-hostkeys rename to common/assets/init.d/generate-ssh-hostkeys diff --git a/providers/ec2/assets/init.d/squeeze/generate-ssh-hostkeys b/common/assets/init.d/squeeze/generate-ssh-hostkeys similarity index 100% rename from providers/ec2/assets/init.d/squeeze/generate-ssh-hostkeys rename to common/assets/init.d/squeeze/generate-ssh-hostkeys diff --git a/common/tasks/initd.py b/common/tasks/initd.py new file mode 100644 index 0000000..2fd252c --- /dev/null +++ b/common/tasks/initd.py @@ -0,0 +1,48 @@ +from base import Task +from common import phases +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 = {'expand-volume': 'expand-volume'} + + init_scripts['generate-ssh-hostkeys'] = 'generate-ssh-hostkeys' + if info.manifest.system['release'] == 'squeeze': + init_scripts['generate-ssh-hostkeys'] = 'squeeze/generate-ssh-hostkeys' + + 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): + description = 'Installing startup scripts' + phase = phases.system_modification + after = [ResolveInitScripts] + + def run(self, info): + import stat + rwxr_xr_x = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | + stat.S_IRGRP | stat.S_IXGRP | + stat.S_IROTH | stat.S_IXOTH) + from shutil import copy + from common.tools import log_check_call + for name, src in info.initd['install'].iteritems(): + dst = os.path.join(info.root, 'etc/init.d', name) + copy(src, dst) + os.chmod(dst, rwxr_xr_x) + log_check_call(['/usr/sbin/chroot', info.root, '/sbin/insserv', '-d', name]) + + for name in info.initd['disable']: + log_check_call(['/usr/sbin/chroot', info.root, '/sbin/insserv', '-r', name]) diff --git a/providers/ec2/__init__.py b/providers/ec2/__init__.py index e7d0662..9d7704e 100644 --- a/providers/ec2/__init__.py +++ b/providers/ec2/__init__.py @@ -15,6 +15,7 @@ from common.tasks import boot as common_boot from tasks import security from common.tasks import network from tasks import initd +from common.tasks import initd as common_initd from common.tasks import cleanup @@ -53,8 +54,9 @@ def tasks(tasklist, manifest): network.RemoveDNSInfo(), network.ConfigureNetworkIF(), network.ConfigureDHCP(), - initd.ResolveInitScripts(), - initd.InstallInitScripts(), + common_initd.ResolveInitScripts(), + initd.AddEC2InitScripts(), + common_initd.InstallInitScripts(), cleanup.ClearMOTD(), cleanup.ShredHostkeys(), cleanup.CleanTMP(), diff --git a/providers/ec2/tasks/initd.py b/providers/ec2/tasks/initd.py index 5a479fe..6f1d394 100644 --- a/providers/ec2/tasks/initd.py +++ b/providers/ec2/tasks/initd.py @@ -1,49 +1,19 @@ from base import Task from common import phases +from common.tasks import initd import os.path -class ResolveInitScripts(Task): - description = 'Determining which startup scripts to install or disable' +class AddEC2InitScripts(Task): + description = 'Adding EC2 startup scripts' phase = phases.system_modification + after = [initd.ResolveInitScripts] + before = [initd.InstallInitScripts] def run(self, info): init_scripts = {'ec2-get-credentials': 'ec2-get-credentials', - 'ec2-run-user-data': 'ec2-run-user-data', - 'expand-volume': 'expand-volume'} - - init_scripts['generate-ssh-hostkeys'] = 'generate-ssh-hostkeys' - if info.manifest.system['release'] == 'squeeze': - init_scripts['generate-ssh-hostkeys'] = 'squeeze/generate-ssh-hostkeys' - - disable_scripts = ['hwclock.sh'] - if info.manifest.system['release'] == 'squeeze': - disable_scripts.append('hwclockfirst.sh') + 'ec2-run-user-data': 'ec2-run-user-data'} + 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.normpath(os.path.join(os.path.dirname(__file__), '../assets/init.d', path)) - - info.initd = {'install': init_scripts, - 'disable': disable_scripts} - - -class InstallInitScripts(Task): - description = 'Installing startup scripts' - phase = phases.system_modification - after = [ResolveInitScripts] - - def run(self, info): - import stat - rwxr_xr_x = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | - stat.S_IRGRP | stat.S_IXGRP | - stat.S_IROTH | stat.S_IXOTH) - from shutil import copy - from common.tools import log_check_call - for name, src in info.initd['install'].iteritems(): - dst = os.path.join(info.root, 'etc/init.d', name) - copy(src, dst) - os.chmod(dst, rwxr_xr_x) - log_check_call(['/usr/sbin/chroot', info.root, '/sbin/insserv', '-d', name]) - - for name in info.initd['disable']: - log_check_call(['/usr/sbin/chroot', info.root, '/sbin/insserv', '-r', name]) + info.initd['install'][name] = os.path.join(init_scripts_dir, path)