Введение в утилиты ad hoc
Команда Ansible ad hoc использует инструмент /usr/bin/ansible командной строки для автоматизации одной задачи на одном или нескольких управляемых узлах. Команды ad hoc быстры и просты, но они не являются многоразовыми. Зачем же изучать команды ad hoc? Команды ad hoc демонстрируют простоту и мощь Ansible. Концепции, которые вы изучите здесь, напрямую переносятся на язык playbook. Перед чтением и выполнением этих примеров, пожалуйста, ознакомьтесь с Инструкцией по созданию инвентаризации.
Зачем использовать команды ad hoc?
Команды ad hoc подходят для задач, которые вы выполняете редко. Например, если вы хотите выключить все машины в вашей лаборатории на рождественские каникулы, вы можете выполнить быструю однострочную команду Ansible без написания playbook. Команда ad hoc выглядит следующим образом:
$ ansible [pattern] -m [module] -a "[module options]"
Опция -a принимает параметры либо в формате key=value , либо в виде JSON-строки, начинающейся с { и заканчивающейся }, для более сложной структуры параметров. Дополнительную информацию об шаблонах и модулях можно найти на других страницах.
Сценарии использования задач ad hoc
Задачи ad hoc могут использоваться для перезагрузки серверов, копирования файлов, управления пакетами и пользователями и многим другим. Вы можете использовать любой модуль Ansible в задаче ad hoc. Задачи ad hoc, подобно playbooks, используют декларативную модель, вычисляя и выполняя действия, необходимые для достижения указанного конечного состояния. Они добиваются идемпотентности, проверяя текущее состояние перед началом и не выполняя никаких действий, если текущее состояние отличается от указанного конечного состояния.
Перезагрузка серверов
По умолчанию модуль для утилиты командной строки ansible — это модуль ansible.builtin.command. Вы можете использовать задачу ad hoc для вызова модуля command и перезагрузки всех веб-серверов в Атланте по 10 за раз. Прежде чем Ansible сможет сделать это, все серверы в Атланте должны быть перечислены в группе [atlanta] в вашей инвентаризации, и должны быть рабочие SSH-кредиты для каждой машины в этой группе. Чтобы перезагрузить все серверы в группе [atlanta]:
$ ansible atlanta -a "/sbin/reboot"
По умолчанию Ansible использует только пять одновременных процессов. Если у вас больше хостов, чем значение, заданное для счетчика вилок, это может увеличить время, необходимое 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/etc).
Примечание
Модуль command не поддерживает расширенные синтаксические конструкции оболочки, такие как конвейеры и перенаправления (хотя переменные оболочки всегда будут работать). Если ваша команда требует синтаксиса, специфичного для оболочки, используйте модуль shell вместо него.
До сих пор все наши примеры использовали модуль по умолчанию «command». Чтобы использовать другой модуль, передайте -m для имени модуля. Например, чтобы использовать модуль ansible.builtin.shell:
$ ansible raleigh -m ansible.builtin.shell -a 'echo $TERM'
При выполнении любой команды с помощью Ansible CLI ad hoc (в отличие от Playbooks), особое внимание уделите правилам цитирования оболочки, чтобы локальная оболочка сохранила переменную и передала ее Ansible. Например, использование двойных, а не одинарных кавычек в приведенном выше примере привело бы к оценке переменной на машине, с которой вы работаете.
Управление файлами
Задача ad hoc может использовать возможности Ansible и SCP для одновременной передачи многих файлов на множество машин. Чтобы передать файл напрямую всем серверам в группе [atlanta]:
$ ansible atlanta -m ansible.builtin.copy -a "src=/etc/hosts dest=/tmp/hosts"
Если вы планируете повторять такую задачу, используйте модуль ansible.builtin.template в playbook.
Модуль ansible.builtin.file позволяет изменять права владения и разрешения файлов. Эти же параметры можно передать напрямую модулю 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, так как они не являются частью общего управления пакетами.
Чтобы убедиться, что пакет установлен без его обновления:
$ 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=<encrypted password here>" $ ansible all -m ansible.builtin.user -a "name=foo state=absent"
См. документацию модуля ansible.builtin.user для получения подробной информации обо всех доступных параметрах, включая способы управления группами и членством в группах.
Управление службами
Убедитесь, что служба запущена на всех веб-серверах:
$ 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"
Сбор фактов
Факты представляют собой обнаруженные переменные о системе. Вы можете использовать факты для реализации условного выполнения задач, а также просто для получения информации ad hoc о ваших системах. Чтобы увидеть все факты:
$ ansible all -m ansible.builtin.setup
Вы также можете отфильтровать этот вывод, чтобы отобразить только определенные факты, см. документацию модуля ansible.builtin.setup для получения подробной информации.
Режим проверки
В режиме проверки Ansible не вносит никаких изменений в удаленные системы. Ansible только выводит команды. Он не выполняет эти команды.
$ ansible all -m copy -a "content=foo dest=/root/bar.txt" -C
Включение режима проверки (-C или --check) в вышеприведенной команде означает, что Ansible не фактически не создает и не обновляет файл /root/bar.txt на каких-либо удаленных системах.
Шаблоны и команды ad hoc
См. документацию шаблонов для получения подробной информации обо всех доступных параметрах, включая то, как ограничить использование шаблонов в командах ad hoc.
Теперь, когда вы понимаете основные элементы выполнения Ansible, вы готовы научиться автоматизировать повторяющиеся задачи, используя Ansible Playbooks.
См. также
- Настройка Ansible
-
Все о файле конфигурации Ansible
- Список коллекций
-
Просмотр существующих коллекций, модулей и плагинов
- Работа с playbooks
-
Использование Ansible для управления конфигурацией и развертывания
- Общение
-
Есть вопросы? Нужна помощь? Хотите поделиться своими идеями? Посетите руководство по общению Ansible
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/command_guide/intro_adhoc.html