Create Key value pair

I have list of items to be executed in the command and I have to save the result in stdout for each item to the same item.

Ex:
hosts: dev
tasks:
   - name: get variable
     shell: cat file #this file contain the list of items that I need to run the command
     register: out1

   - name: export
     shell: command {{item}}
     register: out2 #This contains results of each item from out1.
     with_items: "{{out1.stdout_lines}}"

The question is I have to get the stdout of each item result and I have to store as value for that item.

My question would be what the actual tasks are and why there are stored in a file on the target.
It would also help to see the format of this file.

Regards
         Racke

Thank you for your response. I just Showed it for example only… Actually I am getting those keys from register variable(out1)

Hi Sivaraman

Could you please state clearly:

- What goal you are trying to achieve.
- How you are doing this.
- What problems you encounter.
- Which command did you run, and what actual output did you get from
that (copied as plain text - not as images, attachments, or
screenshots)
- What the relevant tasks/playbooks/code/variables look like.

Hi, I just want to

Ex:
hosts: dev
tasks:

  • name: get variable
    shell: some command
    register: out1 # i want to use stdout_lines of these out1 in my next task

  • name: export
    shell: command {{item}}
    register: out2 # i want to use stdout kines of each item in my next task
    with_items: “{{out1.stdout_lines}}”

#After this I tried to combine out1 as key and out2 as value to the key, But I am getting error

  • set_fact:
    my_env: “{{my_env | default ({}) | combine ({{item.0}}: {{item.1}})}}”
    with_nested:
  • “{{out1.stdout_lines}}”
  • “{{out2 | json_query('results[*].stdout_lines}}”

Hi, I just want to

Ex:
hosts: dev
tasks:
- name: get variable
shell: some command
register: out1 # i want to use stdout_lines of these out1 in my next task

- name: export
shell: command {{item}}
register: out2 # i want to use stdout kines of each item in my next task
with_items: "{{out1.stdout_lines}}"

#After this I tried to combine out1 as key and out2 as value to the key, But I am getting error

- set_fact:
my_env: "{{my_env | default ({}) | combine ({{item.0}}: {{item.1}})}}"
with_nested:
- "{{out1.stdout_lines}}"
- "{{out2 | json_query('results[*].stdout_lines}}"

Sorry, I don't think this deserves an answer - you were explicitly asked two times to provide
sufficient information - aside from your actual tasks.

Bye
        Racke

Hi. We need to know specifically what you are trying to do. Not generally.

Create a minimal playbook that implements (or at least tries to implement) your goal. When you’ve got as far as you can, run it and postthe playbook and the output in full here.

In FULL.

Anything else is wasting your time and ours.

Right now this looks to me as if you are a student trying to get someone else to do your homework.

Regards, K.

Hi. We need to know *specifically* what you are trying to do. Not generally.

Create a minimal playbook that implements (or at least tries to implement) your goal. When you've got as far as you can,
run it and postthe playbook and the output in full here.
In FULL.

Anything else is wasting your time and ours.

Right now this looks to me as if you are a student trying to get someone else to do your homework.

Regards, K.

I concur, in addition to that the shell module should only be used if there is no other module around doing the task
*and* the command module doesn't do the trick (see https://docs.ansible.com/ansible/latest/modules/shell_module.html#notes).

Regards
         Racke

Registered variable "out2" keeps in the list "results" both the keys(items)
and values(stdout). Let's create two lists of keys and values, respectively.
Then use the filters "dict" and "zip" to combine them. For example

    - set_fact:
        out2_dict: "{{ dict(my_keys|zip(my_values)) }}"
      vars:
        my_keys: "{{ out2.results|json_query('.item') }}"
        my_values: "{{ out2.results|json_query('.stdout') }}"

This can be simplified to single json_query

    - set_fact:
        out2_dict: "{{ dict(out2.results|
                            json_query('.[item, stdout]')) }}"

See "Combining items from multiple lists". It's frequently repeating pattern.
https://docs.ansible.com/ansible/devel/user_guide/playbooks_filters.html#combining-items-from-multiple-lists-zip-and-zip-longest

HTH,

  -vlado