TrashNotes

2025-02-19 13:56:37
написать скрипт на питоне который читает ansible-hosts как источник информации , и генерирует hotlist для "GNU Midnight Commander"

from ansible.inventory.manager import InventoryManager
from ansible.parsing.dataloader import DataLoader
from ansible.vars.manager import VariableManager
import os

# Путь к файлу ansible-hosts и hotlist
ansible_hosts_file = 'hosts'  # Укажите путь к вашему файлу инвентаря
hotlist_file = os.path.expanduser('hotlist')

def load_inventory(inventory_file):
    """Загружает инвентарь из файла."""
    loader = DataLoader()
    inventory = InventoryManager(loader=loader, sources=inventory_file)
    variable_manager = VariableManager(loader=loader, inventory=inventory)
    return inventory, variable_manager

def generate_hotlist(inventory, output_file):
    """Генерирует hotlist для Midnight Commander."""
    with open(output_file, 'w') as file:
        for group in inventory.groups.values():
            file.write(f'# Группа: {group.name}\n')  # Добавляем комментарий с именем группы
            for host in group.hosts:
                # Получаем переменные хоста
                host_vars = inventory.get_host(host.name).vars
                ansible_user = host_vars.get('ansible_user', 'root')  # По умолчанию 'root'
                ansible_port = host_vars.get('ansible_port', 22)  # По умолчанию 22
                
                # Формируем URL для hotlist
                entry = f'ENTRY "({host.name})" URL "sh://{ansible_user}@{host.name}:{ansible_port}"\n'
                file.write(entry)
            file.write('\n')  # Разделяем группы пустой строкой

def main():
    # Загружаем инвентарь из файла
    inventory, variable_manager = load_inventory(ansible_hosts_file)
    
    # Генерируем hotlist
    generate_hotlist(inventory, hotlist_file)
    print(f'Hotlist успешно сгенерирован в {hotlist_file}')

if __name__ == "__main__":
    main()
← Previous Next →
Back to list