Ansible-Playbook zum Hochladen und Ausführen eines Python-Skripts

Ansible-Playbook zum Hochladen und Ausführen eines Python-Skripts

Mein Spielbuch sieht wie folgt aus:

- hosts : mygroup
  user : user
  sudo : yes
  tasks :
  - name : Copy script
    copy : 'src=/home/user/Scripts/logchecker.py dest=/opt/root2/logchecker.py owner=root group=root mode=755'
  - name : Execute script
    command : '/usr/bin/python /opt/root2/logchecker.py'

Der Dateiupload funktioniert, aber die Ausführung schlägt fehl. Obwohl ich das Skript problemlos direkt auf dem Server ausführen kann. Mache ich etwas falsch?

Antwort1

Ich habe ein ähnliches Playbook verwendet, das wie erwartet funktioniert:

# playbook.yml
---
- hosts: ${target}
  sudo: yes

  tasks:
  - name: Copy file
    copy: src=../files/test.py dest=/opt/test.py owner=howardsandford group=admin mode=755

  - name: Execute script
    command: /opt/test.py

Und test.py:

#!/usr/bin/python

# write to a file
f = open('/tmp/test_from_python','w')
f.write('hi there\n')

Ausführen des Playbooks:

ansible-playbook playbook.yml --extra-vars "target=the_host_to_run_script_on"

Zeigt an:

PLAY [the_host_to_run_script_on] ***************************************************************

GATHERING FACTS ***************************************************************
ok: [the_host_to_run_script_on]

TASK: [Copy file] *************************************************************
changed: [the_host_to_run_script_on]

TASK: [Execute script] ********************************************************
changed: [the_host_to_run_script_on]

PLAY RECAP ********************************************************************
the_host_to_run_script_on  : ok=3    changed=2    unreachable=0    failed=0

Und auf dem Remote-Host:

$ cat /tmp/test_from_python
hi there

Mehrere Unterschiede zwischen unserem Setup:

  • Ich habe keine einfachen Anführungszeichen um die Kopier- und Befehlsparameter
  • Der Shebang setzt den Python-Interpreter, anstatt /usr/bin/python in der Befehlszeile anzugeben.
  • Ich habe den Besitzer des Skripts auf meinen eigenen Benutzernamen und meine primäre Gruppe gesetzt, die sich in sudoers befindet, und nicht in root

Hoffentlich kann Ihnen dies einen Hinweis darauf geben, wo die Unterschiede liegen könnten.

Antwort2

Sie müssen nur das folgende Plugin-Skript verwenden

---
- hosts: ${target}
  become: true
  tasks:
  - name: Copy and Execute the script
    script: /opt/test.py

verwandte Informationen