示例#1
0
    def _run_playbook(self, playbook, inventory, extra_vars, ansible_user):
        require_executable("ansible-playbook", "sudo apt install ansible")

        cmd = []
        cmd.append("ansible-playbook")
        cmd.extend(["--connection", self.connection])
        cmd.extend(["--inventory", inventory])
        cmd.extend(["--extra-vars", "@{}".format(extra_vars)])
        if self.connection == "ssh":
            cmd.extend(["--user", ansible_user])
        cmd.append(playbook)
        if logging.getLogger().isEnabledFor(logging.DEBUG):
            cmd.append("-vvvv")

        ansible_env = os.environ.copy()
        ansible_env['ANSIBLE_REMOTE_TEMP'] = '/tmp/ansible-{}'.format(get_user())

        run(cmd, env=ansible_env, log_threshold=logging.INFO)
示例#2
0
    def run(self, config_file, introspection_method=None):
        self._setup_parser(config_file)

        if introspection_method:
            print(introspection_method())
            return self._result()

        if os.path.isfile(self._result()):
            logging.info(
                ("{0} is already there. "
                 "Delete it to regenerate it.").format(self._result()))
            return self._result()

        self._require_sudo()

        qemu_executable = Fetch().run(config_file)

        print("Going to bootstrap initial image - be patient.")

        if self.config.get_bootstrap_tool() != "debootstrap":
            raise FatalError(("At the moment only debootstrap "
                              "is supported for bootstrapping!"))

        require_executable("debootstrap", "sudo apt install debootstrap")

        workdir = self.config.get_workdir()

        with tempfile.TemporaryDirectory(dir=workdir) as tempdir:
            chown_to_user(tempdir)
            key_data = fetch_repository_key(
                self.config.get_bootstrap_repository_key())
            keyring_file = build_keyring(tempdir, "temp_keyring.gpg", key_data)
            rootfs = self._run_debootstrap(tempdir, keyring_file,
                                           qemu_executable)
            self._postprocess_rootfs(rootfs, key_data)
            archive = self._pack_image(tempdir, rootfs)
            chown_to_user(archive)
            shutil.move(archive, self._result())

        print_success("Bootstrapped initial image {}.".format(self._result()))

        return self._result()