shell - Выполнение команд в узлах.
Описание
- Модуль
shellпринимает имя команды, за которым следует список аргументов, разделенных пробелами. Он почти идентичен модулю command, но выполняет команду через оболочку (/bin/sh) на удалённом узле. - Для целевых систем Windows используйте модуль win_shell.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| chdir | По умолчанию: None | Перейти в этот каталог перед выполнением команды |
| creates | По умолчанию: None | имя файла; если файл уже существует, этот шаг не выполняется. |
| executable | По умолчанию: None | изменить оболочку, используемую для выполнения команды. Должен быть абсолютным путем к исполняемому файлу. |
| free_form обязательно | По умолчанию: None | Модуль shell принимает команду для выполнения в виде строки. Нет фактического параметра "free_form". См. примеры! |
| removes | По умолчанию: None | имя файла; если файл не существует, этот шаг не выполняется. |
| stdin (добавлен в 2.4) | По умолчанию: None | Установить stdin команды напрямую на указанное значение. |
| warn (добавлен в 1.8) | По умолчанию: yes | если предупреждения о командах включены в ansible.cfg, не выводить предупреждение об этой строке, если установлено значение no/false. |
Примечания
Примечание
- Если вы хотите безопасно и предсказуемо выполнить команду, лучше использовать модуль command вместо него. Лучшие практики при написании playbooks будут следовать тенденции использования command, если только модуль
shellне требуется явно. При выполнении ad-hoc команд используйте свой здравый смысл. - Для очистки любых переменных, передаваемых в модуль shell, используйте «{{ var | quote }}» вместо просто «{{ var }}», чтобы убедиться, что они не содержат вредоносного кода, например, точки с запятой.
- Для целевых систем Windows используйте модуль win_shell.
- Вместо использования документов here для создания многострочных скриптов в playbooks, используйте модуль script.
Примеры
- 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
Возвращаемые значения
Общие возвращаемые значения документированы здесь, следующие поля уникальны для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| 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: невозможно получить доступ к foo: нет такого файла или каталога |
| stdout строка | всегда | Стандартный вывод команды Пример: Кластеризация узла rabbit@slave1 с rabbit@master ... |
| stdout_lines список | всегда | Стандартный вывод команды, разделенный на строки Пример: ["u'Кластеризация узла rabbit@slave1 с rabbit@master ...']" |
Статус
Этот модуль помечен как stableinterface, что означает, что разработчики этого модуля гарантируют, что не будут внесены несовместимые изменения в интерфейс.
Поддержка
Дополнительную информацию о поддержке этого модуля 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.5/modules/shell_module.html