[libvirt-ci PATCH 10/13] lcitool: Use d.update() on extra_vars for options coming from the config
Andrea Bolognani
abologna at redhat.com
Tue Apr 28 08:24:32 UTC 2020
On Wed, 2020-04-22 at 15:28 +0200, Erik Skultety wrote:
> + # start with generic items not coming from the config
> extra_vars = {
> "base": base,
> "playbook_base": playbook_base,
> - "root_password": self._config.dict["install"]["root_password"],
> - "flavor": self._config.dict["install"]["flavor"],
> "selected_projects": selected_projects,
> "git_remote": git_remote,
> "git_branch": git_branch,
> - "gitlab_url": self._config.dict["gitlab"]["url"],
> - "gitlab_runner_secret": self._config.dict["gitlab"]["token"],
> }
> +
> + # now add the config vars
> + extra_vars.update(self._config.dict["install"])
> +
> + if extra_vars["flavor"] == "gitlab":
> + extra_vars.update(self._config.dict["gitlab"])
> +
Mh, I don't think I like this.
First of all, it forces you to replicate the "if gitlab" conditional
in one additional place, and most importantly it completely flattens
the resulting dictionary, eg.
config.dict["gitlab"]["url"] -> extra_vars["url"]
Both of these issues will disappear if you follow the suggestion I
made in 6/13 and load the default config.toml first: at that point,
you can unconditionally copy entire sections from the TOML into
extra_vars, and later in the playbook you can simply refer to them
along the lines of
- shell: gitlab-runner {{ gitlab.url }} {{ gitlab.runner_secret }}
when:
- install.flavor == "gitlab"
which is much nicer.
In fact, we should use the same approach for values in the
inventory, eg.
os_name: "Debian"
os_version: "10"
should become
os:
name: "Debian"
version: "10"
Given that both Python and Ansible support proper dictionaries, we
might very well use them instead of using prefix notation to emulate
a worse version of them :)
--
Andrea Bolognani / Red Hat / Virtualization
More information about the libvir-list
mailing list