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()

[file-name 000025_2025-02-19_13-56-37.txt]