Spec-Zone.ru › Ansible 2.5

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API