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.

Reply via email to