shell - Выполнение команд в узлах.
Описание
- Модуль
shellпринимает имя команды, за которым следует список аргументов, разделенных пробелами. Он почти идентичен модулю command, но выполняет команду через оболочку (/bin/sh) на удаленном узле. - Для целевых систем Windows используйте модуль win_shell.
Параметры
| параметр | обязательный | по умолчанию | возможные значения | комментарии |
|---|---|---|---|---|
| chdir | нет | Перейти в указанный каталог перед выполнением команды | ||
| creates | нет | имя файла; если файл уже существует, этот шаг не будет выполнен. | ||
| executable | нет | изменить оболочку, используемую для выполнения команды. Должен быть абсолютный путь к исполняемому файлу. | ||
| free_form | да | Модуль оболочки принимает свободную форму команды для выполнения в виде строки. Нет фактического параметра с именем «free form». Смотрите примеры! | ||
| removes | нет | имя файла; если файл не существует, этот шаг не будет выполнен. | ||
| stdin (добавлен в 2.4)
| нет | Установить стандартный ввод команды непосредственно на указанное значение. | ||
| warn (добавлен в 1.8)
| нет | True | если в ansible.cfg включены предупреждения о командах, не выводить предупреждения об этой конкретной строке, если установлено no/false. |
Примеры
- 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 означает успех) | всегда | целое число | 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 ...'"] |
Примечания
Примечание
- Для безопасного и предсказуемого выполнения команд рекомендуется использовать модуль command вместо этого. Лучшие практики при написании playbook будут следовать тенденции использования модуля command, если модуль
shellне требуется явно. При выполнении произвольных команд используйте здравый смысл. - Для очистки любых переменных, передаваемых модулю shell, используйте «{{ var | quote }}» вместо «{{ var }}», чтобы убедиться, что они не содержат вредоносного кода, например, точки с запятой.
- Для целевых систем Windows используйте модуль win_shell вместо этого.
- Вместо использования документов «here» для создания многострочных скриптов в playbooks используйте модуль script.
Статус
Этот модуль помечен как stableinterface, что означает, что разработчики этого модуля гарантируют отсутствие несовместимых изменений интерфейса.
Информация о техническом обслуживании
Для получения дополнительной информации о поддержке этого модуля компанией Red Hat, обратитесь к knowledge base article<https://access.redhat.com/articles/rhel-top-support-policies>
Для получения помощи в разработке модулей, если это необходимо, ознакомьтесь с Информация о сообществе и вклад, Тестирование Ansible и Разработка модулей.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/shell_module.html