Ad-hoc команды - это возможность запустить какое-то действие Ansible из командной строки.
Такой вариант используется, как правило, в тех случаях, когда надо что-то проверить, например, работу модуля. Или просто выполнить какое-то разовое действие, которое не нужно сохранять.
В любом случае, это простой и быстрый способ начать использовать Ansible.
Сначала нужно создать в локальном каталоге инвентарный файл. Назовем его myhosts:
[cisco-routers] 192.168.100.1 192.168.100.2 192.168.100.3 [cisco-switches] 192.168.100.100
При подключении к устройствам первый раз, сначала лучше подключиться к ним вручную, чтобы ключи устройств были сохранены локально. В Ansible есть возможность отключить эту первоначальную проверку ключей. В разделе о конфигурационном файле мы посмотрим, как это делать (такой вариант может понадобиться, если надо подключаться к большому количеству устройств).
Пример ad-hoc команды:
$ ansible cisco-routers -i myhosts -m raw -a "sh ip int br" -u cisco --ask-pass
Разберемся с параметрами команды:
cisco-routers
- группа устройств, к которым нужно применить действия-i myhosts
- параметр -i позволяет указать инвентарный файл-m raw -a "sh ip int br"
- параметр -m raw
означает, что используется модуль raw-a "sh ip int br"
- параметр -a
указывает, какую команду отправить-u cisco
- подключение выполняется от имени пользователя cisco--ask-pass
- параметр, который нужно указать, чтобы аутентификация была по паролю, а не по ключамРезультат выполнения будет таким:
$ ansible cisco-routers -i myhosts -m raw -a "sh ip int br" -u cisco --ask-pass
Ошибка значит, что нужно установить программу sshpass. Эта особенность возникает, только когда используется аутентификация по паролю.
Установка sshpass:
$ sudo apt-get install sshpass
Команду надо выполнить повторно:
$ ansible cisco-routers -i myhosts -m raw -a "sh ip int br" -u cisco --ask-pass
Теперь всё прошло успешно. Команда выполнилась, и отобразился вывод с каждого устройства.
Аналогичным образом можно попробовать выполнять и другие команды и/или на других комбинациях устройств.