Обновить playbooks/inventory.yml
This commit is contained in:
@@ -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') }}"
|
||||||
Reference in New Issue
Block a user