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