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.
flowchart TB
%% ==================== ВХОДЫ ====================
subgraph INPUTS["📥 Входные данные"]
direction TB
YML["hosts.yml<br/><i>Ansible YAML</i>"]
INI["hosts.ini<br/><i>Ansible INI</i>"]
EXC["etc/exclude-ips.txt<br/><i>чёрный список IP</i>"]
UNR["etc/unresolvable.txt<br/><i>имя + IP без DNS</i>"]
end
%% ==================== ОРКЕСТРАТОР ====================
ORCH["🎛️ bin/gen-inventory.sh<br/><i>оркестратор</i><br/>flock · trap · цвета · тайминги"]
%% ==================== МОДУЛЬ 1 ====================
subgraph M1["① extract_hosts.py"]
direction TB
M1_PARSE["Парсер<br/>YAML / INI"]
M1_EXPAND["Разворот диапазонов<br/>192.168.0.[10:20]"]
M1_EXCL["Фильтр exclude-ips"]
M1_UNR["Добавление unresolvable<br/><i>forced = true</i>"]
end
%% ==================== МОДУЛЬ 2 ====================
subgraph M2["② check_ports.py"]
direction TB
M2_TCP["Параллельный TCP-connect<br/>workers=40 · timeout=5s"]
M2_PTR["PTR для IP-целей<br/><i>--no-ptr отключает</i>"]
M2_NOPTR["Список IP без PTR"]
end
%% ==================== МОДУЛЬ 3 ====================
subgraph M3["③ filter_records.py"]
direction TB
M3_MATCH["Сопоставление<br/>resolver ↔ hints"]
M3_INC["--include<br/>оставить совпавшие"]
M3_EXC["--exclude<br/>выкинуть совпавшие"]
M3_EXCH["--exclude-ips-hosts<br/><i>применяется и к forced</i>"]
M3_NAME["Определение итогового имени<br/>hint.hostname → PTR → target"]
end
%% ==================== МОДУЛЬ 4 ====================
subgraph M4["④ compose_inventory.py"]
direction TB
M4_UPD["Обновить last_online<br/>для online"]
M4_PRUNE["Удалить устаревшие<br/>delete-older = 90 дней"]
M4_MERGE["Слить online ∪ кэш"]
M4_GROUP["Группировка + дедуп<br/>по имени в группе"]
M4_WRITE["Запись hosts.ini"]
end
%% ==================== ПРОМЕЖУТОЧНЫЕ ФАЙЛЫ ====================
subgraph RUN["🗂️ run/ — промежуточные файлы"]
T_TARGETS["targets.txt<br/><i>плоский список целей</i>"]
T_HINTS["hints.json<br/><i>{target: {type, hostname,<br/>forced, entries}}</i>"]
T_RESOLVER["resolver.jsonl<br/><i>{name, ip, status, details}</i>"]
T_FILTERED["filtered.jsonl<br/><i>+ entries, forced</i>"]
T_NOPTR["online_no_ptr.txt<br/><i>IP без PTR</i>"]
end
%% ==================== ВЫХОД ====================
subgraph OUTPUTS["📤 Результат"]
OUT_INI["hosts.ini<br/><i>Ansible inventory</i>"]
OUT_CACHE["hosts.ini.cache.json<br/><i>{target: {name, ip, last_online}}</i>"]
OUT_BAK["hosts.ini.TIMESTAMP<br/><i>при --backup</i>"]
end
%% ==================== СЕТИ ====================
NET_TARGETS["🌐 Целевая сеть<br/><i>TCP :22</i>"]
NET_DNS["🌐 DNS<br/><i>PTR-запросы</i>"]
%% ==================== ПОТОК ДАННЫХ ====================
ORCH -.->|шаг 1| M1
ORCH -.->|шаг 2| M2
ORCH -.->|шаг 3| M3
ORCH -.->|шаг 4| M4
YML --> M1_PARSE
INI --> M1_PARSE
EXC --> M1_EXCL
UNR --> M1_UNR
M1_PARSE --> M1_EXPAND --> M1_EXCL --> M1_UNR
M1_UNR --> T_TARGETS
M1_UNR --> T_HINTS
T_TARGETS --> M2_TCP
M2_TCP -->|открыт порт| M2_PTR
M2_TCP -->|refused| M2_PTR
M2_TCP -->|timeout| T_RESOLVER
M2_PTR -->|online + нет PTR| M2_NOPTR
M2_PTR --> T_RESOLVER
M2_NOPTR --> T_NOPTR
M2_TCP -.-> NET_TARGETS
M2_PTR -.-> NET_DNS
T_RESOLVER --> M3_MATCH
T_HINTS --> M3_MATCH
M3_MATCH --> M3_NAME --> M3_INC --> M3_EXC --> M3_EXCH
M3_EXCH --> T_FILTERED
T_FILTERED --> M4_UPD --> M4_PRUNE --> M4_MERGE --> M4_GROUP --> M4_WRITE
OUT_CACHE <-.->|загрузка/сохранение| M4_UPD
OUT_CACHE <-.->|загрузка| M4_MERGE
M4_PRUNE -.-> OUT_CACHE
M4_WRITE --> OUT_INI
M4_WRITE -->|--backup| OUT_BAK
%% ==================== СТИЛИ ====================
classDef inputNode fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#000
classDef orchNode fill:#fff3e0,stroke:#f57c00,stroke-width:3px,color:#000
classDef moduleNode fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#000
classDef fileNode fill:#e8f5e9,stroke:#388e3c,stroke-width:1px,color:#000
classDef outNode fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px,color:#000
classDef netNode fill:#ffebee,stroke:#c62828,stroke-width:1px,color:#000
classDef subGraphStyle fill:#fafafa,stroke:#9e9e9e,stroke-dasharray:5 5
class YML,INI,EXC,UNR inputNode
class ORCH orchNode
class M1_PARSE,M1_EXPAND,M1_EXCL,M1_UNR,M2_TCP,M2_PTR,M2_NOPTR,M3_MATCH,M3_INC,M3_EXC,M3_EXCH,M3_NAME,M4_UPD,M4_PRUNE,M4_MERGE,M4_GROUP,M4_WRITE moduleNode
class T_TARGETS,T_HINTS,T_RESOLVER,T_FILTERED,T_NOPTR fileNode
class OUT_INI,OUT_CACHE,OUT_BAK outNode
class NET_TARGETS,NET_DNS netNode
class INPUTS,RUN,OUTPUTS subGraphStyle
Delete page
Deleting the wiki page "Диаграмма" cannot be undone. Continue?