父母和子女的库存

时间:2019-01-21 07:30:59

标签: ansible

我已经创建了广告资源

[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替换。我该如何实现

1 个答案:

答案 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}}