web-dev-qa-db-fra.com

Comment exécuter un script Shell sur un serveur distant avec Ansible?

Je prévois d'exécuter un script Shell sur un serveur distant à l'aide de playbook Ansible.

test.sh:

touch test.txt

Playbook:

---
- name: Transfer and execute a script.
  hosts: server
  user: test_user
  Sudo: yes
  tasks:
     - name: Transfer the script
       copy: src=test.sh dest=/home/test_user mode=0777

     - name: Execute the script
       local_action: command Sudo sh /home/test_user/test.sh

Lorsque j'exécute le livre de lecture, le transfert a bien eu lieu, mais le script n'est pas exécuté.

45
Pattu

local_action exécute la commande sur le serveur local et non sur les serveurs spécifiés dans le paramètre hosts.

Remplacez votre tâche "Exécuter le script" par

- name: Execute the script
  command: sh /home/test_user/test.sh

et il devrait le faire.

Vous n'avez pas besoin de répéter Sudo dans la ligne de commande car vous l'avez déjà défini dans le livre de lecture.

Selon paramètre Ansible Intro to Playbooks , le paramètre user a été renommé en remote_user dans Ansible 1.4, vous devriez donc le changer aussi

remote_user: test_user

Ainsi, le playbook deviendra:

---
- name: Transfer and execute a script.
  hosts: server
  remote_user: test_user
  Sudo: yes
  tasks:
     - name: Transfer the script
       copy: src=test.sh dest=/home/test_user mode=0777

     - name: Execute the script
       command: sh /home/test_user/test.sh
38
Pasi H

vous pouvez utiliser le module script

Exemple

- name: Transfer and execute a script.
  hosts: all
  tasks:

     - name: Copy and Execute the script 
       script: /home/user/userScript.sh
83
Kunwar

Il vaut mieux utiliser le module script pour cela:
http://docs.ansible.com/script_module.html

20
voronin