Comment exécuter un script shell sur un serveur distant en utilisant Ansible?

Je prévois d'exécuter un script shell sur un serveur distant en utilisant Ansible playbook.

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 playbook, le transfert se produit avec succès mais le script n'est pas exécuté.

30
demandé sur Nick Volynkin 2014-01-16 15:40:45

3 réponses

local_action exécute la commande sur le serveur local, non pas sur les serveurs que vous spécifiez dans hosts paramètre.

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 playbook.

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

remote_user: test_user

Donc, le playbook va devenir:

---
- 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
22
répondu Pasi H 2014-01-18 04:14:55

Vous pouvez utiliser script module

Exemple

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

     - name: Copy and Execute the script 
       script: /home/user/userScript.sh
56
répondu Kunwar 2016-06-27 07:04:41

, Il est préférable d'utiliser script module:
http://docs.ansible.com/script_module.html

17
répondu voronin 2015-02-04 08:51:18