In the code below, note that "range(my_var | length)" is equivalent to "[0, 1, 2]".
In the set_fact, we don't "loop" the task; rather we loop over the data within the jinja2 expression by using the map filter.utoddl@tango:~/ansible$ cat veera01.yml
---
# veera01.yml
- name: Jinja expressions
hosts: localhost
gather_facts: false
vars:
my_var:
- "line1 has , color-red, in its middle"
- "line2 has, color-blue, in its middle"
- "line3 has, color-orange, in its middle"
tasks:
- name: Split and trim parts from my_var
ansible.builtin.debug:
msg: "{{ my_var | map('split', ',') | map('map', 'trim') }}"
- name: Extract the "color-*" parts from my_var
ansible.builtin.debug:
msg: "{{ range(my_var | length) | map('extract', (my_var | map('split', ',') | map('map', 'trim')), [1]) }}"
- name: Same but as set_fact
ansible.builtin.set_fact:
new_var: "{{ range(my_var | length) | map('extract', (my_var | map('split', ',') | map('map', 'trim')), [1]) }}"
utoddl@tango:~/ansible$ ansible-playbook veera01.yml -v
Using /etc/ansible/ansible.cfg as config file
PLAY [Jinja expressions] **********************************************
TASK [Split and trim parts from my_var] *******************************
ok: [localhost] =>
msg:
- - line1 has
- color-red
- in its middle
- - line2 has
- color-blue
- in its middle
- - line3 has
- color-orange
- in its middle
TASK [Extract the "color-*" parts from my_var] ************************
ok: [localhost] =>
msg:
- color-red
- color-blue
- color-orange
TASK [Same but as set_fact] *******************************************
ok: [localhost] => changed=false
ansible_facts:
new_var:
- color-red
- color-blue
- color-orange
PLAY RECAP ************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
--
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-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/3490a8af-689c-4cb1-8670-1495258df226n%40googlegroups.com.
-- Todd
Hi Todd Lewis,Thanks . I am able to understand it . However the split happens based on ',' , and then we remove the quotes with map('map', 'trim')) and align the lines with range.However assuming split with delimiter as comma, when i try to replace 1 with 0 the output is [msg: "{{ range(my_var | length) | map('extract', (my_var | map('split', ',') | map('map', 'trim')), [1]) }}"]ok: [localhost] =>
msg:
- line1 has
- line2 has
- line3 hasand when tried to add [0 1] in the end [msg: "{{ range(my_var | length) | map('extract', (my_var | map('split', ',') | map('map', 'trim')), [0 1]) }}"]it printsok: [localhost] =>msg:
- i
- i
- ithat is second character in the word line[0]. Is not the split breaks the words with (',')?How to print all the available column? instead of 1( yes the full file without a comma now )Actually I am trying to print like belowline1 has color-redline2 has color-blueline3 has, color-orange
However assuming split with delimiter as comma, when i try to replace 1 with 0 the output is [msg: "{{ range(my_var | length) | map('extract', (my_var | map('split', ',') | map('map', 'trim')), [0]) }}"]
- name: First and Second parts from split on comma
ansible.builtin.set_fact:
new_var: "{{ my_var | map('regex_replace', '^([^,]*),([^,]*),.*', '\\1 \\2') | map('regex_replace', ' +', ' ') }}"
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/6ec4afb2-6c70-4bc0-a1a0-2205ed7d49c0n%40googlegroups.com.
-- Todd