我尝试将 JSON 结构传递到 ansible-playbook 中,但没有成功:这是我尝试传递的命令
ansible-playbook --extra-vars='[{\"${foo1}\": \"somevalue1\", \"${foo2}\": \"somevalue2\"}, {\"${zoo1}\": \"somevalue111\", \"${zoo2}\": \"somevalue222\"}]' test.yml
Run Code Online (Sandbox Code Playgroud)
出现错误:
ERROR! Syntax Error while loading YAML.
expected ',' or '}', but got '{'
Run Code Online (Sandbox Code Playgroud)
或这个 :
ansible-playbook --extra-vars='[{"${foo1}":"somevalue1","${foo2}":"somevalue2"},{"${zoo1}":"somevalue111","${zoo2}":"somevalue222"}]' test.yml
Run Code Online (Sandbox Code Playgroud)
没有输出
理想的方法是将 JSON 传递到这样的变量中,这样我就可以在 ansible 中迭代 json 数组:
ansible-playbook --extra-vars="AAA='[{\"${foo1}\": \"somevalue1\", \"${foo2}\": \"somevalue2\"}, {\"${zoo1}\": \"somevalue111\", \"${zoo2}\": \"somevalue222\"}]'" test.yml
Run Code Online (Sandbox Code Playgroud)
有了这个剧本:
---
-
gather_facts: false
hosts: localhost
name: test
tasks:
- name: debug
debug:
msg: "{{ AAA }}"
Run Code Online (Sandbox Code Playgroud)
输出是:
ok: [localhost] =>
msg:
- ? ''
: somevalue2
- ? ''
: somevalue222
Run Code Online (Sandbox Code Playgroud)
简而言之,在不使用文件的情况下将 JSON 结构传递到 ansible 中的最佳方法是什么?
我不明白为什么你要转义字符串"的内部',但你会想要放弃KEY=VALUE语法,因为在这种形式下,ansible在空格上进行分割——通过以 开头,{它会通知 ansible --extrav- vars 实际上是 JSON 并且停止使用键值解析器
ansible -e '{"AAA": [{"hello":{"world": true}}, {"array":{"yup":"forsure"}}]}' -m debug -a var=AAA localhost
Run Code Online (Sandbox Code Playgroud)
产生
localhost | SUCCESS => {
"AAA": [
{
"hello": {
"world": true
}
},
{
"array": {
"yup": "forsure"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5785 次 |
| 最近记录: |