1
votes

Impossible d'exécuter le script sh avec des paramètres dans Ansible

J'essaye de démarrer un script d'installation qui existe déjà sur l'hôte distant avec un playbook ansible. Il y a aussi quelques paramètres requis.

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": []}

Mais ça ne marche pas. Lorsque j'essaye de démarrer le playbook, j'obtiens ce résultat:

- 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'


3 commentaires

Est l'interprète sh ou bash. Le script fonctionne-t-il également de la même manière manuellement?


avez-vous essayé d'utiliser le module shell?


L'interpréteur est sh et oui, ce script avec des paramètres fonctionne si je le démarre manuellement sur le nœud. Le module shell était une option mais j'ai trouvé une réponse sur l'utilisation de "command: sh" comme meilleure solution pour exécuter un script qui existe déjà sur le nœud. Cependant, l'option "-c" m'a aidé.


3 Réponses :


2
votes

Le script échoue avec ce message:

"stderr_lines": ["/home/user/install.sh: 4: set: Option illégale -o pipefail"]

Essayez de lire la commande à partir d'une chaîne. Voir sh .

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


0 commentaires

0
votes

Comme le suggère le document ( https://docs.ansible.com/ ansible / latest / modules / command_module.html ), vous pouvez utiliser une commande comme celle-ci:

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

Si vous avez le shabang dans votre script, cela devrait pas de problème.

Une autre solution serait d'utiliser un script ( https://docs.ansible.com/ansible/latest/modules/script_module.html ) comme ceci:

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

Laissez-moi entendre si cela aide


0 commentaires

0
votes

Vous pouvez utiliser le module shell au lieu du module de commande pour passer les arguments à votre commande linux spécifiquement pour le script ansible a un module de script

  • nom: exécuter un script uniquement si file.txt existe sur le nœud distant script: /some/local/remove_file.sh --some-argument 1234 args: supprime: /the/removed/file.txt

et pour les commandes Linux

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

et pour plus de détails, consultez

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


0 commentaires