I am digging into  ansible.builtin.copy and ansible.builtin.template
*content *but not get options to append.

 Can we append two different tasks data into one csv file instead of over
write?

One task i have under '*rescue*' section as example below:

rescue:
- name: Create failed_list CSV
  *ansible.builtin.copy:*
      *content: |*
        failed
        {% for host in hostvars | dict2items | map(attribute='value')
| map(attribute='failed_list', default=[]) | flatten %}
        {{ host }}
        {% endfor %}
      dest: */tmp/facts.csv*
    run_once: true

/tmp/facts.csv gives

# cat /tmp/facts.csvsomedata1
somedata2

 I have another task cvs data under '*always*' section:

always:
- name: append volume info to CSV
  *ansible.builtin.copy:*
      *content: |*
        failed
        {% example rule  %}
        {{ host }}
        {% endfor %}
      dest: /tmp/facts.csv
    run_once: true
Gives:

# cat /tmp/facts.csvsomedata3

somedata4

It should append data instead of overwrite here. Is it possible?
We just need end of two files data into one:

# cat /tmp/facts.csv
somedata1
somedata2
somedata3
somedata4


Thank you,

On Thu, 16 Mar 2023, 00:13 Todd Lewis, <[email protected]> wrote:

> Study and play around with these expressions until you understand what
> each piece does.
> set_fact sets a host-specific fact, which for convenience can be accessed
> like any other variable.
> Any host can see other hosts' facts/variables by looking in
> hostvars['somehost'].*varname*.
> The "CSV" is really just a list of failed hosts. With only one column,
> does CSV really mean anything?
> The final copy task should be a template task, but I left it in-line for
> clarity.
>
>   - name: Update failed_list fact
>     ansible.builtin.set_fact:
>       failed_list: "{{ failed_list | default([]) + [ansible_host] }}"
>
>   - name: Debug list
>     ansible.builtin.debug:
>      msg:
>       - "by play_hosts: {{ ansible_play_hosts | map('extract', hostvars) | 
> map(attribute='failed_list') | flatten }}"
>       - "by all: {{ hostvars | dict2items | map(attribute='value') | 
> map(attribute='failed_list', default=[]) | flatten }}"
>
>   - name: Create failed_list CSV
>     ansible.builtin.copy:
>       content: |
>         failed
>         {% for host in hostvars | dict2items | map(attribute='value') | 
> map(attribute='failed_list', default=[]) | flatten %}
>         {{ host }}
>         {% endfor %}
>       dest: /tmp/failed_list.csv
>     run_once: true
>
> Hope this helps.
> --
> Todd
>
> On 3/15/23 1:44 PM, Aharonu wrote:
>
> Hello Everyone,
>
> Greetings!
>
> I am working to get failed hosts from 'rescue' section into a CSV file.
>
> When i run task for *'inventory_hostname*' from *'rescue'* section:
>
> rescue:
>>         - name: inventory_host name list debug
>>           debug:
>>             msg: "{{ inventory_hostname }}"
>> Output:
>> TASK [inventory_host name list debug]
>> *******************************************************************************************************************************************************************************************************
>> ok: [bogus1] => {}
>>
>> MSG:
>>
>> bogus1
>> ok: [bogus2] => {}
>>
>> MSG:
>>
>> bogus2
>>
>> *when  i tried to append data to a list. *
>
>>         - set_fact:
>>             failed_list: "{{ failed_list + [ansible_host] }}"
>>         - name: failed_list debug
>>           debug: var=failed_list
>>
>
> Output:
> TASK [set_fact]
> *****************************************************************************************************************************************************************************************************************************
> ok: [bogus1]
> ok: [bogus2]
>
> TASK [failed_list debug]
> ********************************************************************************************************************************************************************************************************************
> ok: [bogus1] => {
>     "failed_list": [
>         "bogus1"
>     ]
> }
> ok: [bogus2] => {
>     "failed_list": [
>         "bogus2"
>     ]
> }
>
>
> Here bogus1, bogus2 host names are failed in 'resce' section.
> We have multiple hosts in our environment. While running playbook we have
> to capture failed hostname into a file  as mentioned below:
>
> *failed_hosts.csv:*
> *number of failed hots: 2*
> *hostname:*
> *bogus1*
> *bogus2*
>
>
> Thank you for your help.
> --
> 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/CANGEjuXCUuCkps8CU9oWnh3XHN7jo6OJnGJQOCQRvay9w1rg2w%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CANGEjuXCUuCkps8CU9oWnh3XHN7jo6OJnGJQOCQRvay9w1rg2w%40mail.gmail.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/9646aced-38a3-b18b-e71f-d7186a8b41fa%40gmail.com
> <https://groups.google.com/d/msgid/ansible-project/9646aced-38a3-b18b-e71f-d7186a8b41fa%40gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CANGEjuUeGyq_PnpA8cPktOZdoERdv%2BQmfJdk04EXrxfSsOViLQ%40mail.gmail.com.

Reply via email to