Не могу выполнить скрипт sh с параметрами в Ansible - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь запустить сценарий установки, который уже существует на удаленном хосте, с ANSIBLE PlayBook.Также требуются некоторые параметры.

- hosts: myhost
  become: yes
  gather_facts: no
  tasks:
    - name: Running an installation script
      command: sh /home/user/install.sh --param1 'param1' --param2 'param2' --param3 'param3' --param4 'param4'

Но это не работает.Когда я пытаюсь запустить playbook, я получаю такой вывод:

fatal: [myhost]: FAILED! => {"changed": true, "cmd": ["sh", "/home/user/install.sh", "--param1", "param1", "----param1", "--param1", "--param3", "param3", "--param4", "param4"], "delta": "0:00:00.002254", "end": "2019-04-17 11:27:13.063837", "msg": "non-zero return code", "rc": 2, "start": "2019-04-17 11:27:13.061583", "stderr": "/home/user/install.sh: 4: set: Illegal option -o pipefail", "stderr_lines": ["/home/user/install.sh: 4: set: Illegal option -o pipefail"], "stdout": "", "stdout_lines": []}

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

Сценарий завершается с этим сообщением:

"stderr_lines": ["/home/user/install.sh: 4: set: недопустимая опция -o pipefail"]

Попробуйте прочитать команду из строки.См. sh .

command: sh -c "/home/user/install.sh --param1 'param1' ..."

Qouting from man sh

Опция -c заставляет команды считываться из операнда строки вместо стандартноговход.Помните, что этот параметр принимает только одну строку в качестве аргумента, поэтому строки из нескольких слов должны быть заключены в кавычки.

0 голосов
/ 17 апреля 2019

Вы можете использовать модуль оболочки вместо командного модуля для передачи аргументов в вашу команду linux специально для скрипта, в котором у ansible есть модуль скрипта

  • name: запускать скрипт, только если в файле существует файл file.txtскрипт удаленного узла: /some/local/remove_file.sh --some-аргумент 1234 аргументы: удаляет: /the/removed/file.txt

и для команд linux

как: shell: "curl --socks5 localhost: 9000 http://www.ansible.com"

и для получения более подробной информации см.

https://docs.ansible.com/ansible/latest/modules/shell_module.html

0 голосов
/ 17 апреля 2019

Как предполагает документ (https://docs.ansible.com/ansible/latest/modules/command_module.html), вы можете использовать команду, подобную этой:

- name: Running an installation script
      command: /home/user/install.sh --param1 'param1' --param2 'param2' --param3 'param3' --param4 'param4'

Если у вас есть shabang в вашем скрипте, это не должно быть проблемой.

Другим решением было бы использовать скрипт (https://docs.ansible.com/ansible/latest/modules/script_module.html) примерно так:

- name: Running an installation script
  script: /home/user/install.sh --param1 param1 --param2 param2 --param3 param3 --param4 param4

Дай мне услышать, если это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...