from bootstrapvz.base import Task
from bootstrapvz.common import phases
from bootstrapvz.plugins.file_copy.tasks import MkdirCommand
from bootstrapvz.plugins.file_copy.tasks import FileCopyCommand


class ImageExecuteCommand(Task):
    description = 'Executing commands in the image'
    phase = phases.user_modification
    predecessors = [MkdirCommand, FileCopyCommand]

    @classmethod
    def run(cls, info):
        from bootstrapvz.common.tools import log_check_call
        for raw_command in info.manifest.plugins['commands']['commands']:
            command = map(lambda part: part.format(root=info.root, **info.manifest_vars), raw_command)
            shell = len(command) == 1
            log_check_call(command, shell=shell)
