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
On 12/14/23 5:50 AM, Veera wrote:
I have a playbook variable output as below
debug:
msg: "{{my_var}}}"
TASK [debug]
**************************************************************************************************************************
ok: [localhost] => {
"msg": [
"line1 has , color-red, in its middle"
"line2 has, color-blue, in its middle"
"line3 has, color-orange, in its middle"
]
}
I want to use the output lines as an input for another variable using
set_fact , as like below .
- name: Filtering the color data
ansible.builtin.set_fact:
new_var: "{{ item.split(',')[1] }}"
loop: "{{ var1 }}"
and I am looking for the data like below
color-red
color-blue
color-orange
- debug:
var: new_var
gives only color-red
But my var1 looping process the first line only in from the my_var
and not the next 2 lines.
This is an example and I may expect lines from my_var from 0 to 100's.
How to print the column[]of output) with multiple lines ??
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/3490a8af-689c-4cb1-8670-1495258df226n%40googlegroups.com
<https://groups.google.com/d/msgid/ansible-project/3490a8af-689c-4cb1-8670-1495258df226n%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
Todd
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/64667e75-0d43-4aaa-a348-79ce01857c55%40gmail.com.