2016-11-24 4 views
0

у меня есть это:Ansibly копия with_items только если переменная является истинным

- 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. переменных являются от Баша - это делает опции верно \ ложь, где я думаю, что анзибль читает True \ False, то я должен преобразовать их, прежде чем руки?
  2. Могу ли я копировать только те предметы, которые соответствуют их var? Например, когда {{ fg }} верно, скопируйте fg
+0

add 'when' statement - он вычисляется для каждого элемента в вашем цикле. –

+0

Но мне нужен другой 'when' для каждого элемента. @KonstantinSuvorov – Moshe

ответ

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 

Update: полностью автономный пример

--- 
- 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, потому что мои вары имеют низкий размер, в то время как предметы имеют смешанный футляр.

+0

Что такое 'hostvars'? Я попробовал это с вашим примером и получил 'fatal: [10.2.1.108] => ошибка при оценке условного: hostvars [inventory_hostname] [item | lower] == True' и с' {{item | lower}} 'и получил 'when:" {{item | lower}} "Истина ^ Мы можем ошибаться, но похоже, что это может быть проблема с недостающими котировками.' – Moshe

+0

Константин привел пример, не используйте его , Используйте инструкцию 'when' для достижения того, что вы хотите, или добавьте больше информации в свой пост. – helloV

+0

Обновлен мой ответ с полным примером. Не понимаю, почему он не может быть использован - он иллюстрирует выражение 'when' с именами динамических переменных на основе значений элементов. –