opsi-cli Cutom Plugin Doku
opsi-cli Cutom Plugin Doku
Hi,
gibt es abseits dem Template Dokumentation, wie man ein eigenes Plugin entwickeln kann? Insbesondere würde mich interessieren, ob und wie man eigene Konfigurationsoptionen definieren kann.
Viele Grüße,
Stefan
gibt es abseits dem Template Dokumentation, wie man ein eigenes Plugin entwickeln kann? Insbesondere würde mich interessieren, ob und wie man eigene Konfigurationsoptionen definieren kann.
Viele Grüße,
Stefan
Re: opsi-cli Cutom Plugin Doku
Der Fall Modul-Name != Python-Paket-Name ist auch noch nicht abgedeckt oder?
Re: opsi-cli Cutom Plugin Doku
Moin,
tatsächlich gibt es sehr bald offizielle Doku zu opsi-cli plugin. Der Text ist schon im review.
An der Ecke der plugin Ids sind wir gerade am basteln. Mit opsi-cli 4.2.0.5 wird die plugin_id immer dem Verzeichnisnamen entsprechen. Damit ist es dann möglich, ein Verzeichnis zu kopieren und von dem gleichen code ausgehend zwei Plugins importieren zu können. Das Feld `id` in der Klassendefinition ist damit obsolete und in zukünftigen templates auch nicht mehr enthalten.
Optionen und Argumente für Kommandos zu definieren geht über die decorator `@click.option` und `@click.argument`. Siehe https://click.palletsprojects.com/en/8.1.x/options/
Persistentes Setzen von Optionen ist im Moment nur auf oberster Ebene möglich. Hier evaluieren wir aktuell verschiedene Möglichkeiten, das auf Kommandos und Sub-Kommandos auszuweiten.
Gruß
Nils
tatsächlich gibt es sehr bald offizielle Doku zu opsi-cli plugin. Der Text ist schon im review.
An der Ecke der plugin Ids sind wir gerade am basteln. Mit opsi-cli 4.2.0.5 wird die plugin_id immer dem Verzeichnisnamen entsprechen. Damit ist es dann möglich, ein Verzeichnis zu kopieren und von dem gleichen code ausgehend zwei Plugins importieren zu können. Das Feld `id` in der Klassendefinition ist damit obsolete und in zukünftigen templates auch nicht mehr enthalten.
Optionen und Argumente für Kommandos zu definieren geht über die decorator `@click.option` und `@click.argument`. Siehe https://click.palletsprojects.com/en/8.1.x/options/
Persistentes Setzen von Optionen ist im Moment nur auf oberster Ebene möglich. Hier evaluieren wir aktuell verschiedene Möglichkeiten, das auf Kommandos und Sub-Kommandos auszuweiten.
Gruß
Nils
Re: opsi-cli Cutom Plugin Doku
Hi Nils,
meine Frage war da leider etwas mißverständlich: Ich würde gerne das Modul "gitlab" verwenden, welches man aber per "pip install python-gitlab" und nicht per "pip install gitlab" installieren kann. Der Automatismus sucht aber nach dem Paket "gitlab".
Viele Grüße,
Stefan
meine Frage war da leider etwas mißverständlich: Ich würde gerne das Modul "gitlab" verwenden, welches man aber per "pip install python-gitlab" und nicht per "pip install gitlab" installieren kann. Der Automatismus sucht aber nach dem Paket "gitlab".
Viele Grüße,
Stefan
Re: opsi-cli Cutom Plugin Doku
Hi,
in diesem Fall muss in das Quellverzeichnis für das plugin eine requirements.txt gelegt werden, in der die Abhängigkeiten festgehalten werden.
z.B.
```
python-gitlab==3.13.0
```
(da müssen dann alle Abhängigkeiten drin stehen!)
Leider schlägt der vollautomatische Prozess hier fehl, weil es das Modul `gitlab` in mehreren python Paketen gibt, die auf dem pypi verfügbar sind.
in diesem Fall muss in das Quellverzeichnis für das plugin eine requirements.txt gelegt werden, in der die Abhängigkeiten festgehalten werden.
z.B.
```
python-gitlab==3.13.0
```
(da müssen dann alle Abhängigkeiten drin stehen!)
Leider schlägt der vollautomatische Prozess hier fehl, weil es das Modul `gitlab` in mehreren python Paketen gibt, die auf dem pypi verfügbar sind.
Re: opsi-cli Cutom Plugin Doku
Danke. Ich bekomme leider dann einen ImportError. Auf welcher Python-Version basiert denn das aktuelle opsi-cli?
Code: Alles auswählen
opsi-cli plugin add gitlab-downloader/
Looking in indexes: https://pypi.org/simple, https://mlmpcadmin:****@gitlab.tf.uni-freiburg.de/api/v4/groups/116/-/packages/pypi/simple
Collecting python-gitlab>=3.13.0
Using cached python_gitlab-3.13.0-py3-none-any.whl (134 kB)
Collecting requests>=2.25.0
Using cached requests-2.28.2-py3-none-any.whl (62 kB)
Collecting requests-toolbelt>=0.10.1
Using cached requests_toolbelt-0.10.1-py2.py3-none-any.whl (54 kB)
Collecting idna<4,>=2.5
Using cached idna-3.4-py3-none-any.whl (61 kB)
Collecting charset-normalizer<4,>=2
Using cached charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB)
Collecting urllib3<1.27,>=1.21.1
Using cached urllib3-1.26.15-py2.py3-none-any.whl (140 kB)
Collecting certifi>=2017.4.17
Using cached certifi-2022.12.7-py3-none-any.whl (155 kB)
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests, requests-toolbelt, python-gitlab
Successfully installed certifi-2022.12.7 charset-normalizer-3.1.0 idna-3.4 python-gitlab-3.13.0 requests-2.28.2 requests-toolbelt-0.10.1 urllib3-1.26.15
Installing libraries from '/tmp/tmpstzr86tr/lib'
ERROR: cannot import name 'appengine' from 'urllib3.contrib' (/tmp/_MEIjR9cGd/urllib3/contrib/__init__.pyc)
Traceback (most recent call last):
File "/home/staeglis/.local/lib/opsi-cli/lib/requests_toolbelt/_compat.py", line 48, in <module>
from requests.packages.urllib3.contrib import appengine as gaecontrib
ImportError: cannot import name 'appengine' from 'urllib3.contrib' (/tmp/_MEIjR9cGd/urllib3/contrib/__init__.pyc)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "opsicli/__main__.py", line 65, in main
File "click/core.py", line 1055, in main
File "click/core.py", line 1657, in invoke
File "click/core.py", line 1657, in invoke
File "click/core.py", line 1404, in invoke
File "click/core.py", line 760, in invoke
File "/tmp/_MEIjR9cGd/plugins/plugin/python/__init__.py", line 62, in add
path = install_plugin(tmpdir_path, plugin_id, system)
File "opsicli/plugin.py", line 221, in install_plugin
File "opsicli/plugin.py", line 127, in extract_plugin_object
File "opsicli/plugin.py", line 113, in get_plugin_module
File "importlib/__init__.py", line 126, in import_module
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/tmp/tmpstzr86tr/gitlab-downloader/python/__init__.py", line 4, in <module>
File "/home/staeglis/.local/lib/opsi-cli/lib/gitlab/__init__.py", line 32, in <module>
from gitlab.client import Gitlab, GitlabList # noqa: F401
File "/home/staeglis/.local/lib/opsi-cli/lib/gitlab/client.py", line 15, in <module>
from gitlab import _backends, utils
File "/home/staeglis/.local/lib/opsi-cli/lib/gitlab/_backends/__init__.py", line 5, in <module>
from .requests_backend import RequestsBackend, RequestsResponse
File "/home/staeglis/.local/lib/opsi-cli/lib/gitlab/_backends/requests_backend.py", line 7, in <module>
from requests_toolbelt.multipart.encoder import MultipartEncoder # type: ignore
File "/home/staeglis/.local/lib/opsi-cli/lib/requests_toolbelt/__init__.py", line 12, in <module>
from .adapters import SSLAdapter, SourceAddressAdapter
File "/home/staeglis/.local/lib/opsi-cli/lib/requests_toolbelt/adapters/__init__.py", line 12, in <module>
from .ssl import SSLAdapter
File "/home/staeglis/.local/lib/opsi-cli/lib/requests_toolbelt/adapters/ssl.py", line 16, in <module>
from .._compat import poolmanager
File "/home/staeglis/.local/lib/opsi-cli/lib/requests_toolbelt/_compat.py", line 50, in <module>
from urllib3.contrib import appengine as gaecontrib
ImportError: cannot import name 'appengine' from 'urllib3.contrib' (/tmp/_MEIjR9cGd/urllib3/contrib/__init__.pyc)
╭─ Error ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ cannot import name 'appengine' from 'urllib3.contrib' (/tmp/_MEIjR9cGd/urllib3/contrib/__init__.pyc) │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Re: opsi-cli Cutom Plugin Doku
opsi-cli für linux basiert im Moment auf python 3.11
Das Problem mit urllib3 ist, dass es in opsi-cli selbst gebraucht, aber nur in abgespeckter Form (ohne das contrib modul) enthalten ist.
Das heißt, es wird nicht heruntergeladen und installiert, weil es ja schon vorhanden ist, aber das vorhandene funktioniert für diesen Anwendungsfall nicht.
Hier handelt es sich um ein konzeptionelles Problem für das wir noch an einer Lösung arbeiten (einfach urllib parallel installieren lassen ist auch nicht gut, weil dann unklar ist, welches Verwendet werden soll - gibt man dem vorhandenen den Vorzug, bleibt das Problem bestehen - gibt man dem neuen den Vorzug, kann man durch Installation von plugin X ein anderes plugin kaput machen)
tldr Im Moment gibt es für das Problem keine Lösung. Das tut mir Leid.
Das Problem mit urllib3 ist, dass es in opsi-cli selbst gebraucht, aber nur in abgespeckter Form (ohne das contrib modul) enthalten ist.
Das heißt, es wird nicht heruntergeladen und installiert, weil es ja schon vorhanden ist, aber das vorhandene funktioniert für diesen Anwendungsfall nicht.
Hier handelt es sich um ein konzeptionelles Problem für das wir noch an einer Lösung arbeiten (einfach urllib parallel installieren lassen ist auch nicht gut, weil dann unklar ist, welches Verwendet werden soll - gibt man dem vorhandenen den Vorzug, bleibt das Problem bestehen - gibt man dem neuen den Vorzug, kann man durch Installation von plugin X ein anderes plugin kaput machen)
tldr Im Moment gibt es für das Problem keine Lösung. Das tut mir Leid.
Re: opsi-cli Cutom Plugin Doku
Verstehe. Und das contrib-Modul mitzuliefern ist keine Option?
Re: opsi-cli Cutom Plugin Doku
opsi-cli 4.2.0.6, was aktuell noch getestet wird, arbeitet so, dass die Dependencies einzelner Plugins voneinander isoliert sind. Damit ist es schonmal nicht mehr möglich, durch installation eines plugins ein anderes zu stören. Das vollständige urllib3-Modul ist jetzt in opsi-cli eingepackt.
Vermutlich geht es im Laufe der Woche nach experimental.
Vermutlich geht es im Laufe der Woche nach experimental.
Re: opsi-cli Cutom Plugin Doku
opsi-cli 4.2.0.6 ist jetzt in experimental (als opsi-Paket und enthalten in opsi-utils 4.2.0.201)