我有一个 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 }}
更改为能够完成此操作?
答案 0 :(得分:0)
当传递额外的变量时,这些总是“字符串变量”。我在尝试传入布尔变量时很难学到它。
您可以将它们作为 json 传递:
ansible-playbook -e '{"source": { "git_instance_url": "foo" }}' playbook.yml
但我现在不知道它们是否与您的 vars 文件中的 source
var 合并。我猜,一个会覆盖另一个。因此,您最终可能会得到字符串中的源变量或文件中的源变量。