将子变量传递给 Ansible 命令行

时间:2021-06-09 13:14:06

标签: ansible

我有一个 ansible playbook,它从一个 extra-vars.json 文件中获取它的变量。它在命令行中通过 --extra-vars "@extra-vars.json" 传入。 这是 var 文件的缩写版本

{
  "source" : {
    "access_token" : "abc",
    "git_instance_url" : "foo.com",
    "repo" : "some-group/some-project/some-repo"
  },
  "target" : {
    "access_token" : "xyz",
    "git_instance_url" : "foo.bar.com",
    "repo_path" : "lorem/ipsum"
  }
}

由于 var 结构,当我在剧本中调用 vars 时,我必须使用点表示法,即 {{ source.repo_path }}{{ target.access_token }}。我的问题是我想从 extra-vars.json 中删除这些变量中的几个,并在命令行中单独传递它们。如果我从 source.git_instance_url 中删除 extra-vars.json,我可以在没有任何优先级冲突的情况下传递它。

我的问题是我不知道如何在命令行中传递点符号变量。我不想改变我的剧本来做到这一点。如果我传入 --extra-vars "source.git_instance_url=bar.baz.com",我会收到错误 source is undefined

我尝试使用括号符号 source[git_instance_url]=bar.baz.com 没有成功。

有没有办法在命令行传递点符号变量,或者我是否必须将我的剧本从 {{ source.git_instance_url }} ==> {{ source_git_instance_url }} 更改为能够完成此操作?

1 个答案:

答案 0 :(得分:0)

当传递额外的变量时,这些总是“字符串变量”。我在尝试传入布尔变量时很难学到它。

您可以将它们作为 json 传递:

ansible-playbook -e '{"source": { "git_instance_url": "foo" }}' playbook.yml

但我现在不知道它们是否与您的 vars 文件中的 source var 合并。我猜,一个会覆盖另一个。因此,您最终可能会得到字符串中的源变量或文件中的源变量。