Java-Stil
Ein benutzerdefiniertes Java Plug-in interagiert direkt mit einer Applikation wie Datenbank, Instanz usw.
Einschränkungen
Es gibt bestimmte Einschränkungen, die Sie beim entwickeln eines Plug-ins mit Java-Programmiersprache beachten sollten.
Steckkennlinie | Java Plug-in |
---|---|
Komplexität |
Niedrig bis mittel |
Platzbedarf für Arbeitsspeicher |
Bis zu 10-20 MB |
Abhängigkeiten von anderen Bibliotheken |
Bibliotheken für die Anwendungskommunikation |
Anzahl der Threads |
1 |
Thread-Laufzeit |
Weniger als eine Stunde |
Grund für Java-Einschränkungen
Ziel des SnapCenter-Agenten ist es, eine kontinuierliche, sichere und robuste Anwendungsintegration zu gewährleisten. Durch die Unterstützung von Java-Plug-ins ist es möglich, dass Plug-ins Speicherlecks und andere unerwünschte Probleme einführen. Diese Probleme sind schwer zu bewältigen, vor allem, wenn das Ziel ist, die Dinge einfach zu bedienen. Wenn die Komplexität eines Plug-ins nicht zu komplex ist, ist es viel seltener wahrscheinlich, dass die Entwickler die Fehler verursacht hätten. Die Gefahr von Java Plug-in ist, dass sie sind Wird in derselben JVM ausgeführt wie der SnapCenter-Agent selbst. Wenn das Plug-in abstürzt oder Speicher leckt, kann es auch negative Auswirkungen auf den Agent haben.
Unterstützte Methoden
Methode | Erforderlich | Beschreibung | Wann und von wem gerufen? |
---|---|---|---|
Version |
Ja. |
Muss die Version des Plug-ins zurückgeben. |
Vom SnapCenter-Server oder -Agenten, um die Version von anzufordern Das Plug-in. |
Stilllegen |
Ja. |
Muss die Applikation stilllegen. In den meisten Fällen bedeutet dies, die Applikation in einen Zustand zu versetzen, in dem der SnapCenter Server ein Backup erstellen kann (z. B. eine Snapshot Kopie). |
Bevor der SnapCenter-Server eine Snapshot(s)-Kopie oder erstellt Führt eine Sicherung im Allgemeinen durch. |
Nicht Stilllegen |
Ja. |
Muss die Applikation stilllegen. In den meisten Fällen ist dies der Fall Bedeutet, dass die Anwendung wieder in einen normalen Betriebszustand versetzt wird. |
Nachdem der SnapCenter Server eine Snapshot Kopie erstellt hat oder hat Backup im Allgemeinen durchgeführt. |
Bereinigung |
Nein |
Verantwortlich für die Reinigung von allen, die das Plug-in braucht, um zu reinigen. |
Wenn ein Workflow auf dem SnapCenter-Server beendet ist (erfolgreich oder mit einem Fehler). |
KlonVorr |
Nein |
Sollte Aktionen durchführen, die vor der Durchführung eines Klonvorgangs ausgeführt werden müssen. |
Wenn ein Benutzer eine Aktion „KlonVol“ oder „cloneRun“ auslöst und den integrierten Klon-Assistenten (GUI/CLI) verwendet. |
KlonPost |
Nein |
Sollte Aktionen durchführen, die nach der Durchführung eines Klonvorgangs ausgeführt werden müssen. |
Wenn ein Benutzer eine Aktion „KlonVol“ oder „cloneRun“ auslöst und den integrierten Klon-Assistenten (GUI/CLI) verwendet. |
WiederherstellungPre |
Nein |
Sollte Aktionen durchführen, die vor dem Wiederherstellungsvorgang ausgeführt werden müssen. |
Wenn ein Benutzer einen Wiederherstellungsvorgang auslöst. |
Wiederherstellen |
Nein |
Verantwortlich für die Durchführung einer Wiederherstellung/Wiederherstellung der Anwendung. |
Wenn ein Benutzer einen Wiederherstellungsvorgang auslöst. |
AppVersion |
Nein |
Zum Abrufen der vom Plug-in verwalteten Anwendungsversion. |
Im Rahmen von ASUP Datenerfassung in jedem Workflow, wie beispielsweise Backup/Restore/Klonen, |
Lernprogramm
In diesem Abschnitt wird beschrieben, wie Sie ein benutzerdefiniertes Plug-in mithilfe der Java-Programmiersprache erstellen.
Sonnenfinsternis einrichten
-
Erstellen Sie ein neues Java-Projekt "TutorialPlugin" in Eclipse
-
Klicken Sie Auf Fertig Stellen
-
Klicken Sie mit der rechten Maustaste auf das neue Projekt → Eigenschaften → Java Build Path → Bibliotheken → Externe Jars hinzufügen
-
Navigieren Sie zum Ordner ../lib/ des Host Agent, und wählen Sie Jars scAgent-5.0-core.jar und common-5.0.jar aus
-
Wählen Sie das Projekt aus und klicken Sie mit der rechten Maustaste auf den Ordner src → Neu → Paket und erstellen Sie ein neues Paket mit dem Namen com.netapp.snapcreator.agent.plugin.TutorialPlugin
-
Klicken Sie mit der rechten Maustaste auf das neue Paket, und wählen Sie Neu → Java-Klasse.
-
Geben Sie den Namen als TutorialPlugin ein.
-
Klicken Sie auf die Schaltfläche zum Durchsuchen von Superclass und suchen Sie nach "*AbstractPlugin". Es sollte nur ein Ergebnis angezeigt werden:
"AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin". .. Klicken Sie Auf *Fertig Stellen*. .. Java-Klasse:
package com.netapp.snapcreator.agent.plugin.TutorialPlugin; import com.netapp.snapcreator.agent.nextgen.common.result.Describe Result; import com.netapp.snapcreator.agent.nextgen.common.result.Result; import com.netapp.snapcreator.agent.nextgen.common.result.VersionR esult; import com.netapp.snapcreator.agent.nextgen.context.Context; import com.netapp.snapcreator.agent.nextgen.plugin.AbstractPlugin; public class TutorialPlugin extends AbstractPlugin { @Override public DescribeResult describe(Context context) { // TODO Auto-generated method stub return null; } @Override public Result quiesce(Context context) { // TODO Auto-generated method stub return null; } @Override public Result unquiesce(Context context) { // TODO Auto-generated method stub return null; } @Override public VersionResult version() { // TODO Auto-generated method stub return null; } }
-
Umsetzung der erforderlichen Methoden
Quiesce, unquiesce und Version sind obligatorische Methoden, die jedes benutzerdefinierte Java Plug-in implementieren muss.
Die folgende Versionsmethode gibt die Version des Plug-ins zurück.
@Override public VersionResult version() { VersionResult versionResult = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build(); return versionResult; }
Below is the implementation of quiesce and unquiesce method. These will be interacting with the application, which is being protected by SnapCenter Server. As this is just a tutorial, the application part is not explained, and the focus is more on the functionality that SnapCenter Agent provides the following to the plug-in developers:
@Override public Result quiesce(Context context) { final Logger logger = context.getLogger(); /* * TODO: Add application interaction here */
logger.error("Something bad happened."); logger.info("Successfully handled application");
Result result = Result.builder() .withExitCode(0) .withMessages(logger.getMessages()) .build(); return result; }
Die Methode wird in einem Kontextobjekt übergeben. Dazu gehören mehrere Helfer, zum Beispiel ein Logger und ein Context Store, sowie die Informationen über den aktuellen Vorgang (Workflow-ID, Job-ID). Wir können den Logger erhalten, indem wir den endgültigen Logger Logger = context.getLogger(); anrufen. Das Logger-Objekt bietet ähnliche Methoden, die von anderen Protokollierungs-Frameworks bekannt sind, z. B. Logback. Im Ergebnisobjekt können Sie auch den Exit-Code angeben. In diesem Beispiel wird Null zurückgegeben, da kein Problem aufgetreten ist. Andere Exit-Codes können verschiedenen Fehlerszenarien zugeordnet werden.
Ergebnisobjekt wird verwendet
Das Ergebnisobjekt enthält die folgenden Parameter:
Parameter | Standard | Beschreibung |
---|---|---|
Konfigurations |
Leer Konfigurations |
Mit diesem Parameter können Konfigurationsparameter zurück an den Server gesendet werden. Es Kann Parameter sein, die das Plug-in aktualisieren möchte. Ob dies der Fall ist Die in der Konfiguration auf dem SnapCenter-Server tatsächlich berücksichtigt wird, ist abhängig von DER PARAMETER APP_CONF_PERSISTENT=Y oder N in der Konfiguration. |
Code-Code |
0 |
Zeigt den Status des Vorgangs an. Eine „0“ bedeutet, dass der Vorgang war Erfolgreich ausgeführt. Andere Werte weisen auf Fehler oder Warnungen hin. |
Stdout |
Leer Liste |
Damit können stdout-Nachrichten zurück an den SnapCenter übertragen werden Server: |
Stderr |
Leer Liste |
Damit können stderr-Nachrichten zurück an den SnapCenter übertragen werden Server: |
Nachrichten |
Leer Liste |
Diese Liste enthält alle Meldungen, die ein Plug-in zum zurückkehren möchte Server: Der SnapCenter-Server zeigt diese Meldungen in der CLI oder GUI an. |
Der SnapCenter Agent stellt Builders zur Verfügung ("Baumuster") Für alle Die Ergebnistypen. Daher ist es sehr einfach, sie zu verwenden:
Result result = Result.builder() .withExitCode(0) .withStdout(stdout) .withStderr(stderr) .withConfig(config) .withMessages(logger.getMessages()) .build()
Setzen Sie beispielsweise den Exit-Code auf 0, legen Sie Listen für stdout und stderr fest, legen Sie die Konfigurationsparameter fest und fügen Sie die Protokollmeldungen an, die an den Server zurückgesendet werden. Wenn Sie nicht alle Parameter benötigen, senden Sie nur die erforderlichen Parameter. Da jeder Parameter einen Standardwert hat, ist das Ergebnis unberührt, wenn Sie .withExitCode(0) aus dem unten stehenden Code entfernen:
Result result = Result.builder() .withExitCode(0) .withMessages(logger.getMessages()) .build();
VersionResult
Der VersionResult informiert den SnapCenter-Server über die Plug-in-Version. Wie es auch erbt Von result enthält es die Parameter config, exitCode, stdout, stderr und messages.
Parameter | Standard | Beschreibung |
---|---|---|
Major |
0 |
Hauptversionsfeld des Plug-ins. |
Gering |
0 |
Kleines Versionsfeld des Plug-ins. |
Patch |
0 |
Feld für die Patch-Version des Plug-ins. |
Entwickeln |
0 |
Build-Versionsfeld des Plug-ins. |
Beispiel:
VersionResult result = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build();
Verwenden des Kontextobjekts
Das Kontextobjekt bietet folgende Methoden:
Kontextsethode | Zweck |
---|---|
Zeichenfolge GetWorkflowId(); |
Gibt die Workflow-id zurück, die vom SnapCenter-Server für den verwendet wird Aktueller Workflow. |
Config getconfig(); |
Gibt die Konfiguration zurück, die vom SnapCenter-Server an den gesendet wird Agent: |
Workflow-ID
Die Workflow-ID ist die id, die der SnapCenter-Server verwendet, um auf einen bestimmten laufenden zu verweisen Workflow:
Konfigurations
Dieses Objekt enthält (die meisten) der Parameter, die ein Benutzer in der Konfiguration auf dem festlegen kann SnapCenter-Server: Aus Sicherheitsgründen können jedoch einige dieser Parameter erhalten Serverseitig gefiltert. Im Folgenden finden Sie ein Beispiel für den Zugriff auf die Konfiguration und den Abruf Ein Parameter:
final Config config = context.getConfig(); String myParameter = config.getParameter("PLUGIN_MANDATORY_PARAMETER");
""// myParameter" enthält jetzt den Parameter, der von der Konfiguration auf dem SnapCenter-Server gelesen wird Wenn ein Konfigurationsparameter-Schlüssel nicht vorhanden ist, wird ein leerer String ("") zurückgegeben.
Das Plug-in wird exportiert
Sie müssen das Plug-in exportieren, um es auf dem SnapCenter-Host zu installieren.
Führen Sie in Eclipse die folgenden Aufgaben aus:
-
Klicken Sie mit der rechten Maustaste auf das Basispaket des Plug-ins (in unserem Beispiel) L 188, S. com.netapp.snapcreator.agent.plugin.TutorialPlugin)
-
Wählen Sie Export → Java → Jar-Datei
-
Klicken Sie Auf Weiter.
-
Geben Sie im folgenden Fenster den Pfad der JAR-Zieldatei an: tutorial_plugin.jar Die Basisklasse des Plug-ins heißt TutorialPlugin.class, das Plug-in muss einem Ordner hinzugefügt werden Mit demselben Namen.
Wenn Ihr Plug-in von zusätzlichen Bibliotheken abhängt, können Sie den folgenden Ordner erstellen: Lib/
Sie können JAR-Dateien hinzufügen, von denen das Plug-in abhängig ist (z. B. ein Datenbanktreiber). Wenn SnapCenter lädt das Plug-in, es ordnet automatisch alle JAR-Dateien in diesem Ordner zu und Fügt sie dem Klassenpfad hinzu.