from bootstrapvz.common import task_groups
import tasks.apt
import tasks.boot
import tasks.configuration
import tasks.image
import tasks.packages
from bootstrapvz.common.tasks import apt, boot, image, loopback, initd
from bootstrapvz.common.tasks import ssh, volume, grub


def validate_manifest(data, validator, error):
    from bootstrapvz.common.tools import rel_path
    validator(data, rel_path(__file__, 'manifest-schema.yml'))


def resolve_tasks(taskset, manifest):
    taskset.update(task_groups.get_standard_groups(manifest))
    taskset.update([apt.AddBackports,
                    apt.AddDefaultSources,
                    loopback.AddRequiredCommands,
                    loopback.Create,
                    tasks.packages.DefaultPackages,
                    tasks.configuration.GatherReleaseInformation,
                    tasks.boot.ConfigureGrub,
                    initd.InstallInitScripts,
                    boot.BlackListModules,
                    boot.UpdateInitramfs,
                    ssh.AddSSHKeyGeneration,
                    ssh.DisableSSHPasswordAuthentication,
                    ssh.DisableRootLogin,
                    tasks.apt.AddBaselineAptCache,
                    image.MoveImage,
                    tasks.image.CreateTarball,
                    volume.Delete,
                    ])
    taskset.discard(grub.SetGrubConsolOutputDeviceToSerial)

    if 'gcs_destination' in manifest.provider:
        taskset.add(tasks.image.UploadImage)
        if 'gce_project' in manifest.provider:
            taskset.add(tasks.image.RegisterImage)


def resolve_rollback_tasks(taskset, manifest, completed, counter_task):
    taskset.update(task_groups.get_standard_rollback_tasks(completed))
