Обновить playbooks/inventory.yml

This commit is contained in:
2025-12-10 09:28:11 +00:00
parent 2968a4ba21
commit 7095052bf3

View File

@@ -1,43 +1,19 @@
--- ---
- name: Debug Payload - name: Сбор инвентаря и создание его в Semaphore UI
debug: hosts: localhost
msg: connection: local
- "Name: {{ inventory_name }}" gather_facts: no
- "SSH Key ID: {{ semaphore_key_id }}" vars:
- "Content Length: {{ inventory_content | length }}"
#- name: Сбор инвентаря и создание его в Semaphore UI
#hosts: localhost
#connection: local
#gather_facts: no
#vars:
# --- НАСТРОЙКИ SEMAPHORE --- # --- НАСТРОЙКИ SEMAPHORE ---
#semaphore_url: "http://192.168.0.198:9999" # Адрес вашего Semaphore semaphore_url: "http://192.168.0.198:9999" # Укажите ваш URL (или http://localhost:3000)
#semaphore_project_id: 1 # ID проекта semaphore_project_id: 1
#semaphore_key_id: 7 # ID ключа (Store Key) для подключения к хостам # ID ключа, который будет использоваться для подключения к новым хостам
#semaphore_api_token: "9ojexqiwt1xkemig7j1bd1pe-frh7hkre4reryk2occ=" # Вставьте токен или передайте через Extra Vars semaphore_key_id: 7
#inventory_name: "Auto Scanned Network" # Как назвать инвентарь в Semaphore # Токен API (лучше хранить в Secret, но для теста можно тут)
semaphore_api_token: "9ojexqiwt1xkemig7j1bd1pe-frh7hkre4reryk2occ="
inventory_name: "Auto Scanned Network"
- name: Создание инвентаря в Semaphore через API # --- НАСТРОЙКИ СЕТИ ---
uri:
url: "{{ semaphore_url }}/api/project/{{ semaphore_project_id }}/inventory"
method: POST
headers:
Authorization: "Bearer {{ semaphore_api_token }}"
Content-Type: "application/json"
Accept: "application/json"
body_format: json
body:
name: "{{ inventory_name }}"
project_id: "{{ semaphore_project_id | int }}"
type: "static"
# ВАЖНО: поле называется ssh_key_id, а не key_id
ssh_key_id: "{{ semaphore_key_id | int }}"
inventory: "{{ inventory_content }}"
status_code: [201, 200]
# 201 - Created, 200 - OK
register: api_response
# --- НАСТРОЙКИ СЕТИ (из вашего примера) ---
subnets: subnets:
- "192.168.0.0/24" - "192.168.0.0/24"
- "192.168.1.0/24" - "192.168.1.0/24"
@@ -52,11 +28,14 @@
- "172.19.42.0/23" - "172.19.42.0/23"
- "172.19.56.0/23" - "172.19.56.0/23"
- "172.19.58.0/23" - "172.19.58.0/23"
# ... добавьте остальные подсети ... - "172.19.90.0/23"
# - "192.168.1.0/24" # Добавьте нужные подсети
scan_ports: [5985, 22, 445] scan_ports: [5985, 22, 445]
tasks: tasks:
# 1. Сканирование (Ваш код) # ---------------------------------------------------------
# ШАГ 1: Сканирование (Nmap)
# ---------------------------------------------------------
- name: Сканирование сети (поиск живых IP) - name: Сканирование сети (поиск живых IP)
command: > command: >
nmap -p {{ scan_ports | join(',') }} nmap -p {{ scan_ports | join(',') }}
@@ -64,12 +43,20 @@
{{ subnets | join(' ') }} {{ subnets | join(' ') }}
register: nmap_result register: nmap_result
changed_when: false changed_when: false
ignore_errors: yes # Чтобы не падало, если ничего не нашлось
- name: Извлечение IP адресов - name: Извлечение IP адресов
set_fact: set_fact:
active_ips: "{{ nmap_result.stdout | regex_findall('Host: ([0-9.]+).*Ports:.*(?:' + scan_ports | join('|') + ')/open') | unique | list }}" active_ips: "{{ nmap_result.stdout | regex_findall('Host: ([0-9.]+).*Ports:.*(?:' + scan_ports | join('|') + ')/open') | unique | list }}"
# 2. Определение имен (Ваш код) - name: Проверка, найдены ли IP
fail:
msg: "Не найдено ни одного активного IP. Проверьте настройки сети или Nmap."
when: active_ips | length == 0
# ---------------------------------------------------------
# ШАГ 2: Определение имен
# ---------------------------------------------------------
- name: Определение имен хостов (SMB Discovery + DNS) - name: Определение имен хостов (SMB Discovery + DNS)
shell: | shell: |
IP="{{ item }}" IP="{{ item }}"
@@ -89,7 +76,9 @@
changed_when: false changed_when: false
no_log: true no_log: true
# 3. Сортировка (Ваш код) # ---------------------------------------------------------
# ШАГ 3: Сортировка и генерация текста
# ---------------------------------------------------------
- name: Сортировка хостов - name: Сортировка хостов
set_fact: set_fact:
pc_list: >- pc_list: >-
@@ -103,7 +92,6 @@
| zip(host_names.results | rejectattr('stdout', 'search', 'pc') | map(attribute='stdout') | list) | zip(host_names.results | rejectattr('stdout', 'search', 'pc') | map(attribute='stdout') | list)
| list }} | list }}
# 4. Формирование текста инвентаря в переменную
- name: Генерация текста инвентаря - name: Генерация текста инвентаря
set_fact: set_fact:
inventory_content: | inventory_content: |
@@ -128,14 +116,25 @@
windows_other windows_other
[windows:vars] [windows:vars]
ansible_connection=winrm ansible_connection=ssh
ansible_winrm_transport=ntlm ansible_port=22
ansible_winrm_server_cert_validation=ignore ansible_shell_type=powershell
ansible_port=5985 ansible_user=o.grechko
ansible_user=Administrator
# 5. ОТПРАВКА В SEMAPHORE API # ---------------------------------------------------------
- name: Создание/Обновление инвентаря в Semaphore через API # ШАГ 4: Отладка (проверка данных перед отправкой)
# ---------------------------------------------------------
- name: Debug Payload (Проверка данных)
debug:
msg:
- "URL: {{ semaphore_url }}/api/project/{{ semaphore_project_id }}/inventory"
- "SSH Key ID: {{ semaphore_key_id }}"
- "Количество символов в инвентаре: {{ inventory_content | length }}"
# ---------------------------------------------------------
# ШАГ 5: Отправка в API (ИСПРАВЛЕНО ssh_key_id)
# ---------------------------------------------------------
- name: Создание инвентаря в Semaphore через API
uri: uri:
url: "{{ semaphore_url }}/api/project/{{ semaphore_project_id }}/inventory" url: "{{ semaphore_url }}/api/project/{{ semaphore_project_id }}/inventory"
method: POST method: POST
@@ -148,11 +147,11 @@
name: "{{ inventory_name }}" name: "{{ inventory_name }}"
project_id: "{{ semaphore_project_id | int }}" project_id: "{{ semaphore_project_id | int }}"
type: "static" type: "static"
key_id: "{{ semaphore_key_id | int }}" ssh_key_id: "{{ semaphore_key_id | int }}"
inventory: "{{ inventory_content }}" inventory: "{{ inventory_content }}"
status_code: [201, 204, 200] status_code: [201, 200]
register: api_response register: api_response
- name: Результат API - name: Успех
debug: debug:
msg: "Инвентарь успешно создан! ID: {{ api_response.json.id | default('неизвестен') }}" msg: "Инвентарь создан! ID: {{ api_response.json.id | default('OK') }}"