Ansible — это широко используемый инструмент управления конфигурацией, который упрощает управление несколькими серверами. Он оптимизирует такие задачи, как настройка серверов и установка программ, благодаря автоматизации, которая позволяет обрабатывать многочисленные удаленные серверы и последовательно выполнять задачи с центрального узла. Кроме того, Ansible популярен благодаря многочисленным модулям и способности бесперебойно работать через SSH без необходимости установки дополнительного программного обеспечения на целевых серверах.
В этом руководстве мы узнаем, как выполнять команды на удаленных серверах с помощью модуля Ansible Shell. Кроме того, мы также рассмотрим, как выполнять команды Ansible ad-hoc и создавать плейбук для выполнения различных команд оболочки.
Необходимые условия
Для использования модуля Ansible Shell необходимо выполнить следующие условия:
- В этом руководстве мы используем Ubuntu 22.04. Итак, Ansible должен быть установлен и настроен в вашей системе Ubuntu.
- Необходимо настроить удаленный хост, на котором вы будете выполнять команды с помощью модуля оболочки Ansible.
Что такое модуль оболочки Ansible?
Модуль оболочки Ansible позволяет пользователям выполнять команды в оболочке целевых систем. Он позволяет пользователям выполнять сложные команды с использованием трубопроводов и перенаправления на удаленных целях, сохраняя оригинальность выполнения команды.
При выполнении команд в модуле оболочки Ansible он берет имя команды, параметры или аргументы, разделенные разделителями пробелов, и выполняет эти команды на удаленных хостах.
Отличие: модуль оболочки Ansible и модуль команд
Модуль оболочки Ansible и модуль команд достаточно похожи и дают одинаковые результаты. Однако между этими двумя модулями существует несколько отличий, которые мы перечислили ниже:
- Модуль оболочки Ansible поддерживает все специальные операторы, переменные среды, конвейеры и перенаправления. В то же время модули команд не поддерживают операторы (<, >, &,;, | |), переменные среды и конвейеры.
- Модуль команд не позволяет пользователям выполнять команды непосредственно в оболочке. В этом случае модуль оболочки Ansible предлагает большую гибкость, чем модуль команд. С помощью модуля оболочки вы можете напрямую выполнять команды в оболочке целевых хостов. По умолчанию для выполнения команд используется оболочка «/bin/sh». Вы также можете настроить другие оболочки для выполнения команд на удаленных хостах.
- Пользователи Ansible предпочитают модули команд с точки зрения безопасности при выполнении команд на целевых системах. Команды Ansible-run в модуле команд более безопасны и предлагают более предсказуемые опции, чем модуль оболочки Ansible. Кроме того, модуль команд не влияет на удаленную среду оболочки пользователя.
Начало работы с командами оболочки Ansible: выполнение команд Ad-hoc
Команды Ad-hoc — это однострочные команды, которые нельзя повторно использовать в будущем. Однако вы можете использовать команды оболочки Ansible ad-hoc для быстрого выполнения отдельных задач. Основной синтаксис команд Ad-hoc приведен ниже:
<pre><code>
ansible [pattern] -m [ansible-module] -a {commands with options}
</code></pre>
В приведенном выше синтаксисе шаблон обозначает группу хостов, к которой принадлежит целевой хост. Параметр ‘-m’ определяет тип модуля, а параметр ‘-a’ принимает аргументы команды.
Рассмотрим пример, чтобы объяснить синтаксис команды Ansible Ad-hoc. В этом примере мы попробуем отобразить дату и время целевого хоста. Здесь мы подключились только к одному хосту и создали отдельного пользователя «ansible». Используйте следующую команду, чтобы отобразить дату и время удаленного хоста:
$ ansible 192.168.1.14 -u ansible -m shell -a «timedatectl»
Вышеуказанная команда Ansible ad-hoc подключится к удаленному хосту по IP-адресу «192.168.1.14» с использованием имени пользователя «ansible» через SSH. После этого на удаленном хосте будет выполнена команда «timedatectl», которая используется для отображения информации о настройках даты и времени системы.
$ ansible <ip-address> -u ansible -m shell -a «timedatectl | grep Time»
С помощью вышеуказанной команды Ansible ad-hoc будет выполнена команда «timedatectl», а затем с помощью команды grep будут отфильтрованы и отображены строки, содержащие «Time».
Аналогично, вы можете отобразить информацию о системе с помощью команды «uptime» и средней нагрузки. Для этого используйте следующую команду:
$ ansible <ip-address> -u ansible -m shell -a «uptime»
При выполнении вышеуказанной команды оболочки Ansible, после подключения к удаленному хосту будет выполнена команда uptime.
$ ansible <ip-адрес> -u ansible -m shell -a setup
Вышеуказанная команда служит для сбора системных данных и информации об удаленном хосте с помощью Ansible.
Как использовать модуль оболочки Ansible?
Перед запуском команд оболочки Ansible необходимо знать основные параметры оболочки, которые нужно передать при использовании модуля оболочки Ansible:
chdir — изменяет текущий каталог перед выполнением команды.
cmd — строка, содержащая команду для выполнения, а также все связанные аргументы.
executable — требует абсолютного пути для изменения оболочки, которую использует пользователь.
removes — берет имя файла и используется для исключения шагов, когда файл не существует.
stdin — позволяет пользователю установить «stdin» команды на определенное значение.
warn — принимает (по умолчанию) yes или no, включая или отключая предупреждения о задачах.
Теперь, когда это выяснено, перейдем к примерам использования оболочки Ansible.
Выполнение команд Ansible с помощью модуля оболочки
Настоящая сила Ansible заключается в использовании плейбуков, которые позволяют выполнять сложные задачи на целевых хостах. Помимо использования специальных команд, вы также можете использовать модуль оболочки Ansible в плейбуках для определения задач для удаленных хостов.
Выполнение одной команды с помощью модуля оболочки Ansible
Вы также можете выполнить одну команду с помощью модуля оболочки Ansible. Для этого создайте плейбук и вставьте в этот файл следующие строки кода:
<pre><code>
- name: Shell module example
hosts: database_servers
tasks:
- name: Check system information
shell:
«df -h»
register: «os_info»
- debug:
msg: «{{“os_info”.stdout_lines}}»
</code></pre>
Теперь сохраните изменения в этом файле и закройте его с помощью «Ctrl+X». Затем запустите этот плейбук с помощью следующей команды:
$ ansible-playbook --ask-become-pass -i hosts environment_var.yml
После выполнения вышеуказанной команды в окне терминала вы увидите следующую информацию:
Ansible: выполнение нескольких команд с помощью модуля Shell
С помощью Ansible можно последовательно выполнять несколько задач. Чтобы создать плейбук Ansible, создайте пустой файл в редакторе исходного кода. В этом руководстве для создания плейбука мы используем редактор nano.
$ sudo nano testplaybook.yml
Вышеупомянутый плейбук Ansible выполняет различные задачи, такие как создание пользователя, обновление кэша пакетов и установка или обновление пакета Nginx на указанном удаленном хосте-цели. Он использует переменные, чтобы сделать плейбук более гибким и пригодным для повторного использования.
Сохраните вышеуказанный файл с помощью «Ctrl+O» и выйдите из этого файла с помощью «Ctrl+x».
Здесь мы используем собственный файл инвентаризации «hosts». Чтобы запустить этот плейбук, воспользуйтесь следующей командой:
$ ansible-playbook --ask-become-pass -i hosts testplaybook.yml
В приведенной выше команде «--ask-become-pass» попросит вас ввести пароль root, а затем отобразит на экране такой результат:
Установить пакет с помощью модуля Ansible Shell
Вы также можете установить пакет на целевом удаленном хосте. Рассмотрим следующий плейбук для установки пакетов «apache2» на целевом хосте с помощью Ansible:
hosts: database_servers
become: yes
tasks:
name:
apt:
update_cache: yes
name: install apache2 package
apt:
name: apache2
После запуска вышеуказанного плейбука вы заметите, что apache2 установлен на удаленных серверах.
Предотвращение ввода команд оболочки
Как мы уже обсуждали ранее, модуль command в Ansible считается более безопасным выбором для выполнения команд на удаленных системах. Однако он имеет определенные ограничения в плане функциональности.
Чтобы безопасно использовать модуль оболочки, можно применить технику, которая называется «фильтрация кавычек», чтобы предотвратить потенциальный ввод переменных имен в команды. Приведенный ниже пример демонстрирует это на примере процесса ввода команд, чтобы обеспечить безопасность команд оболочки.
<pre><code>
- name: reate a table in the { database name } database
`shell`: `mysql -u root -psecret -e «CREATE TABLE { quote| table name | quote } (id INT, name VARCHAR(255));"`
become: yes
- name: Ansible Quote Filter Example
hosts: database servers
vars:
- database name: mydb
- table name: my table
</code></pre>
Вышеупомянутый плейбук Ansible создает таблицу MySQL с уникальным именем в указанной базе данных, используя фильтр цитирования для защиты от потенциальных проблем со специальными символами в имени таблицы.
Вывод
Модуль оболочки Ansible — это гибкий и надежный инструмент, который улучшает контроль пользователя и упрощает конфигурацию удаленных серверов. В этой статье мы рассмотрели, как использовать модуль оболочки Ansible, его параметры и необходимые аргументы. Надеемся, что эти знания помогут вам эффективно использовать модуль оболочки Ansible в вашей системе Linux.
Blog