Hello, after hours of struggle with Ansible I've decided to ask for help smarter people. What I'm trying to do is to remove (lets say just do ls -la for now all files and directories within certain locations which names are not containing any part of certain list of variables. Let me give you an example:
- name: List currently existing letsencrypt certificates find: paths={{ item.paths }} file_type={{ item.file_type }} register: haproxy_le_existing with_items: - { paths: /etc/letsencrypt/live/, file_type: directory} - { paths: /etc/haproxy/ssl/le/, file_type: file} - debug: var='haproxy_le_ssl|map(attribute="domain")|list|join("|")' - debug: var='haproxy_le_existing.results|sum(attribute='files', start=[])|map(attribute='path')|map('regex_search','^((?!{{haproxy_le_ssl| map(attribute='domain')|list|join('|')}}).)*$')| select('string') | list' - name: Remove SSLs that are not in the config shell: "ls -la {{ item }}" with_items: "{{ haproxy_le_existing.results|sum(attribute='files', start=[])|map(attribute='path')|map('regex_search','^((?!{{haproxy_le_ssl|map(attribute='domain')|list|join('|')}}).)*$')| select('string') | list }}" variables are here: haproxy_le_ssl: - { domain: let2.example.is} - { domain: let3.example.is} - { domain: let4.example.is} Debug works perfectly: TASK [common/haproxy : List currently existing letsencrypt certificates] ******* ok: [haproxy-test.aws.example] => (item={u'file_type': u'directory', u 'paths': u'/etc/letsencrypt/live/'}) ok: [haproxy-test.aws.example] => (item={u'file_type': u'file', u'paths': u '/etc/haproxy/ssl/le/'}) msg: All items completed msg: All items completed TASK [common/haproxy : debug] ************************************************** ok: [haproxy-test.aws.example] => { "haproxy_le_ssl|map(attribute=\"domain\")|list|join(\"|\")": "let2.example.is|let3.example.is|let4.example.is" } TASK [common/haproxy : debug] ************************************************** ok: [haproxy-test.aws.example] => { "haproxy_le_existing.results|sum(attribute='files', start=[])|map(attribute='path')|map('regex_search','^((?!let2.example.is|let3.example.is|let4.example.is).)*$')| select('string') | list": [ "/etc/letsencrypt/live/let1.example.is", "/etc/haproxy/ssl/le/dupa.pem" ] } most probably because it doesn't have "{{ }}", but when it comes to running a task I've got following error: TASK [common/haproxy : Remove SSLs that are not in the config] ***************** fatal: [haproxy-test.aws.example]: FAILED! => {"failed": true, "msg": "template error while templating string: expected token ',', got 'domain'. String: {{ haproxy_le_existing.results|sum(attribute='files', start=[])|map(attribute='path')|map('regex_search','^((?!{{haproxy_le_ssl|map(attribute='domain')|list|join('|')}}).)*$')| select('string') | list }}"} For me creating oneliner like this is more convenient than creating multiple tasks (most probably I could create something using join from multiple tasks, but I'd like to understand what is happening here as using variable inside regex seems to be quite handy and I might use it in the future), even it is not the easiest to read way of doing the job. Please advice what could I do in this situation. -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscr...@googlegroups.com. To post to this group, send email to ansible-project@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/5c86fff4-3dd3-4451-a215-f05cafb858e6%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.