Как предложить пользователю ввести имя хоста, которое затем собирает его из большого списка
Используя 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.