opsi-cli: Das neue Kommandozeilen-Interface für opsi

opsi-cli: Das neue Kommandozeilen-Interface für opsi

Auf der opsiconf 2022 haben wir ein neues Kommandozeilentool für die Arbeit in opsi-Umgebungen angekündigt. Wir haben auch eine kurze Vorschau auf das neue Werkzeug gegeben. opsi-cli ist ab sofort als Teil von opsi-utils >= 4.2.0.187 und als opsi-Paket in unseren öffentlichen Repositorys verfügbar. Sie können das äußerst flexible Werkzeug verwenden, um auf die Backend-Funktionen eines opsi-Config-Servers über RPC zuzugreifen.

Dieser Blogbeitrag gibt eine kurze Einführung in das neue Tool opsi-cli. Ich werde auch das Designkonzept vorstellen und über unsere Motivation schreiben, ein neues Tool zu implementieren. Am Ende des Artikels finden Sie eine Installationsanleitung.

Jetzt herunterladen

Warum wir ein neues opsi-Tool entwickelt haben

Derzeit gibt es mehrere Kommandozeilentools zur Interaktion mit opsi. Die opsi-utils- und opsi-python-Skripte haben jeweils ihre eigene Struktur, eigene Kommandozeilenoptionen, Ausgabeformate und Design-Paradigmen. Unsere opsi-python-Skripte setzen auf Python-Bibliotheken, die auf dem zugrundeliegenden Betriebssystem installiert sein müssen – sie sind daher von diesem abhängig. Einige Backend-Funtionen verwenden die RPC-Schnittstelle, während andere mit opsiconfd direkt auf die Datenstrukturen zugreifen.

Unter Berücksichtigung dieser Aspekte wollten wir ein neues Tool entwickeln, das Zugriff auf dieselben Funktionen (und mehr!) bietet und gleichzeitig ein kohärentes und robustes Schema beibehält. Zudem sollten die Backend-Funktionen leichter zugänglich sein, ohne dabei den Zugriff der Benutzer einzuschränken.

Wesentliche Anforderungen an opsi-cli

Wir haben opsi-cli so konzipiert, dass es die folgenden Anforderungen erfüllt:

  • Konsistente Formatierung von Optionen, Parametern, Eingaben und Ausgaben
  • Kompakte Binarys für Linux, macOS und Windows
  • Dynamische Erweiterbarkeit durch eigene Python-Plugins
  • Interaktion mit opsiconfd ausschließlich über die RPC-Schnittstelle
  • Klare Unterscheidung zwischen Nutzdaten (die an Stdout gesendet werden) und Logging-/Fehler-/Debug-Ausgaben (die an Stderr gesendet werden)

Wir planen, nach und nach Teile von opsi-utils als opsi-cli-Befehle zu implementieren. Dabei stellen wir sicher, dass alles abwärts kompatibel bleibt: Die opsi-utils-Befehle behalten wir als Wrapper bei, die opsi-cli hinter den Kulissen aufrufen.

opsi-cli hat mehrere Ebenen mit Befehlen und Unterbefehlen, ähnlich wie die Kommandozeilen-Schnittstelle von docker. Der Hauptbefehl opsi-cli enthält mehrere Befehle (oder Gruppen) mit jeweils eigenen Unterbefehlen. Optionen, die auf dieser obersten Ebene definiert werden (etwa --log-level oder --output-format), wirken sich auf alle Befehle aus, während Optionen, die für einen Befehl (Gruppe) gesetzt werden, alle Unterbefehle dieses Befehls betreffen. Umgekehrt wirken sich Optionen, die für einen Unterbefehl gesetzt werden, nur auf diesen Unterbefehl aus.

Der Parameter --help steht auf allen Ebenen zur Verfügung und liefert Informationen über verfügbare Optionen und/oder Unterbefehle. opsi-cli führt bestimmte Aufgaben aus und beendet sich dann mit einem sinnvollen Exit-Code; das Tool ist nicht dazu gedacht, als Dienst im Hintergrund zu laufen.

Baumdiagramm für opsi-cli-Befehle mit Unterbefehlen und Optionen

opsi-cli: ein vielseitiges und dynamisches Tool

Wir haben uns dazu entschieden, opsi-cli in Python zu implementieren. Das Tool nutzt das Modul click bzw. rich_click für farbige Ausgaben. Der Kern von opsi-cli besteht aus einer ausführbaren Datei, die neben wesentlichen Befehlen (config, self und plugin) einige spezielle Kommandos enthält.

Die Konfiguration kann Zugangsdaten für mehrere opsi config-Server (URL, Benutzername und Passwort) speichern, die für den Zugriff auf Backend-Methoden erforderlich sind. Wenn keine Zugangsdaten angegeben werden, versucht opsi-cli, sich mit https://localhost:4447 zu verbinden und nutzt dazu Credentials eines lokalen Backends. Das funktioniert nur, wenn opsi-cli direkt auf dem Config-Server läuft.

opsi-cli verfügt über ein system- und ein benutzerspezifisches Verzeichnis für Plugins, die es zur Laufzeit dynamisch lädt. Diese Plugins können importiert, exportiert und zwischen opsi-cli-Instanzen ausgetauscht werden. Für ZSH, Bash und Fish (und zukünftig auch PowerShell) steht eine Autovervollständigungsfunktion zur Verfügung ([Tab]/[Tab][Tab]), was die Arbeit mit dem Werkzeug komfortabel macht.

Die Option --output-format auf der obersten Ebene definiert, wie die opsi-cli-Ausgabe aussieht. Sie können entweder ein für Menschen lesbares Format wählen oder eines, das für die Effizienz der Kompression/Übertragung optimiert ist. Aktuell unterstützt opsi-cli die Formate auto, json, pretty-json, msgpack, table und csv. Da das Tool Nutzdaten und Protokolle an unterschiedliche Streams sendet, können Sie mehrere opsi-cli-Aufrufe über Pipes (Ausgabe zu Eingabe) miteinander verknüpfen.

Beispiel: Ausgabe von opsi-cli --help mit Optionen und Unterbefehlen

Erste Schritte mit opsi-cli

Wenn Sie auf dem Config-Server Ihre opsi-utils-Version auf 4.2.0.187 oder neuer aktualisieren, erhalten Sie automatisch Zugriff auf opsi-cli. Mit dem lokalen Backend können Sie opsi-cli ohne zusätzliche Service- oder Benutzerinformationen verwenden, solange der ausführende Benutzer die erforderlichen Rechte hat.

Möchten Sie opsi-cli auf einem anderen Computer (etwa auf einem Windows-Rechner) verwenden, laden Sie das Paket opsi-cli aus unseren öffentlichen Repositorys herunter. Um auf einen opsi-Dienst zuzugreifen, können Sie entweder die Anmeldedaten über die Optionen (--service, --username, --password) angeben oder sie auf der Client-Seite speichern (siehe opsi-cli config service add --help für weitere Informationen).

Disclaimer: opsi-cli ist noch Work in Progress

Derzeit befindet sich opsi-cli in der Entwurfsphase und wir können die Stabilität des Interfaces nicht garantieren. Es kann sein, dass wir grundlegende Änderungen an der Funktionsweise von opsi-cli vornehmen – wir korrigieren Designfehler lieber frühzeitig, anstatt sie als Legacy-Code zu übernehmen. Obwohl das Plugin-Format und das Handling häufig von Änderungen betroffen sind, versuchen wir zu vermeiden, dass Dinge kaputt gehen.

Probieren Sie opsi-cli aus und kontaktieren Sie uns gerne, wenn Sie Vorschläge oder Feedback haben.

Zum opsi-Forum

Verwandte Beiträge

Wir stellen vor: ein neuer Look für opsi

Wir stellen vor: ein neuer Look für opsi

Pünktlich zum runden Geburtstag bekommt opsi ein neues Design. 20 Jahre lang hat uns das alte Logo begleitet: auf der Website, auf Tassen, Stiften, Notizblöcken und als Sticker auf etlichen Laptops von Entwickler*innen und Anwender*innen. Jetzt ist es Zeit für einen modernen Look, frische Farben und ein neues Logo.

Mehr lesen
Die opsiconf 2022 in Mainz: opsiconf ahoi!

Die opsiconf 2022 in Mainz: opsiconf ahoi!

Zwei Jahre Flaute liegen hinter uns, in denen wir soziale Kontakte und Arbeitsbeziehungen auf ein Minimum reduziert haben. Es geht nichts über ein Treffen im echten Leben: Leinen los, Segel gesetzt, und auf zur opsiconf nach Mainz!

Mehr lesen
Neue opsi-Basislizenz: Kostenpflichtige Erweiterungen für 30 Clients gratis

Neue opsi-Basislizenz: Kostenpflichtige Erweiterungen für 30 Clients gratis

Gute Nachrichten für alle, die opsi-Erweiterungen nutzen: Dank unserer neuen Basislizenz können Sie (fast) alle kostenpflichtigen Erweiterungen kostenlos auf bis zu 30 Clients installieren. Dieser Artikel gibt eine kurze Einführung in die neue opsi-Lizenz.

Mehr lesen