Consider
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/assemble_module.html
It combines multiple files into one.
On Friday, March 17, 2023 at 1:40:05 AM UTC-4 Aharonu wrote:
>
> 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/5f6783f9-7d45-41cf-8d7a-1b7a92303f53n%40googlegroups.com.