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'"

Теперь всё прошло успешно. Команда выполнилась, и отобразился вывод с устройства.
Аналогичным образом можно попробовать выполнять и другие команды и/или на других комбинациях устройств.
Часть параметров можно записать в инвентарный файл и тогда их не нужно будет указывать в команде:
[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'"
А результат выполнения остается тем же.