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