Ik ben van plan een shellscript uit te voeren op een externe server met behulp van Ansible Playbook.
leeg bestand test.sh:
touch test.sh
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
Als ik het draaiboek uitvoer, vindt de overdracht met succes plaats, maar wordt het script niet uitgevoerd.
Antwoord 1, autoriteit 100%
u kunt scriptmodule
Voorbeeld
- name: Transfer and execute a script.
hosts: all
tasks:
- name: Copy and Execute the script
script: /home/user/userScript.sh
Antwoord 2, autoriteit 49%
local_action
voert de opdracht uit op de lokale server, niet op de servers die u opgeeft in de parameter hosts
.
Wijzig uw taak “Het script uitvoeren” in
- name: Execute the script
command: sh /home/test_user/test.sh
en het zou het moeten doen.
Je hoeft sudo niet te herhalen in de opdrachtregel omdat je het al in het playbook hebt gedefinieerd.
Volgens Ansible Intro to Playbooksis de user
-parameter hernoemd naar remote_user
in Ansible 1.4, dus je zou het ook moeten veranderen
remote_user: test_user
Het draaiboek wordt dus:
---
- 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
Antwoord 3, autoriteit 20%
Het is beter om daarvoor de module script
te gebruiken:
http://docs.ansible.com/script_module.html
Antwoord 4, autoriteit 2%
Voor iemand die een ad-hoc commando wil
ansible group_or_hostname -m script -a "/home/user/userScript.sh"
of gebruik relatief pad
ansible group_or_hostname -m script -a "userScript.sh"
Antwoord 5
U kunt de sjabloonmodule gebruiken om een script te kopiëren als er een script op de lokale computer is naar een externe computer en het uit te voeren.
- name: Copy script from local to remote machine
hosts: remote_machine
tasks:
- name: Copy script to remote_machine
template: src=script.sh.2 dest=<remote_machine path>/script.sh mode=755
- name: Execute script on remote_machine
script: sh <remote_machine path>/script.sh