2024-03-06 18-45-44 - wrk
#!/usr/bin/env python3
import os
import argparse
from ansible.inventory.manager import InventoryManager
from ansible.parsing.dataloader import DataLoader
from ansible.vars.manager import VariableManager
import sys
def check_ssh_access(inventory_file, section):
# Загрузка инвентаря
loader = DataLoader()
inventory = InventoryManager(loader=loader, sources=inventory_file)
variable_manager = VariableManager(loader=loader, inventory=inventory)
all_hosts_accessible = True # Переменная для отслеживания доступности хостов
# Перебор всех хостов в указанной секции и проверка доступности
for host in inventory.get_hosts(section):
# Получаем IP-адрес из ansible_host или используем имя хоста
host_ip = host.vars.get('ansible_host', host.name)
response = os.system(f"nc -zv -w 2 {host_ip} 22") # Проверка порта 22
# Форматируем вывод в нужном формате
if response == 0:
print(f"{host.name} {host_ip} 22 [open]")
else:
print(f"{host.name} {host_ip} 22 [close]")
all_hosts_accessible = False # Устанавливаем флаг в False, если хост недоступен
return all_hosts_accessible
if __name__ == "__main__":
# Настройка аргументов командной строки
parser = argparse.ArgumentParser(description='Проверка доступности SSH на хостах Ansible.')
parser.add_argument('inventory_file', help='Путь к файлу инвентаря (hosts)')
parser.add_argument('section', help='Секция для проверки (например, all, webservers и т.д.)')
args = parser.parse_args()
# Проверяем доступность хостов
accessible = check_ssh_access(args.inventory_file, args.section)
# Возвращаем код завершения
if not accessible:
sys.exit(10) # Возвращаем код 10, если хотя бы один хост недоступен
else:
sys.exit(0) # Возвращаем код 0, если все хосты доступны