Search code examples
filteransibleansible-2.xsingle-quotes

Unable to add single quotes between single quotes in ansible


Below is my playbook:

   - set_fact:
       excludefolders: "{{ excludefolders + ' -o -name ' + item | default('') }}"
     with_items: "{{ lookup('vars', 'MY_' + Layer).split(',') }}"


   - debug:
       msg: "exfolderr is {{ excludefolders }}"

I get the below output

ok: [10.0.17.113] => { "msg": "exfolderr is -o -name custom -o -name tree -o -name log"

However i want the variable to have single quotes around item like below:

Expected output:

ok: [10.0.17.113] => { "msg": "exfolderr is -o -name 'custom' -o -name 'tree' -o -name 'log'"

I tried to use escape charecter as well as quote filter for adding single quotes but none of them worked. Below is what tried.

   - set_fact:
       excludefolders: "{{ excludefolders + ' -o -name ' + item | quote | default('') }}"
     with_items: "{{ lookup('vars', 'MY_' + Layer).split(',') }}"

   - set_fact:
       excludefolders: "{{ excludefolders + ' -o -name ' + \' + item + \'  | default('') }}"
     with_items: "{{ lookup('vars', 'MY_' + Layer).split(',') }}"


   - set_fact:
       excludefolders: "{{ excludefolders + ' -o -name ' ~ \' + item ~ \'  | default('') }}"
     with_items: "{{ lookup('vars', 'MY_' + Layer).split(',') }}"


   - set_fact:
       excludefolders: "{{ excludefolders + ' -o -name \''  + item + '\''  | default('') }}"
     with_items: "{{ lookup('vars', 'MY_' + Layer).split(',') }}"

Solution

  • A little ugly, but it works:

    ---
    - hosts: localhost
      tasks:
      - set_fact:
          excludefolders: ""
    
      - set_fact:
          excludefolders: "{{ excludefolders + ' -o -name ' + quote + item|default('') + quote }}"
        with_items:
        - custom
        - tree
        - log
        vars:
        - quote: "'"
    
      - debug:
          msg: "exfolderr is {{ excludefolders }}"
    

    Gives the following:

    TASK [debug] ********************************************************************************
    ok: [localhost] => 
      msg: exfolderr is  -o -name 'custom' -o -name 'tree' -o -name 'log'