Search code examples
loopsansiblevar

Ansible - How to save output from loop cycle 1 that I can use in the following loop cycles (2,3...)


I have a task with an API call that returns dictionary as output. From this output I need only an ID. This API call is triggered only once (when item == "1"), but I need it's output available also in the following cycles. Here is the code example I used:

        register: output
        when: item == "1"
        ignore_errors: yes
    
      - debug:
          var: output.json.id
    
      - name: show id
        debug:
          msg: output.json.id is "{{ output.json.id }}"

This is filtered output result I get in 1st cycle:

    ok: [localhost] => {
        "msg": "output.json.id is \"kjfld4343009394\""
    }

In the 2nd cycle API call is skipped (item is not 1) but output from previous cycle is not available any more :

    ok: [localhost] => {
        "output.json.id": "VARIABLE IS NOT DEFINED!: 'dict object' has no attribute 'json'"
    }

BTW In case "debug: var: output.json.id" should be executed just in first cycle, I tried with putting it with conditional item=1 and ignore_errors=yes but that didn't help.

      - debug:
          var: output.json.id
        when: item == "1"
        ignore_errors: yes

What can I do to have this output available in other cycles?

Thanks!


Solution

  • I just found solution with set_fact.

    - name: Set var id (set_fact)
      set_fact:
        var_id: "{{ output.json.id }}"
      when: item == "1"
          
    - debug:
      msg: id is "{{ var_id }}"
    

    When saved like this var_id can be used in the following loop cycles.