Ich plane, ein Shell-Skript auf einem Remote-Server mit Ansible-Playbook auszuführen.
test.sh:
touch test.txt
Spielbuch:
---
- 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
Wenn ich das Playbook starte, wird die Übertragung erfolgreich durchgeführt, das Skript jedoch nicht ausgeführt.
local_action
Führt den Befehl auf dem lokalen Server aus, nicht auf den Servern, die Sie im Parameter hosts
angegeben haben.
Ändern Sie die Aufgabe "Skript ausführen" in
- name: Execute the script
command: sh /home/test_user/test.sh
und es sollte es tun.
Sie müssen Sudo nicht in der Befehlszeile wiederholen, da Sie es bereits im Playbook definiert haben.
Laut Ansible Intro to Playbooks wurde der Parameter user
in Ansible 1.4 in remote_user
Umbenannt, daher sollten Sie ihn auch ändern
remote_user: test_user
So wird das Spielbuch:
---
- 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
sie können das Modul script verwenden
Beispiel
- name: Transfer and execute a script.
hosts: all
tasks:
- name: Copy and Execute the script
script: /home/user/userScript.sh
Es ist besser, dafür das script
Modul zu verwenden:
http://docs.ansible.com/script_module.html