Hoe voer je een shellscript uit op een externe server met Ansible?

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_actionvoert 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_userin 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 scriptte 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

Other episodes