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