diff --git a/playbooks/scan_inventory.yml b/playbooks/scan_inventory.yml index 25644f2..abc86df 100644 --- a/playbooks/scan_inventory.yml +++ b/playbooks/scan_inventory.yml @@ -1,5 +1,5 @@ --- -- name: "Сканирование сети (Rootless Mode - Fix Regex)" +- name: "Сканирование сети (Final Fix - Regex)" hosts: localhost connection: local gather_facts: no @@ -63,27 +63,26 @@ changed_when: false # ---------------------------------------------------------------- - # ШАГ 3: Классификация (ИСПРАВЛЕНО) + # ШАГ 3: Классификация (ИСПРАВЛЕНО НА REGEX) # ---------------------------------------------------------------- - - name: Анализ результатов (Debug Mode) + - name: Анализ результатов set_fact: classified_hosts: "{{ classified_hosts | default([]) + [ host_data ] }}" vars: out: "{{ item.stdout }}" ip: "{{ item.item }}" - # БЕЗОПАСНЫЙ ПОИСК ИМЕНИ: - # Используем regex_findall вместо search. - # Если ничего не найдено, вернется пустой список [], и default('') сработает корректно. + # Поиск имени (безопасный метод) smb_matches: "{{ out | regex_findall('Computer name: ([\\w-]+)') }}" smb_name: "{{ smb_matches | first | default('') }}" - # ЛОГИКА ОПРЕДЕЛЕНИЯ ТИПА + # ЛОГИКА ОПРЕДЕЛЕНИЯ ТИПА (Используем regex_search для игнорирования лишних пробелов) + # \s+ означает "один или больше пробелов" detected_type: >- - {% if '445/tcp open' in out %}windows - {% elif '8291/tcp open' in out %}mikrotik - {% elif '9100/tcp open' in out %}printer - {% elif '22/tcp open' in out %}linux + {% if out | regex_search('445/tcp\s+open') %}windows + {% elif out | regex_search('8291/tcp\s+open') %}mikrotik + {% elif out | regex_search('9100/tcp\s+open') %}printer + {% elif out | regex_search('22/tcp\s+open') %}linux {% else %}other{% endif %} # Формируем имя @@ -96,7 +95,7 @@ type: "{{ detected_type }}" name: "{{ final_name }}" loop: "{{ scan_results.results }}" - # no_log: true <--- УБРАЛИ, ЧТОБЫ ВИДЕТЬ ОШИБКУ, ЕСЛИ ОНА БУДЕТ + no_log: true # ---------------------------------------------------------------- # ШАГ 4: Группировка @@ -108,6 +107,15 @@ list_tik: "{{ classified_hosts | selectattr('type', 'equalto', 'mikrotik') | list }}" list_prn: "{{ classified_hosts | selectattr('type', 'equalto', 'printer') | list }}" + - name: СТАТИСТИКА (Что нашли) + debug: + msg: + - "Всего живых IP: {{ active_ips | length }}" + - "Windows: {{ list_win | length }}" + - "MikroTik: {{ list_tik | length }}" + - "Linux: {{ list_lin | length }}" + - "Printers: {{ list_prn | length }}" + # ---------------------------------------------------------------- # ШАГ 5: Отправка Windows # ---------------------------------------------------------------- @@ -186,7 +194,7 @@ when: list_tik | length > 0 # ---------------------------------------------------------------- - # ШАГ 7: Отправка Принтеров + # ШАГ 7: Отправка Принтеров (если нужны) # ---------------------------------------------------------------- - block: - name: Генерация инвентаря Принтеров