shell – Выполнение команд оболочки на целевых узлах
Краткое описание
- Модуль
shellпринимает имя команды, за которым следует список аргументов, разделенных пробелами. - Он почти полностью аналогичен модулю command, но выполняет команду через оболочку (
/bin/sh) на удалённом узле. - Для целевых узлов Windows используйте модуль win_shell.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| chdir путь | Перейти в этот каталог перед выполнением команды. | |
| creates путь | Имя файла. Если файл уже существует, этот шаг не будет выполнен. | |
| executable путь | Изменить оболочку, используемую для выполнения команды. Ожидается абсолютный путь к исполняемому файлу. | |
| free_form строка / обязательно | Модуль shell принимает команду в свободном формате в виде строки. В действительности параметра с именем 'free form' нет. См. примеры использования этого модуля. | |
| removes путь | Имя файла. Если файл не существует, этот шаг не будет выполнен. | |
| stdin строка добавлено в 2.4 | Установить стандартный ввод (stdin) команды напрямую на указанное значение. | |
| stdin_add_newline логическое добавлено в 2.8 |
| Добавлять ли новую строку в данные stdin. |
| warn логическое |
| Включить предупреждения о задаче. |
Примечания
Примечание
- Если требуется выполнить команду безопасно и предсказуемо, лучше использовать модуль command. При написании playbooks следует использовать command по умолчанию, если явно не требуется модуль
shell. При выполнении отдельных команд руководствуйтесь здравым смыслом. - Режим проверки поддерживается при передаче
createsилиremoves. Если выполняется режим проверки и указано одно из этих значений, модуль проверит существование файла и сообщит правильный статус изменений. Если эти значения не указаны, задача будет пропущена. - Для очистки любых переменных, передаваемых модулю shell, используйте
{{ var | quote }}, а не просто{{ var }}, чтобы убедиться, что они не содержат вредоносного кода, например, точки с запятой. - Альтернативой использованию встроенных скриптов оболочки с этим модулем является использование модуля script, возможно, вместе с модулем template.
- Для перезагрузки систем используйте модули reboot или win_reboot.
См. также
См. также
- command – Выполнение команд на целевых узлах
- Официальная документация по модулю command.
- raw – Выполнение нечистой команды
- Официальная документация по модулю raw.
- script – Запуск локального скрипта на удалённом узле после его передачи
- Официальная документация по модулю script.
- win_shell – Выполнение команд оболочки на целевых узлах
- Официальная документация по модулю win_shell.
Примеры
- name: Execute the command in remote shell; stdout goes to the specified file on the remote.
shell: somescript.sh >> somelog.txt
- name: Change the working directory to somedir/ before executing the command.
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.
shell: somescript.sh >> somelog.txt
args:
chdir: somedir/
creates: somelog.txt
- 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)
shell: cat < /tmp/*txt
args:
executable: /bin/bash
- name: Run a command using a templated variable (always use quote filter to avoid injection)
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
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.
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 логическое | всегда | изменено Пример: True |
| rc целое число | всегда | Код возврата команды (0 означает успех) |
| start строка | всегда | Время начала выполнения команды Пример: 2016-02-25 09:18:26.429568 |
| stderr строка | всегда | Стандартная ошибка команды Пример: ls: cannot access foo: No such file or directory |
| stdout строка | всегда | Стандартный вывод команды Пример: Clustering node rabbit@slave1 with rabbit@master ... |
| stdout_lines список | всегда | Стандартный вывод команды, разделенный на строки Пример: ["u'Clustering node rabbit@slave1 with rabbit@master ...'"] |
Статус
- Для этого модуля гарантируется отсутствие несовместимых изменений интерфейса в будущем. [stableinterface]
- Этот модуль поддерживается командой Ansible Core. [core]
Поддержка Red Hat
Дополнительную информацию о поддержке этого модуля Red Hat можно найти в этой статье базы знаний Red Hat.
Авторы
- Команда Ansible Core
- Michael DeHaan
Подсказка
Если вы заметите какие-либо проблемы в этой документации, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.8/modules/shell_module.html