Search code examples
loopspluginsansibleansible-2.x

Ansible looping through files


Prior to Ansible 2.5, the syntax for loops used to be with_x. Starting at 2.5, loop is favored and with_x basically disappeared from the docs.

Still, the docs mention exemples of how to replace with_x with loop. But I'm clueless as to how we're now supposed to loop through a directory of files.

Let's say I need to upload all the files within a given dir, I used to use with_fileglob.

- name: Install local checks
  copy:
    src: "{{ item }}"
    dest: /etc/sensu/plugins/
    owner: sensu
    group: sensu
    mode: 0744
  with_fileglob:
    - plugins/*

So what's the modern equivalent? Is it even possible? I know I still can use with_fileglob but as I'm writing new roles, I'd better have them future-proof.


Solution

  •   loop: "{{ lookup('fileglob', 'plugins/*', wantlist=True) }}"
    

    The difference between lookup and query is largely that query will always return a list. The default behavior of lookup is to return a string of comma-separated values. lookup can be explicitly configured to return a list using wantlist=True.

      loop: "{{ query('fileglob', 'plugins/*') }}"
    
    • Additionally, q was introduced as a short form of query
      loop: "{{ q('fileglob', 'plugins/*') }}"
    

    All three options give the same result. See Lookup plugins.