[libvirt-ci PATCH 04/13] lcitool: Use a temporary JSON file to pass extra variables
Andrea Bolognani
abologna at redhat.com
Mon Apr 27 16:25:51 UTC 2020
On Wed, 2020-04-22 at 15:28 +0200, Erik Skultety wrote:
> This patch is a pre-requisite config file consolidation. Currently we've
> got a number of files which serve as a configuration either to the
> lcitool itself or to the ansible playbooks (majority). Once we replace
> these with a single global lcitool config, we'd end up passing tokens
> (potentially some passwords) as ansible extra variables bare naked on
> the cmdline. In order to prevent this security flaw use temporary JSON
> file holding all these extra variables and pass it as follows:
>
> $ ansible-playbook --extra-vars @extra_vars.json playbook.yml
I find it impossible not to point out that, if the configuration
file was in YAML format, then we could pass its contents to Ansible
without having to create a temporary file *or* risk exposing
sensitive data O:-)
> @@ -504,21 +504,26 @@ class Application:
> git_remote = "default"
> git_branch = "master"
>
> + tempdir = tempfile.TemporaryDirectory(prefix='lcitool')
If you want to pass prefix, do the same thing for the call introduced
in the previous commit.
Also, double quotes around strings please.
> ansible_cfg_path = os.path.join(base, "ansible.cfg")
> playbook_base = os.path.join(base, "playbooks", playbook)
> playbook_path = os.path.join(playbook_base, "main.yml")
> + extra_vars_path = os.path.join(tempdir.name, 'extra_vars.json')
Double quotes.
>
> - extra_vars = json.dumps({
> - "base": base,
> - "playbook_base": playbook_base,
> - "root_password_file": root_pass_file,
> - "flavor": flavor,
> - "selected_projects": selected_projects,
> - "git_remote": git_remote,
> - "git_branch": git_branch,
> - "gitlab_url_file": gitlab_url_file,
> - "gitlab_runner_token_file": gitlab_runner_token_file,
> - })
> + with open(extra_vars_path, 'w') as fp:
Double quotes.
> + extra_vars = {
> + "base": base,
> + "playbook_base": playbook_base,
> + "root_password_file": root_pass_file,
> + "flavor": flavor,
> + "selected_projects": selected_projects,
> + "git_remote": git_remote,
> + "git_branch": git_branch,
> + "gitlab_url_file": gitlab_url_file,
> + "gitlab_runner_token_file": gitlab_runner_token_file,
> + }
> + json.dump(extra_vars, fp)
Moving the definition of the dictionary is not needed: just do
extra_vars = {
...
}
with open(...) as fp:
json.dumps(extra_vars, fp)
which keeps the with scope nice and small.
With these few nits fixed,
Reviewed-by: Andrea Bolognani <abologna at redhat.com>
--
Andrea Bolognani / Red Hat / Virtualization
More information about the libvir-list
mailing list