如何将多行 JSON 字符串传递给 ansible-playbook 的 --extra-vars



我正试图将一个多行JSON传递给ansible playbook的--extra vars参数,如下所示

ansible-playbook my-playbook.yml --extra-vars <<EOF
{
"param1": "value1",
"param2": true,
"param3": 9000
}
EOF

但我得到了错误:

ansible-playbook: error: argument -e/--extra-vars: expected one argument

有没有办法传递上面的多行JSON字符串?

更新

我同意Setanta的观点,如果你的json是长的或复杂的外部双引号,并且转义内部引号会更麻烦,那么这是值得的。

因此,我决定传递两个单独的额外变量,一个用于纯字符串值,另一个用于布尔值和整数值,这需要JSON格式。第二个额外的变量被压缩成一行:

ansible-playbook playbook.yml 
--extra-vars "param1=value1 
param2=value2 
param3=value3 
paramN=valueN" 
--extra-vars '{"boolean_param":true,"int_param":9080}'

您可以通过使用外部双引号和转义内部引号来实现这一点。

ansible-playbook my-playbook.yml --extra-vars "{
"param1": "value1",
"param2": true,
"param3": 9000
}"

调试任务返回:

- debug:
var: param1, param2, param3

TASK [debug] *****************
ok: [localhost] => {
"param1, param2, param3": "('value1', True, 9000)"
}

如果您的json很长或很复杂,那么这将是一个更大的麻烦,这是值得的。如果json很短,或者从文件中读取json,则将其压缩为一行通常更简单。

ansible-playbook my-playbook.yml --extra-vars '{"param1":"value1","param2":true,"param3":9000}'
ansible-playbook my-playbook.yml --extra-vars '@file.json'

最新更新