如何将多行JSON字符串传递给ansible playbook';s——额外变量

如何将多行JSON字符串传递给ansible playbook';s——额外变量,ansible,Ansible,我试图将多行JSON传递给ansible playbook的--extra-vars参数,如下所示 ansible-playbook my-playbook.yml --extra-vars <<EOF { "param1": "value1", "param2": true, "param3": 9000 } EOF 是否有方法传递上述多行JSON字符串 更新 我同意Setanta的观点,如果json是长的或复杂的外部双引号,那么转义内部引号会更麻烦,这是

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

ansible-playbook my-playbook.yml --extra-vars <<EOF
{
    "param1": "value1",
    "param2": true,
    "param3": 9000
}
EOF
是否有方法传递上述多行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很短或从文件中读取,则将其折叠成一行通常更简单

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