Template module doesn't work with any kind of loop

Hello,

I’m having a textbook task (taken straight out from the documentation examples) using template and with_filetree:

  • name: axis pipeline
    template:
    src: “{{ item.src }}”
    dest: “{{ logstash_home }}/{{ item.path | splitext | first }}”

with_filetree: …/templates/logstash/pipelines/axis

I get this error:
AnsibleFilterError: dict2items requires a dictionary, got <class ‘ansible.template.AnsibleUndefined’> instead.

I get the same error with with_fileglob.

I have also tried different types of loops, nothing works. Everything I’ve tried works fine with the copy module.

So what is so special about the template module? It should work similarly with copy in terms of copying files, iterating over filesystem paths etc.
I’m using ansible 2.9.

Seems this is caused by the path in the src. You can’t put anything there except the file name, and it will look in playbooks/templates/filename. If i try to put a path, it throws that error.
This behavior happens only with loops though.

Without loops, I can put a full or relative path in the src and it works.

Current docs for with_filetree show this example:

  • name: Template files (explicitly skip directories in order to use the ‘src’ attribute)
    template:
    src: ‘{{ item.src }}’
    dest: /web/{{ item.path }}
    mode: ‘{{ item.mode }}’

with_filetree: web/
when: item.state == ‘file’

I suspect it’s the directories that are causing your problems.