diff --git a/bootstrapvz/common/tasks/initd.py b/bootstrapvz/common/tasks/initd.py index ccf9119..c145465 100644 --- a/bootstrapvz/common/tasks/initd.py +++ b/bootstrapvz/common/tasks/initd.py @@ -61,4 +61,4 @@ class AdjustExpandRootScript(Task): script = os.path.join(info.root, 'etc/init.d/expand-root') 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) + sed_i(script, '^device_path="/dev/xvda"$', device_path) diff --git a/bootstrapvz/providers/gce/__init__.py b/bootstrapvz/providers/gce/__init__.py index 627cc9c..88477a8 100644 --- a/bootstrapvz/providers/gce/__init__.py +++ b/bootstrapvz/providers/gce/__init__.py @@ -3,6 +3,7 @@ import tasks.apt import tasks.boot import tasks.configuration import tasks.image +import tasks.initd import tasks.host import tasks.packages from bootstrapvz.common.tasks import apt @@ -31,6 +32,7 @@ def resolve_tasks(taskset, manifest): tasks.apt.SetPackageRepositories, tasks.apt.ImportGoogleKey, tasks.packages.DefaultPackages, + tasks.packages.ReleasePackages, tasks.packages.GooglePackages, tasks.configuration.GatherReleaseInformation, @@ -38,6 +40,8 @@ def resolve_tasks(taskset, manifest): tasks.host.DisableIPv6, tasks.host.InstallHostnameHook, tasks.boot.ConfigureGrub, + initd.AddExpandRoot, + tasks.initd.AdjustExpandRootDev, initd.InstallInitScripts, ssh.AddSSHKeyGeneration, ssh.DisableSSHPasswordAuthentication, @@ -48,6 +52,9 @@ def resolve_tasks(taskset, manifest): volume.Delete, ]) + if manifest.volume['partitions']['type'] != 'none': + taskset.add(initd.AdjustExpandRootScript) + if 'gcs_destination' in manifest.image: taskset.add(tasks.image.UploadImage) if 'gce_project' in manifest.image: diff --git a/bootstrapvz/providers/gce/tasks/initd.py b/bootstrapvz/providers/gce/tasks/initd.py new file mode 100644 index 0000000..c826bfe --- /dev/null +++ b/bootstrapvz/providers/gce/tasks/initd.py @@ -0,0 +1,16 @@ +from bootstrapvz.base import Task +from bootstrapvz.common import phases +from bootstrapvz.common.tasks import initd + + +class AdjustExpandRootDev(Task): + description = 'Adjusting the expand-root device' + phase = phases.system_modification + predecessors = [initd.AddExpandRoot, initd.AdjustExpandRootScript] + + @classmethod + def run(cls, info): + import os.path + from bootstrapvz.common.tools import sed_i + script = os.path.join(info.root, 'etc/init.d/expand-root') + sed_i(script, '/dev/xvda', '/dev/sda') diff --git a/bootstrapvz/providers/gce/tasks/packages.py b/bootstrapvz/providers/gce/tasks/packages.py index d680cac..d746af0 100644 --- a/bootstrapvz/providers/gce/tasks/packages.py +++ b/bootstrapvz/providers/gce/tasks/packages.py @@ -1,6 +1,7 @@ from bootstrapvz.base import Task from bootstrapvz.common import phases from bootstrapvz.common.tasks import apt +import logging import os @@ -28,6 +29,21 @@ class DefaultPackages(Task): info.packages.add(kernel_package) +class ReleasePackages(Task): + description = 'Adding release-specific packages required for GCE' + phase = phases.preparation + predecessors = [apt.AddDefaultSources, apt.AddBackports, DefaultPackages] + + @classmethod + def run(cls, info): + # Add release-specific packages, if available. + if info.source_lists.target_exists('wheezy-backports'): + info.packages.add('cloud-initramfs-growroot') + else: + msg = ('No release-specific packages found for {system.release}').format(**info.manifest_vars) + logging.getLogger(__name__).warning(msg) + + class GooglePackages(Task): description = 'Adding image packages required for GCE from Google repositories' phase = phases.preparation