ansible 1.6>在with_items循环中使用with_first_found?

时间:2014-03-26 22:20:46

标签: ansible ansible-playbook

是否可以在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

2 个答案:

答案 0 :(得分:4)

不支持组合循环,但您可以将它们用作查找:

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

答案 1 :(得分:0)

我对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
    
  3. 这使用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