Ansible-Roles/playbooks/gather_facts.yml
2026-05-08 22:12:36 +03:00

148 lines
5.2 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
# Сбор системных фактов со всех управляемых хостов и сохранение в JSON-файлы.
# Результаты публикуются как GitLab Pages через scripts/generate_report.py.
#
# Запуск:
# ansible-playbook -i inventory/prod playbooks/gather_facts.yml
- name: Gather and save host facts
hosts: all
gather_facts: true
ignore_unreachable: true
vars:
facts_output_dir: "{{ playbook_dir }}/../host_facts"
tasks:
- name: Собрать информацию об установленных пакетах
ansible.builtin.package_facts:
manager: auto
failed_when: false
- name: Собрать информацию о системных службах
ansible.builtin.service_facts:
failed_when: false
- name: Получить открытые TCP/UDP порты
ansible.builtin.command: ss -tlnup
register: _ports_raw
changed_when: false
failed_when: false
become: true
- name: Получить правила firewalld (CentOS)
ansible.builtin.command: firewall-cmd --list-all-zones
register: _firewalld_raw
changed_when: false
failed_when: false
become: true
when: ansible_facts['distribution'] | default('') == 'CentOS'
- name: Получить правила ufw (Debian)
ansible.builtin.command: ufw status verbose
register: _ufw_raw
changed_when: false
failed_when: false
become: true
when: ansible_facts['distribution'] | default('') == 'Debian'
- name: Подготовить данные о портах и фаерволе
ansible.builtin.set_fact:
_network_security:
ports_raw: "{{ _ports_raw.stdout | default('') }}"
firewall_raw: >-
{{
_firewalld_raw.stdout | default('')
if ansible_facts.get('distribution', '') == 'CentOS'
else _ufw_raw.stdout | default('')
}}
- name: Инициализировать данные о Docker-контейнерах
ansible.builtin.set_fact:
_docker_info:
containers: []
- name: Проверить наличие Docker и получить ID запущенных контейнеров
ansible.builtin.command: docker ps -q
register: _docker_ids
changed_when: false
failed_when: false
become: true
- name: Получить детали запущенных Docker-контейнеров
ansible.builtin.command: docker inspect {{ _docker_ids.stdout_lines | join(' ') }}
register: _docker_inspect_raw
changed_when: false
failed_when: false
become: true
when:
- _docker_ids.rc == 0
- _docker_ids.stdout | trim | length > 0
- name: Обновить данные о Docker-контейнерах
ansible.builtin.set_fact:
_docker_info:
containers: "{{ _docker_inspect_raw.stdout | from_json }}"
when:
- _docker_inspect_raw is defined
- _docker_inspect_raw is not skipped
- _docker_inspect_raw.rc == 0
- _docker_inspect_raw.stdout | default('') | trim | length > 0
- name: Получить активные TCP-соединения к внешним хостам
ansible.builtin.command: ss -tnp state established
register: _connections_raw
changed_when: false
failed_when: false
become: true
- name: Получить список процессов с аргументами
ansible.builtin.command: ps -eo pid,args --no-headers
register: _ps_raw
changed_when: false
failed_when: false
become: true
- name: Подготовить данные об активных TCP-соединениях
ansible.builtin.set_fact:
_connections_info:
connections_raw: "{{ _connections_raw.stdout | default('') }}"
ps_raw: "{{ _ps_raw.stdout | default('') }}"
- name: Получить таблицу conntrack (TCP и UDP)
ansible.builtin.command: conntrack -L 2>/dev/null
register: _conntrack_raw
changed_when: false
failed_when: false
become: true
- name: Подготовить данные conntrack
ansible.builtin.set_fact:
_conntrack_info:
conntrack_raw: "{{ _conntrack_raw.stdout | default('') }}"
- name: Создать локальную директорию для хранения фактов
ansible.builtin.file:
path: "{{ facts_output_dir }}"
state: directory
mode: "0755"
delegate_to: localhost
run_once: true
become: false
- name: Сохранить факты хоста в JSON
ansible.builtin.copy:
content: >-
{{
ansible_facts
| combine({'inventory_hostname': inventory_hostname})
| combine(_network_security)
| combine(_docker_info)
| combine(_connections_info)
| combine(_conntrack_info)
| to_nice_json
}}
dest: "{{ facts_output_dir }}/{{ inventory_hostname }}.json"
mode: "0644"
delegate_to: localhost
become: false