我已经创建了广告资源
[dev:children]
d2-dev
jms-dev
[d2-dev]
host1
[jms-dev]
host2
[test:children]
d2-test
jms-test
[d2-test]
host3
[jms-test]
host4
[stage:children]
...
我正在传递变量
ansible-playbook test.yml -i hosts --extra-vars '{"env":"dev"}'
用于dev / test / sgate。
我正在检查剧本
- name: Stop Service
service:
name: httpd
state: stopped
when: inventory_hostname in groups[d2-{{ env }}]
我遇到错误 [警告]:当语句不应包含jinja2模板分隔符时,例如{{}}或{%%}。找到的:inventory_hostname 组['d2-“ {{env}}”']
我的目标是拥有一个清单和一本剧本,并使用额外的变量调用并用env替换。我该如何实现
答案 0 :(得分:1)
我遇到错误[警告]:语句不应该包含jinja2模板分隔符,例如{{}}或{%%}。找到:组中的“ inventory_hostname” ['d2-“ {{env}}”']
这是正确的,原因有两个:正如关于胡须的陈述所述,而且还因为即使执行了您的要求,该表达式仍会解析为字符串'd2-"dev"'
,这不太可能是您想要的< / p>
正确的解决方法是设置一个任务局部变量,您可以在其中随意使用jinja模板,然后在when:
中使用 that 变量:
- debug: msg="like this"
when: inventory_hostname in groups[the_group]
vars:
the_group: d2-{{env}}