我正试图将一个多行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'