opsi-cli Cutom Plugin Doku

SirTux
Beiträge: 566
Registriert: 05 Feb 2011, 18:37

opsi-cli Cutom Plugin Doku

Beitrag von SirTux »

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
SirTux
Beiträge: 566
Registriert: 05 Feb 2011, 18:37

Re: opsi-cli Cutom Plugin Doku

Beitrag von SirTux »

Der Fall Modul-Name != Python-Paket-Name ist auch noch nicht abgedeckt oder?
Benutzeravatar
n.doerrer
uib-Team
Beiträge: 267
Registriert: 23 Okt 2020, 16:11

Re: opsi-cli Cutom Plugin Doku

Beitrag von n.doerrer »

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
SirTux
Beiträge: 566
Registriert: 05 Feb 2011, 18:37

Re: opsi-cli Cutom Plugin Doku

Beitrag von SirTux »

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
Benutzeravatar
n.doerrer
uib-Team
Beiträge: 267
Registriert: 23 Okt 2020, 16:11

Re: opsi-cli Cutom Plugin Doku

Beitrag von n.doerrer »

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.
SirTux
Beiträge: 566
Registriert: 05 Feb 2011, 18:37

Re: opsi-cli Cutom Plugin Doku

Beitrag von SirTux »

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)                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Benutzeravatar
n.doerrer
uib-Team
Beiträge: 267
Registriert: 23 Okt 2020, 16:11

Re: opsi-cli Cutom Plugin Doku

Beitrag von n.doerrer »

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.
SirTux
Beiträge: 566
Registriert: 05 Feb 2011, 18:37

Re: opsi-cli Cutom Plugin Doku

Beitrag von SirTux »

Verstehe. Und das contrib-Modul mitzuliefern ist keine Option?
Benutzeravatar
n.doerrer
uib-Team
Beiträge: 267
Registriert: 23 Okt 2020, 16:11

Re: opsi-cli Cutom Plugin Doku

Beitrag von n.doerrer »

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.
Benutzeravatar
n.doerrer
uib-Team
Beiträge: 267
Registriert: 23 Okt 2020, 16:11

Re: opsi-cli Cutom Plugin Doku

Beitrag von n.doerrer »

opsi-cli 4.2.0.6 ist jetzt in experimental (als opsi-Paket und enthalten in opsi-utils 4.2.0.201)
Antworten