shell#
Модуль ansible.builtin.shell позволяет выполнить на удаленном узле команду через оболочку (/bin/sh).
Особенности работы#
Особенности использования модуля ansible.builtin.shell:
Выполняемая команда может быть задана в свободной форме (free form), например:
--- - name: Write log ansible.builtin.shell: /opt/check.sh >> /var/log/checking.log
В этом случае параметры модуля следует указывать в блоке
args, как показано в примерах использования.Модуль
ansible.builtin.shellпочти идентичен модулю ansible.builtin.command, но запускает команду через оболочку.Если можно обойтись без использования модуля
ansible.builtin.shell, используйте модуль ansible.builtin.command, так как он безопаснее и более предсказуем.Значения переменных экранируйте с помощью фильтра
quote, чтобы предотвратить интерпретацию специальных символов оболочки (например, точки с запятой), тем самым не допустим выполнения нежелательных или вредоносных команд.Если команда возвращает данные, отличные от UTF-8, их необходимо закодировать, чтобы избежать проблем с обработкой. Один из вариантов – закодировать вывод в формат
base64.Для перезагрузки систем используйте модули ansible.builtin.reboot или
ansible.windows.win_reboot.Для выполнения команд на узлах под управлением ОС Windows используйте модуль
ansible.windows.win_shell.
Параметры#
Модуль принимает следующие параметры:
- chdir#
Путь к каталогу, в который необходимо перейти перед выполнением команды.
- cmd#
Команда для выполнения. Допускается использование опциональных аргументов, например:
ls -l | grep log
- creates#
Путь к файлу. Если указанный файл существует, команда не будет выполнена.
- executable#
Абсолютный путь к исполняемому файлу оболочки, используемой для выполнения команды.
- removes#
Путь к файлу. Если указанный файл не существует, команда не будет выполнена.
- stdin#
Строка для передачи значения в стандартный ввод (stdin).
- stdin_add_newline#
Добавление новой строки к данным, поступающим из стандартного ввода (stdin).
Возможные значения:
false– не добавлять новую строку;true– добавлять новую строку.
Значение по умолчанию:
true.
Возвращаемые значения#
В этом списке указаны только возвращаемые значения, специфичные для модуля ansible.builtin.shell.
cmd– команда, выполняемая в рамках отдельной задачи.Условия: всегда.
delta– длительность выполнения команды.Условия: всегда.
end– время окончания выполнения команды.Условия: всегда.
msg– наличие изменений.Условия: всегда.
rc– код возврата команды.0означает успех.Условия: всегда.
start– время начала выполнения команды.Условия: всегда.
stderr– содержимое стандартного потока ошибок команды.Условия: всегда.
stderr_lines– содержимое стандартного потока ошибок команды, разделенное на строки.Условия: всегда.
stdout– содержимое стандартного вывода команды.Условия: всегда.
stdout_lines– содержимое стандартного вывода команды, разделенное на строки.Условия: всегда.
Атрибуты#
Атрибуты определяют функции Ansible, которые может использовать модуль.
Атрибут |
Описание |
|---|---|
|
Модуль частично поддерживает режим проверки.
Для проверки наличия изменений используются параметры |
|
Модуль не поддерживает режим сравнения. |
|
Модуль поддерживает только POSIX-совместимые ОС. |
|
Модуль поддерживает передачу команды в свободном формате (без указания параметров модуля). |
Примеры#
Для изучения возможностей модуля ознакомьтесь с приведенными ниже примерами.
Вывод результатов в файл на удаленном узле#
Следующий пример демонстрирует выполнение команды, передаваемой в свободной форме (free form), с выводом результатов в файл на удаленном узле:
---
# ...
tasks:
- name: Execute the command in remote shell; stdout goes to the specified file on the remote
ansible.builtin.shell: somescript.sh >> /var/log/somelog.txt
Выполнение команды со сменой каталога#
Следующий пример демонстрирует выполнение команды в каталоге /opt/scripts:
---
# ...
tasks:
- name: Change the working directory to /opt/scripts before executing the command
ansible.builtin.shell: ./somescript.sh >> somelog.txt
args:
chdir: /opt/scripts
Запуск команды при отсутствии файла#
Следующий пример демонстрирует пропуск задачи в случае существования указанного файла:
---
# ...
tasks:
- name: This command will change the working directory to /opt/scripts and will only run when /opt/scripts/somelog.txt doesn't exist
ansible.builtin.shell: ./somescript.sh >> somelog.txt
args:
chdir: /opt/scripts
creates: somelog.txt
Выполнение команды через cmd#
Следующий пример демонстрирует выполнение команды с передачей строки через параметр cmd:
---
# ...
tasks:
- name: Viewing log files in a directory
ansible.builtin.shell:
cmd: ls -lh | grep log
chdir: /var/log
Использование переменной#
Следующий пример демонстрирует вывод содержимого файла, путь к которому хранится в переменной myfile:
---
# ...
tasks:
- name: Secure output of file contents
ansible.builtin.shell: cat {{ myfile | quote }}
Использование с утилитой expect#
Следующий пример демонстрирует использование утилиты expect для автоматизации подключения к удаленному интерфейсу управления сервером (CIMC) и ожидания загрузки по сети PXE:
---
# ...
tasks:
- name: Run expect to wait for a successful PXE boot via out-of-band CIMC
ansible.builtin.shell: |
set timeout 300
spawn "ssh admin@{{ cimc_host }}"
expect "password:"
send "{{ cimc_password }}\n"
expect "\n{{ cimc_name }}"
send "connect host\n"
expect "pxeboot.n12"
send "\n"
exit 0
args:
executable: /usr/bin/expect
delegate_to: localhost