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(',') }}"
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'