wrk 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, если все хосты доступны