ansible 1.6 › использование with_first_found в цикле with_items?

Можно ли использовать with_first_found в цикле with_items, например:

- template:
    dest=/foo/{{ item.name }}-{{ item.branch | default('master') }}
    src={{ item }}
  with_first_found:
    - {{ item.name }}-{{ item.branch | default('master') }}
    - {{ item.name }}.j2
    - apache_site.j2
  with_items: apache_sites

Не могу заставить его работать, используя with_nested.


person briceburg    schedule 26.03.2014    source источник
comment
Выглядит волосатым, чего ты пытаешься достичь?   -  person Rico    schedule 29.03.2014


Ответы (2)


Объединение циклов не поддерживается, но вы можете использовать их как поиск:

vars:
  site_locations:
    - {{ item.name }}-{{ item.branch | default('master') }}
    - {{ item.name }}.j2
    - apache_site.j2

tasks:
    - template:
         dest=/foo/{{ item.name }}-{{ item.branch | default('master') }}
         src={{ lookup('first_found', site_locations }}
      with_items: apache_sites
person hkariti    schedule 15.09.2014

У меня была аналогичная потребность в tc Server (tomcat). Вот что я сделал:

  1. Я поместил конфигурацию для конкретного сайта в отдельный файл задач (configure-sites.yml):

    - template:
        src: "{{ item }}"
        dest: /foo/{{ apache_site.name }}-{{ apache_site.branch | default('master') }}
      with_first_found:
        - "{{ apache_site.name }}-{{ apache_site.branch | default('master') }}"
        - "{{ apache_site.name }}.j2"
        - apache_site.j2
    
  2. Из отдельного файла задач я включил этот файл задач, передав его каждому сайту:

    - include: configure-sites.yml
      with_items: "{{ apache_sites }}"
      loop_control:
        loop_var: apache_site
    

При этом используется loop_control, для которого требуется Ansible 2.1+: http://docs.ansible.com/ansible/playbooks_loops.html#loop-control

Если это поможет, вы можете увидеть, что именно я сделал здесь:
https://github.com/bmaupin/ansible-role-tcserver/blob/master/tasks/main.yml
https://github.com/bmaupin/ansible-role-tcserver/blob/master/tasks/configure-instances.yml

person bmaupin    schedule 23.09.2016