So importieren Sie eine .py-Datei in ein Ansible-Modul?
Meine Ansible-Verzeichnis-Struktur sieht ungefähr so aus.
Ansible-Repo
|
+-- playbooks
| |
| +-- run_custom_module1
|
+-- library
| |
| +-- custom_module1
| +-- custom_module2
|
+-- bin
| |
| +-- usefulpythonfunctions.py
Ich möchte in der Lage sein, zu importieren usefulpythonfunctions.py aus dem bin-in meinem Ansible-Modul. Ich habe einen import usefulpythonfunctions.py an der Spitze von meinem Modul, aber ich erhalte die folgende Fehlermeldung, wenn ich das playbook.
\r\nImportError: No module named usefulpythonfunctions\r\n", "msg": "MODULE FAILURE", "parsed": false}
- Kann ich etwas tun, ähnlich aus ... import usefulpythonfunctions ?
- Ist usefulpythonfunctions installiert auf dem Ziel-host(s)? Beachten Sie, dass Ansible kopiert ein Modul, um das Ziel und dann startet das Modul. Also dieser Fehler ist wahrscheinlich Ursprung die Ziel-host und nicht der host, den Sie gerade laufen Ansible auf.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glücklicherweise Version 2.3 eingeführt hat diese Funktion.
Nun können Sie Ihre freigegebenen code in
module_utils
Ordner, in dem das playbook Leben und es wird automatisch exportiert, von ansible. Auch Sie interessiert sein könnten, bei der Prüfung die Verzeichnis-Struktur, DokumentationKönnen Sie auf das Modul zugreifen, in
module_utils
wie würden Sie den Zugriff auf eine standard-utilUPDATE
Jetzt können Sie konfigurieren Sie einen Pfad, wo Ihr Modul utils live mit
ANSIBLE_MODULE_UTILS
env variable. Für mehr details überprüfen Sie bitte Dokumentationmodule_utils
im gleichen Ort wie Ihre playbook-Datei, legen Sie Ihre Modul(E) es, und importieren Sie dann wie beschrieben von @TarasIch habe nach wegen suchen, dies zu tun, und es erscheint nicht möglich ist dies in der aktuellen version von Ansible.
Ehrlich, die pull-Anfrage erwähnt von @slackhacker scheint die sauberste option, aber, wie es aussieht, möglicherweise nicht verfügbar, bis Ansible 2.1...
Bis dann...
Bereitstellung Ihrer Abhängigkeiten mit ansible
Die Bibliothek, die Sie möchten, kopiert werden zu jedem system laufen Sie auf. So, wir haben ansible übernehmen das für uns.
Download von Abhängigkeiten in den Modul-code
Wenn Ihr Modul-code ist zugänglich auf dem server ausgeführt werden (über HTTP, SSH, etc), könnten Sie code-Modul zu gehen und schnappen Sie sich die Abhängigkeiten direkt in python zu tun, anstatt es als eine separate Aufgabe.
Dieser hat die Mehrwert, ohne dass zusätzliche Schritte aus den end-user, aber wird wahrscheinlich langsamer werden, aufgrund der zusätzlichen Kopien mit gemacht werden.
Roll your own-Paket
Könnten Sie auch Rollen Sie Ihre eigenen Paket mit
pip
- und alle sonstigen Verpackungen toolchain. Dies ist wahrscheinlich nicht für das schwache des Herzens.Nach meinem Verständnis ist dies nicht möglich, Ansible, aber es ist ausstehende pull-request, bietet einige Hoffnung.
Versuchen Sie, erstellen Sie einen Ordner namens
usefulpythonfunctions
erstellen Sie eine__init__.py
Ort und die Funktionen, die Sie wollen dort.Darüber hinaus sollten Sie in der Lage sein zu erstellen
bin/foo/bar.py
und verwendenfrom foo import bar
zum aufrufen von Funktionen oder Klassen aus der bar.