AllInfo
Main: Info Blog Temp Mail


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


18.227.140.251 / 2024-12-22_20-44-44 UTC.