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