diff --git a/playbooks/scan_inventory.yml b/playbooks/scan_inventory.yml index fadcff7..c2c4a38 100644 --- a/playbooks/scan_inventory.yml +++ b/playbooks/scan_inventory.yml @@ -3,14 +3,14 @@ hosts: localhost connection: local gather_facts: no - become: yes # Нужно для сканирования UDP (SNMP) и Nmap -O + # become: yes <--- УБРАЛИ ОТСЮДА (Глобальный sudo вызывает ошибку прав) vars: # --- SEMAPHORE API --- semaphore_url: "http://192.168.0.198:9999" semaphore_project_id: 1 semaphore_api_token: "9ojexqiwt1xkemig7j1bd1pe-frh7hkre4reryk2occ=" - # --- ID КЛЮЧЕЙ ДЛЯ БУДУЩИХ ПОДКЛЮЧЕНИЙ --- + # --- ID КЛЮЧЕЙ --- key_windows: 7 key_linux: 8 key_mikrotik: 9 @@ -33,15 +33,15 @@ - "172.19.58.0/24" - "172.19.90.0/24" - # SNMP Community (пароль для чтения) snmp_community: "public" tasks: # ---------------------------------------------------------------- - # ШАГ 1: Поиск живых хостов (Ping) + # ШАГ 1: Поиск живых хостов # ---------------------------------------------------------------- - name: Ping Sweep (быстрый поиск) command: "nmap -sn -n --min-rate 1000 -T4 -oG - {{ subnets | join(' ') }}" + become: yes # <--- ДОБАВИЛИ СЮДА (Точечно) register: ping_scan changed_when: false @@ -49,14 +49,13 @@ set_fact: active_ips: "{{ ping_scan.stdout | regex_findall('Host: ([0-9.]+)') | unique | list }}" - # ИСПРАВЛЕННАЯ СТРОКА (Теперь это правильный многострочный блок) - name: Проверка наличия хостов fail: msg: "Сеть пуста, активных хостов не найдено." when: active_ips | length == 0 # ---------------------------------------------------------------- - # ШАГ 2: Опрос через SNMP + Проверка портов + # ШАГ 2: Опрос через SNMP # ---------------------------------------------------------------- - name: SNMP Discovery shell: | @@ -64,12 +63,13 @@ --script snmp-sysdescr \ --script-args snmpcommunity={{ snmp_community }} \ -Pn -n -T4 {{ item }} + become: yes # <--- ДОБАВИЛИ СЮДА (Точечно, т.к. UDP скан требует root) loop: "{{ active_ips }}" register: scan_results changed_when: false # ---------------------------------------------------------------- - # ШАГ 3: Классификация на основе ответа SNMP + # ШАГ 3: Классификация # ---------------------------------------------------------------- - name: Анализ устройств и классификация set_fact: @@ -77,19 +77,13 @@ vars: out: "{{ item.stdout }}" ip: "{{ item.item }}" - - # Пытаемся вытащить строку sysDescr snmp_desc: "{{ out | regex_search('sysDescr\\.0: ([^\\n]+)', '\\1') | first | default('') }}" - - # Определяем тип (Логика распознавания) detected_type: >- {% if 'Windows' in snmp_desc or '445/tcp open' in out %}windows {% elif 'RouterOS' in snmp_desc or 'MikroTik' in snmp_desc or '8291/tcp open' in out %}mikrotik {% elif 'Linux' in snmp_desc or 'Ubuntu' in snmp_desc or '22/tcp open' in out %}linux {% elif 'JetDirect' in snmp_desc or 'LaserJet' in snmp_desc or 'Samsung' in snmp_desc or 'Kyocera' in snmp_desc or '9100/tcp open' in out %}printer {% else %}other{% endif %} - - # Собираем данные об одном хосте host_data: ip: "{{ ip }}" type: "{{ detected_type }}" @@ -99,7 +93,7 @@ no_log: true # ---------------------------------------------------------------- - # ШАГ 4: Разбиение на группы + # ШАГ 4: Группировка # ---------------------------------------------------------------- - name: Группировка хостов set_fact: @@ -109,7 +103,7 @@ list_prn: "{{ classified_hosts | selectattr('type', 'equalto', 'printer') | list }}" # ---------------------------------------------------------------- - # ШАГ 5: Отправка в Semaphore (Windows) + # ШАГ 5: Отправка Windows # ---------------------------------------------------------------- - block: - name: Генерация текста инвентаря Windows @@ -148,7 +142,7 @@ when: list_win | length > 0 # ---------------------------------------------------------------- - # ШАГ 6: Отправка в Semaphore (MikroTik) + # ШАГ 6: Отправка MikroTik # ---------------------------------------------------------------- - block: - name: Генерация текста инвентаря MikroTik @@ -186,7 +180,7 @@ when: list_tik | length > 0 # ---------------------------------------------------------------- - # ШАГ 7: Отправка в Semaphore (Принтеры) + # ШАГ 7: Отправка Принтеров # ---------------------------------------------------------------- - block: - name: Генерация текста инвентаря Принтеров