- name: Gather and write system information to CSV on control node hosts: all gather_facts: no user: root become: yes tasks: - name: Gather system information setup: gather_subset: - 'all' register: system_info - name: Set extended system facts set_fact: system_summary: hostname: "{{ system_info.ansible_facts.ansible_hostname }}" ipv4_addresses: "{{ system_info.ansible_facts.ansible_all_ipv4_addresses | join(',') }}" ipv6_addresses: "{{ system_info.ansible_facts.ansible_all_ipv6_addresses | join(',') }}" cpu: "{{ system_info.ansible_facts.ansible_processor | join(',') }}" total_memory_mb: "{{ system_info.ansible_facts.ansible_memtotal_mb }}" os_distribution: "{{ system_info.ansible_facts.ansible_distribution }}" os_version: "{{ system_info.ansible_facts.ansible_distribution_version }}" os_family: "{{ system_info.ansible_facts.ansible_os_family }}" architecture: "{{ system_info.ansible_facts.ansible_architecture }}" kernel: "{{ system_info.ansible_facts.ansible_kernel }}" uptime_seconds: "{{ system_info.ansible_facts.ansible_uptime_seconds }}" default_ipv4: "{{ system_info.ansible_facts.ansible_default_ipv4.address }}" default_ipv6: "{{ system_info.ansible_facts.ansible_default_ipv6.address if system_info.ansible_facts.ansible_default_ipv6 is defined else '' }}" mounts: "{{ system_info.ansible_facts.ansible_mounts | map(attribute='mount') | join(',') }}" interfaces: "{{ system_info.ansible_facts.ansible_interfaces | join(',') }}" gateway_ipv4: "{{ system_info.ansible_facts.ansible_default_ipv4.gateway }}" gateway_ipv6: "{{ system_info.ansible_facts.ansible_default_ipv6.gateway if system_info.ansible_facts.ansible_default_ipv6 is defined else '' }}" - name: Ensure CSV file exists and write header on control node local_action: module: lineinfile path: ./system_info.csv line: '"hostname","ipv4_addresses","ipv6_addresses","cpu","total_memory_mb","os_distribution","os_version","os_family","architecture","kernel","uptime_seconds","default_ipv4","default_ipv6","mounts","interfaces","gateway_ipv4","gateway_ipv6"' create: yes state: present run_once: true # Only run once to write the header - name: Append system information to CSV on control node local_action: module: lineinfile path: ./system_info.csv line: '"{{ system_summary.hostname }}","{{ system_summary.ipv4_addresses }}","{{ system_summary.ipv6_addresses }}","{{ system_summary.cpu }}","{{ system_summary.total_memory_mb }}","{{ system_summary.os_distribution }}","{{ system_summary.os_version }}","{{ system_summary.os_family }}","{{ system_summary.architecture }}","{{ system_summary.kernel }}","{{ system_summary.uptime_seconds }}","{{ system_summary.default_ipv4 }}","{{ system_summary.default_ipv6 }}","{{ system_summary.mounts }}","{{ system_summary.interfaces }}","{{ system_summary.gateway_ipv4 }}","{{ system_summary.gateway_ipv6 }}"' create: yes insertafter: EOF