有条件地依赖于YAML文件中的变量

时间:2017-10-05 10:37:16

标签: ansible jinja2

我正在尝试使用我的Playbook有条件地运行命令。该命令取决于给定客户的类型值设置为“PBSTP”。如果将类型设置为其他任何内容,则不应运行该播放。我目前正在尝试使用此配置,但它告诉我条件失败,因为dict对象不包含'type'的值。 有没有办法做到这一点?

- command: cp -r /home/pb/scripts /home/{{ item }}/scripts
  with_items: "{{ customers }}"
  when: customers['type'] == "PBSTP"

在给定的示例中,我希望'SESH'客户端不会像'TEST-BANK'客户端那样获得脚本的目录副本。 谢谢!

TEST-BANK:
    type: PBSTP
    accept: 32506
    connect: 33506
    ipaddr:
      - 192.167.203.92
    subtype: INBOUND
SESH:
    type: SPOT
    accept: 32508
    connect: 33508
    ipaddr:
      - 192.167.203.63
    subtype: TIERED

1 个答案:

答案 0 :(得分:1)

您尝试将when条件应用于customers dict(它包含密钥TEST-BANKSESH等。)

您希望在循环迭代中将条件应用于当前项:

- command: cp -r /home/pb/scripts /home/{{ item.key }}/scripts
  with_dict: "{{ customers }}"
  when: item.value['type'] == "PBSTP"

另请注意,您应该使用with_dict,因为with_items只会为您提供密钥而不是它的值。