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)
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()