Модуль ansible.builtin.shell – Выполнение команд оболочки на целевых узлах
Примечание
Этот модуль является частью ansible-core и включён во все установки Ansible. В большинстве случаев вы можете использовать короткое имя модуля shell даже без указания ключевого слова collections. Однако рекомендуется использовать полное имя коллекции (FQCN) ansible.builtin.shell для удобной ссылки на документацию по модулю и для предотвращения конфликтов с другими коллекциями, которые могут иметь то же имя модуля.
Описание
- Модуль ansible.builtin.shell принимает имя команды, за которым следует список аргументов, разделённых пробелами.
- Требуется либо команда в свободном формате, либо параметр
cmd, см. примеры. - Он почти идентичен модулю ansible.builtin.command, но выполняет команду через оболочку (
/bin/sh) на удалённом узле. - Для целевых узлов Windows используйте модуль ansible.windows.win_shell.
Примечание
У этого модуля есть соответствующий плагин действия.
Параметры
Параметр | Комментарии |
|---|---|
chdir path | Перейти в этот каталог перед выполнением команды. |
cmd строка | Команда для выполнения, за которой следуют необязательные аргументы. |
creates путь | Имя файла; если оно уже существует, этот шаг не будет выполнен. |
executable путь | Изменить оболочку, используемую для выполнения команды. Ожидается абсолютный путь к исполняемому файлу. |
free_form строка | Модуль оболочки принимает команду в свободном формате, как строку. Нет параметра с именем «свободная форма». См. примеры использования этого модуля. |
removes путь | Имя файла; если оно не существует, этот шаг не будет выполнен. |
stdin строка | Установить stdin команды напрямую на указанное значение. |
stdin_add_newline логическое добавлен в Ansible 2.8 | Добавлять ли перевод строки к данным stdin. Варианты:
|
Атрибуты
Атрибут | Поддержка | Описание |
|---|---|---|
check_mode | Может работать в режиме check_mode и возвращать прогноз о статусе изменения без изменения целевого узла, если не поддерживается, действие будет пропущено. | |
diff_mode | Поддержка: нет | Возвращает детали о том, что изменилось (или, возможно, необходимо изменить в режиме check_mode), при включённом режиме diff |
platform | Платформа: posix | Целевые ОС/семьи, по которым можно выполнять операции. |
raw | Поддержка: полная | Указывает, принимает ли действие строку «raw» или «free form» в качестве параметра и имеет ли оно собственное специальное парсирование. |
Примечания
Примечание
- Если вы хотите безопасно и предсказуемо выполнить команду, лучше использовать модуль ansible.builtin.command вместо этого. Лучшие практики при написании playbooks будут следовать тенденции использования ansible.builtin.command, если модуль ansible.builtin.shell явно не требуется. При выполнении ad-hoc команд используйте своё суждение.
- Для очистки любых переменных, передаваемых в модуль оболочки, следует использовать
{{ var | quote }}вместо простого{{ var }}, чтобы убедиться, что они не содержат вредоносных элементов, таких как точки с запятой. - Альтернативой использованию встроенных скриптов оболочки с этим модулем является использование модуля ansible.builtin.script, возможно совместно с модулем ansible.builtin.template.
- Для перезагрузки систем используйте модули ansible.builtin.reboot или ansible.windows.win_reboot.
- Если команда возвращает данные, не соответствующие кодировке UTF-8, их необходимо закодировать, чтобы избежать проблем. Одним из вариантов является передача вывода через
base64.
См. также
См. также
- ansible.builtin.command
-
Выполнение команд на целевых узлах.
- ansible.builtin.raw
-
Выполняет низкоуровневую и грязную команду.
- ansible.builtin.script
-
Запускает локальный скрипт на удаленном узле после его переноса.
- ansible.windows.win_shell
-
Выполнение команд оболочки на целевых хостах.
Примеры
- name: Execute the command in remote shell; stdout goes to the specified file on the remote
ansible.builtin.shell: somescript.sh >> somelog.txt
- name: Change the working directory to somedir/ before executing the command
ansible.builtin.shell: somescript.sh >> somelog.txt
args:
chdir: somedir/
# You can also use the 'args' form to provide the options.
- name: This command will change the working directory to somedir/ and will only run when somedir/somelog.txt doesn't exist
ansible.builtin.shell: somescript.sh >> somelog.txt
args:
chdir: somedir/
creates: somelog.txt
# You can also use the 'cmd' parameter instead of free form format.
- name: This command will change the working directory to somedir/
ansible.builtin.shell:
cmd: ls -l | grep log
chdir: somedir/
- name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
ansible.builtin.shell: cat < /tmp/*txt
args:
executable: /bin/bash
- name: Run a command using a templated variable (always use quote filter to avoid injection)
ansible.builtin.shell: cat {{ myfile|quote }}
# You can use shell to run other executables to perform actions inline
- 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
Значения возврата
Общие значения возврата описаны здесь, следующие поля уникальны для данного модуля:
Ключ | Описание |
|---|---|
cmd строка | Команда, выполненная задачей. Возвращается: всегда Пример: |
delta строка | Время выполнения команды. Возвращается: всегда Пример: |
end строка | Время окончания выполнения команды. Возвращается: всегда Пример: |
msg логический тип | изменилось Возвращается: всегда Пример: |
rc целое число | Код возврата команды (0 означает успех). Возвращается: всегда Пример: |
start строка | Время начала выполнения команды. Возвращается: всегда Пример: |
stderr строка | Стандартная ошибка команды. Возвращается: всегда Пример: |
stderr_lines список / элементы=строка | Стандартная ошибка команды, разделенная на строки. Возвращается: всегда Пример: |
stdout строка | Стандартный вывод команды. Возвращается: всегда Пример: |
stdout_lines список / элементы=строка | Стандартный вывод команды, разделенный на строки. Возвращается: всегда Пример: |
Ссылки на коллекцию
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/shell_module.html