Введение в команды ad hoc
Команда Ansible ad hoc использует инструмент /usr/bin/ansible командной строки для автоматизации одной задачи на одном или нескольких управляемых узлах. Команды ad hoc быстры и просты, но они не являются многоразовыми. Так почему же стоит изучать команды ad hoc в первую очередь? Команды ad hoc демонстрируют простоту и мощь Ansible. Концепции, изученные здесь, напрямую переносятся на язык playbooks. Перед чтением и выполнением этих примеров, пожалуйста, ознакомьтесь с созданием инвентаризации.
Зачем использовать команды ad hoc?
Команды ad hoc отлично подходят для задач, которые выполняются редко. Например, если вы хотите выключить все машины в вашей лаборатории на рождественские каникулы, вы можете выполнить быструю команду Ansible без написания playbook. Команда ad hoc выглядит так:
$ ansible [pattern] -m [module] -a "[module options]"
Дополнительную информацию о шаблонах и модулях можно найти на других страницах.
Примеры использования задач ad hoc
Задачи ad hoc можно использовать для перезагрузки серверов, копирования файлов, управления пакетами и пользователями и многим другим. Вы можете использовать любой модуль Ansible в задаче ad hoc. Задачи ad hoc, как и playbooks, используют декларативную модель, вычисляя и выполняя действия, необходимые для достижения указанного конечного состояния. Они достигают идемпотентности, проверяя текущее состояние перед началом и ничего не делая, если текущее состояние отличается от указанного конечного состояния.
Перезагрузка серверов
По умолчанию модуль для инструмента ansible командной строки — это модуль command Ansible. Вы можете использовать задачу ad hoc для вызова модуля command и перезагрузки всех веб-серверов в Атланте, по 10 за раз. Для этого Ansible должен иметь все серверы в Атланте в группе [atlanta] в инвентаризации и действующие SSH-учетные данные для каждой машины в этой группе. Чтобы перезагрузить все серверы в группе [atlanta]:
$ ansible atlanta -a "/sbin/reboot"
По умолчанию Ansible использует только 5 одновременных процессов. Если у вас больше узлов, чем значение, установленное для количества вилок, Ansible будет взаимодействовать с ними, но это займет немного больше времени. Чтобы перезагрузить серверы [atlanta] с 10 параллельными вилками:
$ ansible atlanta -a "/sbin/reboot" -f 10
/usr/bin/ansible по умолчанию будет выполняться от имени вашего пользователя. Чтобы подключиться как другой пользователь:
$ ansible atlanta -a "/sbin/reboot" -f 10 -u username
Для перезагрузки, вероятно, требуется повышение привилегий. Вы можете подключиться к серверу как username и выполнить команду как пользователь root с использованием ключевого слова become:
$ ansible atlanta -a "/sbin/reboot" -f 10 -u username --become [--ask-become-pass]
Если вы добавите --ask-become-pass или -K, Ansible запросит у вас пароль для повышения привилегий (sudo/su/pfexec/doas/и т.д.).
Примечание
Модуль command не поддерживает расширенный синтаксис оболочки, такой как конвейеры и перенаправления (хотя переменные оболочки всегда будут работать). Если ваша команда требует синтаксиса, специфичного для оболочки, используйте модуль shell вместо него. Подробнее о различиях см. на странице Работа с модулями.
Во всех наших примерах до сих пор использовался модуль по умолчанию «command». Чтобы использовать другой модуль, передайте -m в качестве имени модуля. Например, чтобы использовать модуль shell Ansible:
$ ansible raleigh -m ansible.builtin.shell -a 'echo $TERM'
При выполнении любой команды с помощью CLI Ansible ad hoc (в отличие от Playbooks) уделяйте особое внимание правилам цитирования в оболочке, чтобы локальная оболочка сохранила переменную и передала ее Ansible. Например, использование двойных, а не одинарных кавычек в вышеприведенном примере приведет к оценке переменной на вашей машине.
Управление файлами
Задача ad hoc может использовать Ansible и SCP для передачи многих файлов на несколько машин параллельно. Для передачи файла напрямую всем серверам в группе [atlanta]:
$ ansible atlanta -m ansible.builtin.copy -a "src=/etc/hosts dest=/tmp/hosts"
Если вы планируете повторять такую задачу, используйте модуль template Ansible в playbook.
Модуль file Ansible позволяет изменять права владения и разрешения на файлы. Эти же параметры можно передать напрямую модулю copy:
$ ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/a.txt mode=600" $ ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"
Модуль file также может создавать директории, аналогично mkdir -p:
$ ansible webservers -m ansible.builtin.file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"
А также удалять директории (рекурсивно) и файлы:
$ ansible webservers -m ansible.builtin.file -a "dest=/path/to/c state=absent"
Управление пакетами
Вы также можете использовать задачу ad hoc для установки, обновления или удаления пакетов на управляемых узлах с помощью модуля управления пакетами, например, yum. Чтобы убедиться, что пакет установлен без обновления:
$ ansible webservers -m ansible.builtin.yum -a "name=acme state=present"
Чтобы убедиться, что установлена определённая версия пакета:
$ ansible webservers -m ansible.builtin.yum -a "name=acme-1.5 state=present"
Чтобы убедиться, что пакет обновлён до последней версии:
$ ansible webservers -m ansible.builtin.yum -a "name=acme state=latest"
Чтобы убедиться, что пакет не установлен:
$ ansible webservers -m ansible.builtin.yum -a "name=acme state=absent"
Ansible имеет модули для управления пакетами на многих платформах. Если модуль для вашего менеджера пакетов отсутствует, вы можете установить пакеты с помощью модуля command или создать модуль для своего менеджера пакетов.
Управление пользователями и группами
Вы можете создавать, управлять и удалять учетные записи пользователей на управляемых узлах с помощью задач ad hoc:
$ ansible all -m ansible.builtin.user -a "name=foo password=<crypted password here>" $ ansible all -m ansible.builtin.user -a "name=foo state=absent"
См. документацию модуля user Ansible для получения подробной информации обо всех доступных параметрах, включая манипуляции с группами и членством в группах.
Управление службами
Убедитесь, что служба запущена на всех веб-серверах:
$ ansible webservers -m ansible.builtin.service -a "name=httpd state=started"
В качестве альтернативы, перезапустите службу на всех веб-серверах:
$ ansible webservers -m ansible.builtin.service -a "name=httpd state=restarted"
Убедитесь, что служба остановлена:
$ ansible webservers -m ansible.builtin.service -a "name=httpd state=stopped"
Сбор фактов
Факты представляют собой обнаруженные переменные о системе. Вы можете использовать факты для реализации условного выполнения задач, а также просто для получения информации об ад хоккейных системах. Чтобы увидеть все факты:
$ ansible all -m ansible.builtin.setup
Вы также можете отфильтровать этот вывод, чтобы отобразить только определенные факты, см. документацию модуля setup Ansible для получения подробной информации.
Теперь, когда вы понимаете основные элементы выполнения Ansible, вы готовы узнать, как автоматизировать повторяющиеся задачи с использованием Ansible Playbooks.
См. также
- Настройка Ansible
-
Все о файле конфигурации Ansible
- Индекс коллекций
-
Просмотр существующих коллекций, модулей и плагинов
- Работа с playbooks
-
Использование Ansible для управления конфигурацией и развертывания
- Список рассылки
-
Вопросы? Помощь? Идеи? Обратитесь к списку на Google Groups
- irc.freenode.net
-
Канал IRC #ansible
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/user_guide/intro_adhoc.html