我有一个场景,我需要根据名为" provider"的字符串参数在group var中设置变量。我在运行ansible剧本时通过了。
ansible 2.3.0.0,python version = 2.7.5 在groups_vars.yml中,这就是我想要实现的目标
scanf()
我在检查github中的问题后尝试这种方式
if provider=azure then
insecure_registrys: ['{{azure_ip.state.ip_address}}:5000'] else if
provider=vsphere then
insecure_registrys: ['11.168.25.xx:5000']
上面的true将被提供者检查替换。它通过语法检查但在中间失败
在这种情况下你能帮助我吗? THX失败! => {"失败":是的," msg":" {%if ifd_interface!='' %} {{hostvars [inventory_hostname] [' ansible _' + etcd_interface] .ipv4.address}} {% - else%} {{hostvars [inventory_hostname] .ansible_default_ipv4.address}} {%endif%}:模板错误,模板字符串:预期标记','得到了' {'。字符串:{{(true | ternary(' [' {{azure_ip.state.ip_address}}:5000']',' [' 11.168.25 .XX:5000']'))}}"}
答案 0 :(得分:0)
永远不要使用嵌套的Jinja2表达式,更简单:
insecure_registries: "{{ [azure_ip.state.ip_address+':5000'] if provider == 'azure' else ['11.168.25.xx:5000'] }}
使用三元过滤器:
insecure_registries: "{{ (provider == 'azure') | ternary( [azure_ip.state.ip_address+':5000'], ['11.168.25.xx:5000'] ) }}