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

8

Mein Spielbuch ist wie folgt:

- 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 Datei-Upload funktioniert, die Ausführung schlägt jedoch fehl. Obwohl ich das Skript ohne Probleme direkt auf dem Server ausführen kann. Mache ich etwas falsch

Nitine
quelle
Können Sie Ihre Frage so bearbeiten, dass sie den vollständigen Befehlslauf und dessen Ausgabe enthält?
EEAA
Sie können ein benutzerdefiniertes Modul ziemlich einfach erstellen.
Skylar Saveland
Ich vermute, dass dies das mode=755Problem war, da der Wert als dezimal und nicht oktal interpretiert wird. Die Verwendung mode="0755"würde wahrscheinlich funktionieren. Die Dokumentation zum Dateimodul behandelt dies, sollte jedoch eine Warnung mit hervorgehobenem Text enthalten.
RichVel

Antworten:

6

Ich habe ein ähnliches Spielbuch 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 Playboooks:

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 legt den Python-Interpreter fest, anstatt / usr / bin / python über die Befehlszeile anzugeben
  • Ich habe den Eigentümer des Skripts auf meinen eigenen Benutzernamen und meine primäre Gruppe festgelegt, die sich in sudoers und nicht in root befindet

Hoffentlich kann dies Sie in die richtige Richtung weisen, wo die Unterschiede liegen könnten.

Howard Sandford
quelle
In ansible 1.9.4 - hosts: $ {target} funktioniert nicht im Playbook, ich muss es ändern mit - hosts: '{{target}}'. Es ist in der Dokumentation erwähnt. docs.ansible.com/ansible/playbooks_variables.html
Adeel Ahmad
1

Sie benötigen nur das unten stehende Plugin-Skript, um es zu verwenden

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