仅当变量为true时才可以复制with_items

时间:2016-11-24 08:06:27

标签: bash ansible jinja2

我有这个:

- name: copy services
  copy: src={{ item }} dest="{{ dir.consul }}/services" mode=0755 owner=devops group=devops
  with_items:
    - services/FG.json
    - services/IC.json
    - services/java.json
    - services/NODE.json
    - services/repo.json

我还为每个服务设置了一个布尔变量,以指示我是否需要它们。 问题:

  1. 变量来自bash - 这使得选项为true \ false,我认为ansible读取True \ False,我应该事先转换它们吗?
  2. 我只能复制其var为真的项吗? 例如,当{{ fg }}为真时,请复制fg

1 个答案:

答案 0 :(得分:0)

例如:

- name: copy services
  copy: src="/services/{{ item }}.json" dest="{{ dir.consul }}/services" mode=0755 owner=devops group=devops
  when: hostvars[inventory_hostname][item|lower] == True
  with_items:
    - FG
    - IC
    - java
    - NODE
    - repo

更新:完全自主的例子

---
- hosts: localhost
  gather_facts: no
  vars:
    fg: True
    ic: False
    java: True
  tasks:
    - debug:
        msg: "{{ item }}"
      when: vars[item|lower] == True
      with_items:
        - FG
        - IC
        - java

如果要检查的变量是主机事实,请使用hostvars对象;
如果变量是播放变量,则可以使用vars对象 您没有在问题中指定如何将变量传递到剧本中。

我使用item|lower,因为我的vars是低位的,而物品则是混合的情况。