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.