Jiaranai Praphasanon
Jiaranai Praphasanon

Reputation: 13

Extract data from stdout_lines in Ansible and match same element

I'm trying to match all of same element of my 2 stdout_lines variables in Ansible and write them to file. What should i do?

variableA:

 "stdout_lines": [
            "process1",
            "process2",
            "process3",
            "process4",
            "process5",
            "process6",
            "process7",
            "process8"
        ]

variableB:

"stdout_lines": [
                "processID1",
                "processID2",
                "processID3",
                "processID4",
                "processID5",
                "processID6",
                "processID7",
                "processID8"
            ]

I tried this but it's not work.

- name: save to log
  lineinfile:
      dest: '{{pathlog}}'
      line: 'Process: {{ item.name }}    PID({{item.id}})'
  with_items: 
      - { name: "{{variableA.stdout_lines}}", id: "{{variableB.stdout_lines}}" }

Expected results :

Process: process1  PID (processID1)
Process: process2  PID (processID2)
Process: process3  PID (processID3)
Process: process4  PID (processID4)
Process: process5  PID (processID5)
Process: process6  PID (processID6)
Process: process7  PID (processID7)
Process: process8  PID (processID8)

Failed results I received:

Process: [u'process1', u'process2', u'process3', u'process4', u'process5', u'process6', u'process7', u'process8']    PID([u'processID1', u'processID2', u'processID3', u'processID4', u'processID5', u'processID6', u'processID7', u'processID8'])

Upvotes: 1

Views: 420

Answers (2)

Vladimir Botka
Vladimir Botka

Reputation: 68034

Try this

- name: save to log
  lineinfile:
    create: true
    dest: '{{ pathlog }}'
    line: 'Process: {{ item.0 }}    PID({{ item.1 }})'
  loop: "{{ variableA.stdout_lines|zip(variableB.stdout_lines)|list }}"

should give

shell> cat /tmp/test.txt 
Process: process1    PID(processID1)
Process: process2    PID(processID2)
Process: process3    PID(processID3)
Process: process4    PID(processID4)
Process: process5    PID(processID5)
Process: process6    PID(processID6)
Process: process7    PID(processID7)
Process: process8    PID(processID8)

Upvotes: 3

Jack
Jack

Reputation: 6158

with_indexed_items will do the trick:

  - debug:
      msg: "Process: {{ VariableA.stdout_lines[item.0] }} PID ({{ item.1 }})"
    with_indexed_items: "{{ VariableB.stdout_lines }}"

Upvotes: 1

Related Questions