Специальные (Ad-Hoc) команды Ansible

AnsibleAnsibleBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible(("Ansible")) -.-> ansible/InventoryManagementGroup(["Inventory Management"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) ansible/ModuleOperationsGroup -.-> ansible/command("Execute Commands") ansible/ModuleOperationsGroup -.-> ansible/copy("Transfer Files") ansible/ModuleOperationsGroup -.-> ansible/file("Manage Files/Directories") ansible/ModuleOperationsGroup -.-> ansible/ping("Network Test") ansible/InventoryManagementGroup -.-> ansible/groups_inventory("Define Inventory Groups") linux/SystemInformationandMonitoringGroup -.-> linux/df("Disk Space Reporting") subgraph Lab Skills ansible/command -.-> lab-390441{{"Специальные (Ad-Hoc) команды Ansible"}} ansible/copy -.-> lab-390441{{"Специальные (Ad-Hoc) команды Ansible"}} ansible/file -.-> lab-390441{{"Специальные (Ad-Hoc) команды Ansible"}} ansible/ping -.-> lab-390441{{"Специальные (Ad-Hoc) команды Ansible"}} ansible/groups_inventory -.-> lab-390441{{"Специальные (Ad-Hoc) команды Ansible"}} linux/df -.-> lab-390441{{"Специальные (Ad-Hoc) команды Ansible"}} end

Понимание структуры специальных (ad-hoc) команд Ansible

Начнем с понимания базовой структуры специальной (ad-hoc) команды Ansible. Общий синтаксис выглядит следующим образом:

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

Где:

  • [pattern] - это хост или группа хостов из вашего инвентаря, на которых вы хотите выполнить команду.
  • -m [module] - указывает, какой модуль Ansible использовать.
  • -a "[module options]" - передает аргументы модулю.

Перед тем, как начать выполнять команды, убедимся, что у нас есть правильный файл инвентаря. Создайте или отредактируйте файл инвентаря:

nano /home/labex/project/inventory

Добавьте следующее содержимое:

localhost ansible_connection=local

[webservers]
localhost

[dbservers]
localhost

Сохраните изменения и выйдите из редактора.

Теперь попробуем простую специальную команду для проверки связи со всеми хостами в нашем инвентаре:

ansible all -i /home/labex/project/inventory -m ping

Вы должны увидеть вывод, похожий на следующий:

localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Эта команда использует модуль ping для проверки связи со всеми хостами в инвентаре. Ключевое слово all указывает на все хосты.

Разберем эту команду на составляющие:

  • all - это шаблон (pattern), который включает все хосты в инвентаре.
  • -i /home/labex/project/inventory - указывает файл инвентаря, который нужно использовать.
  • -m ping - сообщает Ansible использовать модуль ping.

Выполнение команд с использованием модуля command

Один из наиболее часто используемых модулей в специальных (ad-hoc) командах - это модуль command. Он позволяет выполнять произвольные команды на целевых хостах.

Давайте используем модуль command для проверки свободного места на диске на всех хостах:

ansible all -i /home/labex/project/inventory -m command -a "df -h"

Вы должны увидеть вывод, показывающий использование дискового пространства на вашем локальном компьютере.

Теперь попробуем выполнить команду только на группе веб-серверов (webservers):

ansible webservers -i /home/labex/project/inventory -m command -a "uptime"

Эта команда покажет время непрерывной работы (uptime) всех хостов в группе веб-серверов.

Модуль command является модулем по умолчанию, поэтому вы можете опустить -m command, если используете этот модуль. Например:

ansible dbservers -i /home/labex/project/inventory -a "free -m"

Эта команда покажет использование памяти на всех хостах в группе базовых серверов (dbservers).

Помните, что модуль command не поддерживает переменные оболочки или операции, такие как |, >, <, &. Для этого вам нужно будет использовать модуль shell.

Использование других полезных модулей в специальных (ad-hoc) командах

Хотя модуль command обладает широкими возможностями, Ansible предоставляет множество других модулей, которые могут быть очень полезными в специальных (ad-hoc) командах. Давайте рассмотрим несколько из них.

  1. Модуль copy:
    Этот модуль используется для копирования файлов с локального компьютера на удаленные хосты. Создадим простой файл и скопируем его на все хосты:

    echo "Hello from Ansible" > /home/labex/project/hello.txt
    ansible all -i /home/labex/project/inventory -m copy -a "src=/home/labex/project/hello.txt dest=/tmp/hello.txt"

    Эта команда копирует файл hello.txt с локального компьютера в каталог /tmp на всех удаленных хостах.

  2. Модуль file:
    Этот модуль используется для управления файлами и каталогами. Создадим каталог на всех веб-серверах (webservers):

    ansible webservers -i /home/labex/project/inventory -m file -a "path=/tmp/test_dir state=directory mode=0755"

    Эта команда создает каталог с именем test_dir в каталоге /tmp на всех веб-серверах с правами доступа, установленными на 0755.

  3. Модуль setup:
    Этот модуль используется для сбора информации (фактов) о удаленных хостах. Он автоматически запускается в начале сценариев (playbooks), но также может быть использован в специальных (ad-hoc) командах:

    ansible dbservers -i /home/labex/project/inventory -m setup

    Эта команда отобразит большое количество информации о хостах в группе базовых серверов (dbservers). Чтобы ограничить вывод, вы можете использовать фильтры:

    ansible dbservers -i /home/labex/project/inventory -m setup -a "filter=ansible_distribution*"

    Это покажет только факты, связанные с дистрибутивом операционной системы.

Эти примеры демонстрируют, как различные модули могут быть использованы для быстрого выполнения различных задач с помощью специальных (ad-hoc) команд.

Резюме

В этом лабораторном занятии вы узнали о специальных (ad-hoc) командах Ansible и о том, как эффективно их использовать. Вот основные выводы:

  1. Специальные (ad-hoc) команды - это быстрые одноразовые задачи, которые можно выполнять без создания полноценного сценария (playbook).

  2. Базовая структура специальной (ad-hoc) команды выглядит так:

    ansible [pattern] -m [module] -a "[module options]"
  3. Модуль ping полезен для проверки связи с хостами.

  4. Модуль command позволяет выполнять произвольные команды на целевых хостах. Это модуль по умолчанию, поэтому -m command можно опустить.

  5. Другие полезные модули для специальных (ad-hoc) команд включают:

    • copy: для копирования файлов на удаленные хосты
    • file: для управления файлами и каталогами
    • setup: для сбора информации (фактов) о удаленных хостах
  6. Вы можете целенаправленно выбирать определенные группы хостов, используя имена групп, определенные в файле инвентаря.

  7. Специальные (ad-hoc) команды отлично подходят для быстрых задач, но для более сложных или повторяемых операций лучше использовать сценарии (playbooks).

Специальные (ad-hoc) команды - это мощный инструмент Ansible, который позволяет выполнять быстрые задачи в рамках всей инфраструктуры. Они особенно полезны для устранения неполадок, сбора информации или внесения быстрых изменений. Однако для более сложных или повторяемых задач лучше использовать сценарии (playbooks).

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