-
Notifications
You must be signed in to change notification settings - Fork 91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Should we get rid of the instance-parameter in multi instance plugins? #292
Comments
This was something I implemented already in #127 - but there was the opinion that the instance name should be not coupled with the section name. Further it seems to be not a good idea to have two possibilities to reference the plugin in the configuration (the section name and plugin instance name). But still, I prefer my approach to reduce confusion, so I'm a little bit happy to see others have also issues with it :) When implementing such a thing we should decide if we still need two instance names. I would avoid using two plugin names and just use with the section name of the plugin (which is also already used in |
When working at pr/144 I stumbled across this instance name thing - and fell. |
@msinn i think @cstrassburg had an example where the section name would make problems, but currently i dont remember.. hopefully i do the next days |
In #127 steht es drin. Das habe ich damals so implementiert, damit man überhaupt noch ein default Plugin für die Items hat. Diese bisherige schreibweise der Attribute würde dann ganz wegfallen weil ich immer einen Namen habe und viele Plugins Multiinstance fähig sind. |
Ok, Ein möglicher Lösungsansatz könnte sein, die Instance bei MI Plugins im Hintergrund mitzuführen und bei der Initialisierung aus den Abschnittsnamen zu befüllen. Wenn man Plugins hat, von denen nur eine Instanz geladen wird, würde der Instance Name leer bleiben und die klassische Schreibweise bliebe gültig. Erhalten bliebe dabei weiterhin das Thema, dass ein MI Plugin mit mehreren Item Attributen erwartet, dass jedem Attribut der Instancename hinzugefügt werden muss, obwohl es höchst unwahrscheinlich ist, dass ein Item einzelne Attribute der verschiedenen Instanzen eines Plugins ansprechen möchte. Bei diesem Issue geht es mir als erstes darum, dass ein verständliches einfach zu erklärendes Handling entsteht. |
Nein, das fällt nicht weg. Jedenfalls nicht mit den Anpassungen aus #127. Damit gibt es weiterhin das Defaut-Plugin, was in der Konfiguration hinterlegt werden muss. Vielleicht sollten MI Plugins immer den Instanznamen bei den Items gesetzt haben. Falls nicht gibt es eine Fehlermeldung im Log. Wäre aber dann ein breaking change. Alternativ könnte man einfach das erste MI Plugin in der Konfiguration als das Default-Plugin ansehen. Item-Konfigurationen ohne Instanz würden dem dann zugeordnet. Können dort aber auch mit Instanznamen konfiguriert werden. In beiden Fällen könnte man auf das zusätzliche Vielleicht sollten wir die unterschiedlichen Lösungen als Vorschläge in der Beschreibung oben zusammenfassen. |
@ohinckel Würdest Du an der Version eines "Default Plugins" festhalten wollen, wenn kein @instance am Item Attribut angegeben ist? Das würde eigentlich bedeuten, dass alle Attribute eines items die sich auf das Plugin beziehen, ein @instance haben müssten. So sind aber nicht alle Plugins implementiert. Beispiel AVM Plugin:
Hier bewirkt das Wenn ich 2 Instanzen (willy_tel und telekom) habe, würde eine Konfiguration wir
auch keinen Sinn machen. Ich sehe keinen Fall, bei dem ein Item die Attribute unterschiedlicher Instanzen des selben Plugins referenzieren/nutzen will oder soll. Dadurch entsteht die Frage: Wie wird ein Item auf eine Plugin Instanz gebunden?
Bei 3. wäre z.B. ein Syntax wie folgender denkbar:
Ich werde in den kommenden Tagen die bisherigen (und evtl. noch kommende) Vorschläge im 1. Post zusammenfassen. |
das finde ich irgendwie noch verwirrender als überall @instance zu nutzen Ich frage mich auch, wie das mal wird, wenn items eines tages via GUI konfiguriert werden.. vielleicht auch über den use case nachdenken.. |
Das erste Plugin als Default hatte ich nur vorgeschlagen weil es auch Summen gab die sagten "Alle Items anzupassen, nur weil man eine weitere Instanz konfiguriert ist mir zu viel Aufwand". Mir wäre es am liebsten, wenn man die Instanz angeben muss sobald man mehrere Instanzen konfiguriert hat. In anderen Fällen ist die Abgabe optional. Ich halte daher nicht unbedingt am Default-Plugin-Handling fest. Mir ging es nur um "einfachere Migrationswege". Wie das mit den AVM-Plugin harmoniert kann ich nicht sagen. Die Frage ist auch, ob das dort richtig implementiert ist (Zugriff auf Einstellungen ohne Instanzangabe bei den Items). @msinn ich denke ein Item muss nicht nur einer Plugin-Instanz zugeordnet werden können, sondern kann auch mehreren zugelegt werden. Ausreichen dafür ist eine Einstellung für das Plugin, also mit Angabe der Instanz. |
Und genauso ist es doch implementiert (oder war zumindes so) Wo liegt eigentlich das technische Problem hier? Wenn Du nur eine Plugin Instanz verwendest, musst du nirgendwo etwas angeben. Wenn man mehrere Instanzen verwenden möchte muss man sich Gedanken machen was über die Instanzen laufen soll. |
Wenn man den Kommentaren glauben soll, ist das nicht so: man möchte nicht alle Items anpassen müssen, wenn man später eine zusätzliche Plugin-Instanz konfiguriert, sondern nur die für die neue. Für mich ist das kein Argument, nur weil es einem die Arbeit erspart. Dann bräuchte man sich auch keine Gedanken über das Default Plugin machen. Nur meine Meinung, und evtl. erspart das einen Anwender tatsächlich Arbeit. Mit wäre es egal, aber dazu diskutieren wir hier ja.
Ob man das braucht oder unterstützen sollte weiß ich auch nicht so genau. Vielleicht handelt man sich damit nur noch mehr Ärger ein. Das AVM Plugin beispielsweise verwendet aber Item-Konfiguration mit und ohne Instanzangaben (siehe oben). Direktes Verwenden von Item.conf macht's möglich und wird auch bisher nicht verhindert. Ich habe aber auch z.B. das Database Plugin mit mehreren Instanzen konfiguriert (normales Logging und Reporting Logging) und habe somit Items die an mehreren Instanzen eines Plugins gebunden sind. Ich könnte mir auch noch andere Fälle vorstellen (z.B. operationlog Plugin mit dem man Logs parallel in unterschiedlichen Logs verteilen möchte). So ganz abwegig ist das also nicht. |
Ich finde die nicht zwingend einheitliche Benennung des Plugins in der plugin.yaml sowie die Instanz auch nicht hilfreich. Wenn nur ein Plugin da ist, braucht man keine Angaben zur Instanz o.ä. Ich wäre dafür, dass bei mehreren Instanzen eines Plugins dann z.B. den Namen des Plugins aus der plugin.yaml als Instanzbezeichner benutzt. Die Notwendigkeit bzw. Möglichkeit, in einem Item mehrere Instanzen desselben Plugins zu verwenden, sehe ich auch nicht. Es wäre also auch eine "item-weite" Deklaration möglich, wie oben schon genannt
Damit würde komplett auf die zusätzliche Deklaration von Nachteilig wäre sicher, dass es mehr Schreibaufwand ist, wenn nur ein oder zwei Attribute verwendet werden. |
Noch eine Idee: im Prinzip wie oben den "identifier" aus der plugin.yaml
Die Mechaniken, das auszulesen, sind alle vorhanden und nonbreaking; allein der Wechsel des Instanzbezeichners
Das sollte sogar relativ simpel per Skript machbar sein. Wenn wir entscheiden, diesen Weg zu gehen, schreib' ich das Skript ;) (bash oder Logik? :-D ) |
Letzteren Ansatz mit dem Attribut finde ich nicht so schlecht - das korreliert auch mit der Funktion, wie sie momentan bei structs umgesetzt ist. |
Wenn man den usecase "ein Item mit mehreren Instanzen desselben Plugins" berücksichtigt, wäre vielleicht noch eine weitere Variante:
Damit wären die Fälle
alle abgedeckt. Die Instanz könnte weiter als Damit wäre es - außer bei Mischung von Attributen mit und ohne Instanz - nonbreaking mit Ausnahme des Wechsels von Durch die Nutzung des Plugin-Bezeichners könnte (analog struct-Vorschlag) auch systemweit eine eindeutige Referenzierung auf das Plugin erfolgen. |
Bei den structs ist es möglich,
oder
Mit dem (noch nicht gemergten) PR #692 wird Plugins werden im sh-Object (und im sh.plugins-Objekt) ebenfalls mit ihrem Identifier eingebunden. Von daher finde ich den Ansatz von ohinckel, die Instanz für Item-Attribute ebenfalls über den Identifier zu spezifizieren, zielführend und konsistent. Aus meiner Sicht spräche auch nichts dagegen, so wie bei Structs entweder
oder
zu erlauben. Ja, das ist eine Redundanz (aber dieselbe Redundanz wie bei den structs). Und ich kann mir im Moment auch keinen Anwendungsfall vorstellen, wo ich einem Item sowohl ein Struct als auch zusätzliche Item-Attribute für ein anderes (oder mehr als ein) Plugin zuweise - in dem Fall wäre die Spezifizierung mit Ich würde mehr Schwerpunkt auf einheitliche Bezeichnung legen als auf zwingende Beibehaltung aller Konventionen; insofern wäre mein Vorschlag, den Identifier zu benutzen und beide Instanzmöglichkeiten zu erlauben. Das ist - bis auf den Identifier - nonbreaking, eindeutig und (wie ich finde) verständlich. Wir müssten dann allerdings entscheiden, ob MI-Plugins immer mit Instanzangaben angegeben werden müssen, oder ob es einen Wollen wir mal versuchen, hier zu einer Einigung zu kommen, so dass wir das nach dem Release implementieren können? Das meiste davon ist schon vorhanden, und soweit ich das sehen kann, auch (fast) trivial zu implementieren. Ob man dann den @msinn, @bmxp, @onkelandy, @psilo909: Habt ihr eine Meinung dazu, oder würdet ihr euch eine bilden? |
Generell finde ich den Ansatz mit den Identifiern vernünftig, die waren sonst bisher doch immer recht verwirrend. Man müsste dann halt noch darüber nachdenken, wie man die Methode sh.plugins.get() bzw. return_plugin oder was es dort alles gibt "sortiert" bzw. positioniert..? |
Nur zum Verständnis: natürlich nur, wenn das Plugin auch mehrfach eingebunden ist... Wie geschrieben können wir auch die default-Mechanik beibehalten (erstes in der Liste oder manuell bestimmt...) |
When configuring more than one instance of a plugin, the instance parameter is used to bind item attributes to a specific instance of a plugin.
On the other hand, we already have an identifier, that points to the specific instance of those plugins. Each configured plugin has a section name in etc/plugin.yaml. That section name could be used for the same purpose.
That way we could solve some irritations about the configuration of multi instance plugins.
If it is the way to go, I would dig into the code to see how to implement it and to show a migration path.
Questions to address
Solutions
TDB.
The text was updated successfully, but these errors were encountered: