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.