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()
Back to list