diff --git a/common/assets/init.d/expand-volume b/common/assets/init.d/expand-volume index 3b2d2a6..cfee83c 100644 --- a/common/assets/init.d/expand-volume +++ b/common/assets/init.d/expand-volume @@ -13,7 +13,7 @@ prog=$(basename $0) logger="logger -t $prog" -device_path="/dev/xvda1" +device_path="/dev/xvda" filesystem=`blkid | grep $device_path | sed 's#\(.*\):.*TYPE="\(.*\)".*#\2#'` diff --git a/common/tasks/initd.py b/common/tasks/initd.py index 8d77059..a0df088 100644 --- a/common/tasks/initd.py +++ b/common/tasks/initd.py @@ -9,7 +9,8 @@ class ResolveInitScripts(Task): phase = phases.system_modification def run(self, info): - init_scripts = {'expand-volume': 'expand-volume'} + init_scripts = {} + init_scripts['expand-volume'] = 'expand-volume' from subprocess import CalledProcessError try: diff --git a/providers/ec2/__init__.py b/providers/ec2/__init__.py index 98cef05..a383f7b 100644 --- a/providers/ec2/__init__.py +++ b/providers/ec2/__init__.py @@ -60,6 +60,7 @@ def tasks(tasklist, manifest): common_initd.ResolveInitScripts, initd.AddEC2InitScripts, common_initd.InstallInitScripts, + initd.AdjustExpandVolumeScript, cleanup.ClearMOTD, cleanup.CleanTMP, diff --git a/providers/ec2/tasks/initd.py b/providers/ec2/tasks/initd.py index 6f1d394..7be1667 100644 --- a/providers/ec2/tasks/initd.py +++ b/providers/ec2/tasks/initd.py @@ -1,5 +1,6 @@ from base import Task from common import phases +from common.exceptions import TaskError from common.tasks import initd import os.path @@ -17,3 +18,22 @@ class AddEC2InitScripts(Task): init_scripts_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), '../assets/init.d')) for name, path in init_scripts.iteritems(): info.initd['install'][name] = os.path.join(init_scripts_dir, path) + + +class AdjustExpandVolumeScript(Task): + description = 'Adjusting the expand-volume script' + phase = phases.system_modification + after = [initd.InstallInitScripts] + + def run(self, info): + if 'expand-volume' not in info.initd['install']: + raise TaskError('The expand-volume script was not installed') + + from base.fs.partitionmaps.none import NoPartitions + if not isinstance(info.volume.partition_map, NoPartitions): + import os.path + from common.tools import sed_i + script = os.path.join(info.root, 'etc/init.d.expand-volume') + root_idx = info.volume.partition_map.root.get_index() + device_path = 'device_path="/dev/xvda{idx}"'.format(idx=root_idx) + sed_i(script, '^device_path="/dev/xvda$', device_path)