Ad Hoc команды#

Ad-hoc команды - это возможность запустить какое-то действие Ansible из командной строки.

Такой вариант используется, как правило, в тех случаях, когда надо что-то проверить, например, работу модуля. Или просто выполнить какое-то разовое действие, которое не нужно сохранять. В любом случае, это простой и быстрый способ начать использовать Ansible.

Сначала нужно создать в локальном каталоге инвентарный файл. Назовем его myhosts.ini:

[cisco_routers]
192.168.100.1
192.168.100.2
192.168.100.3

При подключении к устройствам первый раз, сначала лучше подключиться к ним вручную, чтобы ключи устройств были сохранены локально. В Ansible есть возможность отключить эту первоначальную проверку ключей. В разделе о конфигурационном файле мы посмотрим, как это делать (такой вариант может понадобиться, если надо подключаться к большому количеству устройств).

Пример ad-hoc команды:

$ ansible 192.168.100.1 -i myhosts.ini -c network_cli -e ansible_network_os=ios -u cisco -k -m ios_command -a "commands='sh clock'"

Разберемся с параметрами команды:

  • 192.168.100.1 - устройство, к которому нужно применить действия

    • эта устройство должно существовать в инвентарном файле

    • это может быть группа, конкретное имя или адрес

    • если нужно указать все хосты из файла, можно использовать значение all или *

    • Ansible поддерживает более сложные варианты указания хостов, с регулярными выражениями и разными шаблонами. Подробнее об этом в документации

  • -i myhosts.ini - параметр -i позволяет указать инвентарный файл

  • -c network_cli - параметр -c позволяет указать тип подключения. Тип network_cli подразумевает передачу команд через SSH имитируя человека

    • Для работы network_cli обязательно нужно указывать network_os, в данном случае, это IOS -e ansible_network_os=ios

  • -u cisco - подключение выполняется от имени пользователя cisco

  • -k - параметр, который нужно указать, чтобы аутентификация была по паролю, а не по ключам

  • -m ios_command - параметр указывает какой модуль используется

  • -a "commands='sh ip int br'" - параметр -a указывает, какую команду отправить

Примечание

Большинство параметров можно указать в интентарном файле или в файле переменных.

Результат выполнения будет таким:

$ ansible 192.168.100.1 -i myhosts.ini -c network_cli -e ansible_network_os=ios -u cisco -k -m ios_command -a "commands='sh clock'"
https://raw.githubusercontent.com/natenka/PyNEng/master/images/15_ansible/1_ad-hoc.png

Теперь всё прошло успешно. Команда выполнилась, и отобразился вывод с устройства.

Аналогичным образом можно попробовать выполнять и другие команды и/или на других комбинациях устройств.

Часть параметров можно записать в инвентарный файл и тогда их не нужно будет указывать в команде:

[cisco_routers]
192.168.100.1
192.168.100.2
192.168.100.3

[cisco_routers:vars]
ansible_connection=network_cli
ansible_network_os=ios
ansible_user=cisco
ansible_password=cisco

Теперь ad-hoc команду можно вызвать так:

$ ansible 192.168.100.1 -i myhosts.ini -m ios_command -a "commands='sh ip int br'"

А результат выполнения остается тем же.