Spec-Zone.ru › Ansible 2.9

Введение в ad-hoc команды

Команда Ansible ad-hoc использует утилиту /usr/bin/ansible командной строки для автоматизации одной задачи на одном или нескольких управляемых узлах. Ad-hoc команды просты и быстры, но не являются многоразовыми. Так почему же стоит начать изучение ad-hoc команд? Ad-hoc команды демонстрируют простоту и мощь Ansible. Понятия, которые вы узнаете здесь, будут напрямую применяться к языку playbooks. Перед чтением и выполнением этих примеров, пожалуйста, прочтите Как создать свой инвентарь.

  • Зачем использовать ad-hoc команды?
  • Сценарии использования ad-hoc задач
    • Перезагрузка серверов
    • Управление файлами
    • Управление пакетами
    • Управление пользователями и группами
    • Управление службами
    • Сбор фактов

Зачем использовать ad-hoc команды?

Ad-hoc команды отлично подходят для задач, которые выполняются редко. Например, если вы хотите выключить все машины в вашей лаборатории на рождественские каникулы, вы можете выполнить быструю однострочную команду в Ansible без написания playbook. Ad-hoc команда выглядит так:

$ ansible [pattern] -m [module] -a "[module options]"

Дополнительную информацию о шаблонах и модулях можно найти на других страницах.

Сценарии использования ad-hoc задач

Ad-hoc задачи могут использоваться для перезагрузки серверов, копирования файлов, управления пакетами и пользователями и многим другим. В ad-hoc задаче можно использовать любой модуль Ansible. Ad-hoc задачи, как и playbooks, используют декларативную модель, вычисляя и выполняя действия, необходимые для достижения заданного конечного состояния. Они достигают идемпотентности, проверяя текущее состояние перед началом и ничего не делая, если текущее состояние отличается от заданного конечного состояния.

Перезагрузка серверов

По умолчанию модуль для утилиты командной строки ansible — это модуль command. Вы можете использовать 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 raleigh -m shell -a 'echo $TERM'

При выполнении любой команды с помощью Ansible ad hoc CLI (в отличие от Playbooks) уделяйте особое внимание правилам цитирования оболочки, чтобы локальная оболочка сохраняла переменную и передавала ее Ansible. Например, использование двойных, а не одинарных кавычек в приведенном выше примере приведет к оценке переменной на том компьютере, на котором вы находитесь.

Управление файлами

Ad-hoc задача может использовать возможности Ansible и SCP для одновременной передачи многих файлов на множество машин. Чтобы передать файл непосредственно на все сервера в группе [atlanta]:

$ ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"

Если вы планируете повторять такую задачу, используйте модуль template в playbook.

Модуль file позволяет изменять права владения и разрешения файлов. Эти же параметры можно передать непосредственно модулю copy:

$ ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600"
$ ansible webservers -m file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"

Модуль file также может создавать каталоги, подобно mkdir -p:

$ ansible webservers -m file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"

А также удалять каталоги (рекурсивно) и удалять файлы:

$ ansible webservers -m file -a "dest=/path/to/c state=absent"

Управление пакетами

Вы также можете использовать ad-hoc задачу для установки, обновления или удаления пакетов на управляемых узлах с помощью модуля управления пакетами, такого как yum. Чтобы гарантировать установку пакета без его обновления:

$ ansible webservers -m yum -a "name=acme state=present"

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

$ ansible webservers -m yum -a "name=acme-1.5 state=present"

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

$ ansible webservers -m yum -a "name=acme state=latest"

Чтобы гарантировать, что пакет не установлен:

$ ansible webservers -m yum -a "name=acme state=absent"

Ansible имеет модули для управления пакетами на многих платформах. Если для вашего менеджера пакетов нет модуля, вы можете установить пакеты с помощью модуля command или создать модуль для вашего менеджера пакетов.

Управление пользователями и группами

Вы можете создавать, управлять и удалять учетные записи пользователей на управляемых узлах с помощью ad-hoc задач:

$ ansible all -m user -a "name=foo password=<crypted password here>"

$ ansible all -m user -a "name=foo state=absent"

Подробную информацию обо всех доступных параметрах, включая управление группами и членством в группах, см. в документации модуля user.

Управление службами

Убедитесь, что служба запущена на всех веб-серверах:

$ ansible webservers -m service -a "name=httpd state=started"

В качестве альтернативы, перезапустите службу на всех веб-серверах:

$ ansible webservers -m service -a "name=httpd state=restarted"

Убедитесь, что служба остановлена:

$ ansible webservers -m service -a "name=httpd state=stopped"

Сбор фактов

Факты представляют собой обнаруженные переменные о системе. Вы можете использовать факты для реализации условного выполнения задач, а также просто для получения ad-hoc информации о ваших системах. Чтобы увидеть все факты:

$ ansible all -m setup

Вы также можете отфильтровать этот вывод, чтобы отобразить только определенные факты. См. документацию модуля setup для получения подробной информации.

Теперь, когда вы понимаете основные элементы выполнения Ansible, вы готовы научиться автоматизировать повторяющиеся задачи с помощью Ansible Playbooks.

См. также

Настройка Ansible
Все о файле конфигурации Ansible
Все модули
Список доступных модулей
Работа с Playbooks
Использование Ansible для управления конфигурацией и развертывания
Список рассылки
Вопросы? Помощь? Идеи? Обратитесь к списку на Google Groups
irc.freenode.net
#ansible канал IRC-чата

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.9/user_guide/intro_adhoc.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API