ansible.builtin.shell – Выполнение команд оболочки на целевых узлах
Примечание
Этот модуль является частью ansible-base и включён во все установки Ansible. В большинстве случаев вы можете использовать короткое имя модуля shell даже без указания ключевого слова collections:. Несмотря на это, мы рекомендуем использовать FQCN для лёгкой ссылки на документацию по модулю и для избежания конфликтов с другими коллекциями, которые могут иметь то же имя модуля.
Введено в версии 0.2: of ansible.builtin
Описание
- Модуль
shellпринимает имя команды, за которым следует список аргументов, разделённых пробелами. - Требуется либо команда в свободной форме, либо параметр
cmd, см. примеры. - Он почти идентичен модулю ansible.builtin.command, но выполняет команду через оболочку (
/bin/sh) на удалённом узле. - Для целевых узлов Windows используйте модуль ansible.windows.win_shell вместо этого.
Примечание
Этот модуль имеет соответствующий плагин действий.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| chdir путь добавлен в версии 0.6 ansible.builtin | Изменить текущую директорию перед выполнением команды. | |
| cmd строка | Команда для выполнения, за которой могут следовать необязательные аргументы. | |
| creates путь | Имя файла. Если файл уже существует, этот шаг не будет выполнен. | |
| executable путь добавлен в версии 0.9 ansible.builtin | Изменить оболочку для выполнения команды. Ожидается абсолютный путь к исполняемому файлу. | |
| free_form строка | Модуль оболочки принимает команду в свободной форме в виде строки. Нет фактического параметра с названием 'free form'. См. примеры по использованию этого модуля. | |
| removes путь добавлен в версии 0.8 ansible.builtin | Имя файла. Если файл не существует, этот шаг не будет выполнен. | |
| stdin строка добавлен в версии 2.4 ansible.builtin | Установить stdin команды напрямую на указанное значение. | |
| stdin_add_newline булево добавлен в версии 2.8 ansible.builtin |
| Добавлять ли новую строку к данным stdin. |
| warn булево добавлен в версии 1.8 ansible.builtin |
| Включить предупреждения задания. |
Примечания
Примечание
- Если вы хотите выполнить команду безопасно и предсказуемо, лучше использовать модуль ansible.builtin.command вместо этого. Лучшие практики при написании playbooks будут следовать тенденции использования ansible.builtin.command, если модуль ansible.builtin.shell не требуется явно. При выполнении ad-hoc команд используйте своё суждение.
- Режим проверки поддерживается при передаче
createsилиremoves. Если выполняется режим проверки и указаны эти параметры, модуль проверит существование файла и сообщит правильный статус изменения. Если эти параметры не указаны, задача будет пропущена. - Для очистки любых переменных, передаваемых модулю оболочки, необходимо использовать
{{ var | quote }}, а не только{{ var }}, чтобы убедиться, что они не содержат вредоносного кода, такого как точки с запятой. - Альтернативой использованию встроенных скриптов оболочки с этим модулем является использование модуля ansible.builtin.script, возможно, вместе с модулем ansible.builtin.template.
- Для перезагрузки систем используйте модуль ansible.builtin.reboot или ansible.windows.win_reboot.
См. также
См. также
- ansible.builtin.command
-
Официальная документация по модулю ansible.builtin.command.
- ansible.builtin.raw
-
Официальная документация по модулю ansible.builtin.raw.
- ansible.builtin.script
-
Официальная документация по модулю ansible.builtin.script.
- ansible.windows.win_shell
-
Официальная документация по модулю 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
# Disabling warnings
- name: Using curl to connect to a host via SOCKS proxy (unsupported in uri). Ordinarily this would throw a warning
ansible.builtin.shell: curl --socks5 localhost:9000 http://www.ansible.com
args:
warn: no
Возвращаемые значения
Общие возвращаемые значения описаны здесь, следующие поля уникальны для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| cmd строка | всегда | Команда, выполненная задачей. Пример: rabbitmqctl join_cluster rabbit@master |
| delta строка | всегда | Время выполнения команды. Пример: 0:00:00.325771 |
| end строка | всегда | Время окончания выполнения команды. Пример: 2016-02-25 09:18:26.755339 |
| msg булево | всегда | changed Пример: True |
| rc целое число | всегда | Код возврата команды (0 означает успех). |
| start строка | всегда | Время начала выполнения команды. Пример: 2016-02-25 09:18:26.429568 |
| stderr строка | всегда | Стандартная ошибка команды. Пример: ls: cannot access foo: No such file or directory |
| stderr_lines список / элементы=строка | всегда | Стандартная ошибка команды, разбитая на строки. Пример: [{"u'ls cannot access foo": "No such file or directory'"}, "u'ls …'"] |
| stdout строка | всегда | Стандартный вывод команды. Пример: Clustering node rabbit@slave1 with rabbit@master … |
| stdout_lines список / элементы=строка | всегда | Стандартный вывод команды, разбитый на строки. Пример: ["u'Clustering node rabbit@slave1 with rabbit@master …'"] |
Авторы
- Команда Ansible Core
- Michael DeHaan
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/ansible/builtin/shell_module.html