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é.
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
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
Il vaut mieux utiliser le module script
pour cela:
http://docs.ansible.com/script_module.html