Как предложить пользователю ввести имя хоста, которое затем собирает его из большого списка

Используя python через ansible, я собрал список из 7000 имен хостов из DNS, но я хочу предложить пользователю ввести имя хоста, и в ответ имя хоста появится, если оно присутствует.

Но это не обязательно, смотреть ли весь список или только одно указанное имя хоста.

Сценарий выполнен в xshell 5.

Есть идеи, как мне поступить?

2 ответа

Один из способов сделать это - использовать input(python3) (или raw_input(python2)) или указав имя хоста в качестве аргумента вашего скрипта. Вы можете получить вывод от всех, не указав имя хоста.

Предполагая, что ваши имена хостов находятся в списке Python dnshostnames:

input:

hostname = input("specify hostname (blank for all)").strip()
if hostname:
    if hostname in dnshostnames:
        print("{} in host name list".format(hostname))
else:
    print("Hostnames:\n\n","\n".join(dnshostnames)

или в качестве аргумента сценария:

import sys

if len(sys.argv<1): 
    #assuming hostname has no whitespace in name
    if sys.argv[1] in dnshostnames:
        print("{} in host name list".format(hostname))
else:
    print("Hostnames:\n\n","\n".join(dnshostnames)

который затем будет называться python myscript.py myhostname

Использование python через ansible

Я предполагаю, что это означает, что вы используете скрипт динамического инвентаря. Неудовлетворительный, но общий подход, встречающийся в большинстве сценариев инвентаризации, заключается в использовании переменных среды, влияющих на поведение сценариев инвентаризации, поскольку в настоящее время невозможно получить доступ к любому параметру, переданному в ansible.

Итак, если вы называете ansible следующим образом:

LIMIT_PATTERN="some-host[0-9]*" ansible-playbook -i your-script.py

Вы можете получить доступ к шаблону как os.environ.get('LIMIT_PATTERN') и использовать его, чтобы ограничить ваш набор результатов.

Не рекомендуется переводить все 7000 хостов в Ansible, а затем ограничивать результат в ansible, например, с помощью vars_prompt или модуля pause, поскольку это значительно замедляет запуск Ansible.

Другие вопросы по тегам