import tasks from bootstrapvz.providers.ec2.tasks import ebs from bootstrapvz.providers.virtualbox.tasks import guest_additions from bootstrapvz.common.tasks import loopback from bootstrapvz.common.tasks import volume from bootstrapvz.common.tasks import folder from bootstrapvz.common.tasks import locale from bootstrapvz.common.tasks import apt from bootstrapvz.common.tasks import bootstrap from bootstrapvz.common.tasks import filesystem from bootstrapvz.common.tasks import partitioning def validate_manifest(data, validator, error): import os.path schema_path = os.path.normpath(os.path.join(os.path.dirname(__file__), 'manifest-schema.yml')) validator(data, schema_path) def resolve_tasks(taskset, manifest): settings = manifest.plugins['prebootstrapped'] skip_tasks = [ebs.Create, loopback.Create, folder.Create, filesystem.Format, partitioning.PartitionVolume, filesystem.TuneVolumeFS, filesystem.AddXFSProgs, filesystem.CreateBootMountDir, apt.DisableDaemonAutostart, locale.GenerateLocale, bootstrap.MakeTarball, bootstrap.Bootstrap, guest_additions.InstallGuestAdditions, ] if manifest.volume['backing'] == 'ebs': if settings.get('snapshot', None) is not None: taskset.add(tasks.CreateFromSnapshot) [taskset.discard(task) for task in skip_tasks] else: taskset.add(tasks.Snapshot) elif manifest.volume['backing'] == 'folder': if settings.get('folder', None) is not None: taskset.add(tasks.CreateFromFolder) [taskset.discard(task) for task in skip_tasks] else: taskset.add(tasks.CopyFolder) else: if settings.get('image', None) is not None: taskset.add(tasks.CreateFromImage) [taskset.discard(task) for task in skip_tasks] else: taskset.add(tasks.CopyImage) def resolve_rollback_tasks(taskset, manifest, completed, counter_task): if manifest.volume['backing'] == 'ebs': counter_task(taskset, tasks.CreateFromSnapshot, volume.Delete) elif manifest.volume['backing'] == 'folder': counter_task(taskset, tasks.CreateFromFolder, folder.Delete) else: counter_task(taskset, tasks.CreateFromImage, volume.Delete)