Stile Java
Un plug-in personalizzato Java interagisce direttamente con un'applicazione come database, istanze e così via.
Limitazioni
Esistono alcune limitazioni che è necessario tenere presenti durante lo sviluppo di un plug-in utilizzando il linguaggio di programmazione Java.
Caratteristica del plug-in | Plug-in Java |
---|---|
Complessità |
Da basso a medio |
Impatto della memoria |
Fino a 10-20 MB |
Dipendenze da altre librerie |
Librerie per la comunicazione applicativa |
Numero di thread |
1 |
Runtime del thread |
Meno di un'ora |
Motivo delle limitazioni Java
L'obiettivo dell'agente SnapCenter è garantire un'integrazione applicativa continua, sicura e solida. Grazie al supporto dei plug-in Java, è possibile che i plug-in introducano perdite di memoria e altri problemi indesiderati. Questi problemi sono difficili da affrontare, soprattutto quando l'obiettivo è quello di mantenere le cose semplici da utilizzare. Se la complessità di un plug-in non è troppo complessa, è molto meno probabile che gli sviluppatori abbiano introdotto gli errori. Il pericolo del plug-in Java è che lo sia In esecuzione nella stessa JVM dell'agente SnapCenter stesso. In caso di crash o perdita di memoria, il plug-in potrebbe avere un impatto negativo sull'Agent.
Metodi supportati
Metodo | Obbligatorio | Descrizione | Chiamate quando e da chi? |
---|---|---|---|
Versione |
Sì |
Deve restituire la versione del plug-in. |
Dal server o dall'agente SnapCenter per richiedere la versione di il plug-in. |
Quiesce |
Sì |
Deve eseguire un quiesce sull'applicazione. Nella maggior parte dei casi, ciò significa mettere l'applicazione in uno stato in cui il server SnapCenter può creare un backup (ad esempio, una copia Snapshot). |
Prima che il server SnapCenter crei una copia Snapshot o. esegue un backup in generale. |
Senza richieste |
Sì |
Deve eseguire un'operazione senza domande sull'applicazione. Nella maggior parte dei casi, questo significa riportare l'applicazione in uno stato operativo normale. |
Dopo che il server SnapCenter ha creato una copia Snapshot eseguito un backup in generale. |
Pulizia |
No |
Responsabile della pulizia di qualsiasi elemento che il plug-in deve pulire. |
Al termine di un flusso di lavoro sul server SnapCenter (con esito positivo o con errore). |
ClonePre |
No |
Dovrebbe eseguire azioni che devono essere eseguite prima di eseguire un'operazione di clonazione. |
Quando un utente attiva un'azione "cloneVol" o "cloneLun" e utilizza la procedura guidata di cloning integrata (GUI/CLI). |
ClonePost |
No |
Dovrebbe eseguire azioni che devono avvenire dopo l'esecuzione di un'operazione di clonazione. |
Quando un utente attiva un'azione "cloneVol" o "cloneLun" e utilizza la procedura guidata di cloning integrata (GUI/CLI). |
RestorePre |
No |
Dovrebbe eseguire le azioni che devono essere eseguite prima di richiamare l'operazione di ripristino. |
Quando un utente attiva un'operazione di ripristino. |
Ripristinare |
No |
Responsabile dell'esecuzione di un ripristino/ripristino dell'applicazione. |
Quando un utente attiva un'operazione di ripristino. |
AppVersion |
No |
Per recuperare la versione dell'applicazione gestita dal plug-in. |
Come parte della raccolta di dati ASUP in ogni flusso di lavoro come Backup/Restore/Clone. |
Esercitazione
In questa sezione viene descritto come creare un plug-in personalizzato utilizzando il linguaggio di programmazione Java.
Configurare l'eclissi
-
Creare un nuovo progetto Java "TutorialPlugin" in Eclipse
-
Fare clic su fine
-
Fare clic con il pulsante destro del mouse su nuovo progetto → Proprietà → Java Build Path → Librerie → Aggiungi jar esterni
-
Accedere alla cartella ../lib/ dell'agente host e selezionare jars scAgent-5.0-core.jar e common-5.0.jar
-
Selezionare il progetto e fare clic con il pulsante destro del mouse sulla cartella src → New → Package e creare un nuovo pacchetto con il nome com.netapp.snapcreator.agent.plugin.TutorialPlugin
-
Fare clic con il pulsante destro del mouse sul nuovo pacchetto e selezionare New → Java Class.
-
Immettere il nome come TutorialPlugin.
-
Fare clic sul pulsante di ricerca delle superclassi e cercare "*AbstractPlugin". Dovrebbe essere visualizzato un solo risultato:
"AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin". .. Fare clic su *fine*. .. Classe Java:
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; } }
-
Implementazione dei metodi richiesti
Quiesce, unquiesce e version sono metodi obbligatori che ogni plug-in Java personalizzato deve implementare.
Di seguito viene riportato un metodo di versione per restituire la versione del plug-in.
@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; }
Il metodo viene passato in un oggetto di contesto. Contiene più assistenti, ad esempio un Logger e un archivio di contesto, nonché le informazioni sull'operazione corrente (workflow-ID, job-ID). Possiamo ottenere il logger chiamando il logger finale = Context.GetLogger();. L'oggetto logger fornisce metodi simili noti da altri framework di logging, ad esempio logback. Nell'oggetto risultato, è anche possibile specificare il codice di uscita. In questo esempio, viene restituito zero, poiché non si è verificato alcun problema. Altri codici di uscita possono essere associati a diversi scenari di guasto.
Utilizzo dell'oggetto risultato
L'oggetto Result contiene i seguenti parametri:
Parametro | Predefinito | Descrizione |
---|---|---|
Config |
Vuoto config |
Questo parametro può essere utilizzato per inviare nuovamente i parametri di configurazione al server. IT possono essere parametri che il plug-in desidera aggiornare. Se questo cambiamento è La configurazione sul server SnapCenter dipende da IL parametro APP_CONF_PERSISTENCY=Y o N nella configurazione. |
ExitCode |
0 |
Indica lo stato dell'operazione. "0" indica che l'operazione è stata eseguita eseguito correttamente. Altri valori indicano errori o avvisi. |
Stdout |
Vuoto Elenco |
Questa funzione può essere utilizzata per trasmettere messaggi stdout a SnapCenter Server. |
Stderr |
Vuoto Elenco |
Questa funzione può essere utilizzata per ritrasmettere i messaggi stderr a SnapCenter Server. |
Messaggi |
Vuoto Elenco |
Questo elenco contiene tutti i messaggi che un plug-in desidera restituire a server. Il server SnapCenter visualizza questi messaggi nella CLI o nella GUI. |
L'agente SnapCenter fornisce costruttori ("Modello di costruttore") per tutti i tipi di risultato. Questo rende l'utilizzo molto semplice:
Result result = Result.builder() .withExitCode(0) .withStdout(stdout) .withStderr(stderr) .withConfig(config) .withMessages(logger.getMessages()) .build()
Ad esempio, impostare il codice di uscita su 0, impostare gli elenchi per stdout e stderr, impostare i parametri di configurazione e aggiungere anche i messaggi di registro che verranno rinviati al server. Se non sono necessari tutti i parametri, inviare solo quelli necessari. Poiché ogni parametro ha un valore predefinito, se si rimuove .withExitCode(0) dal codice riportato di seguito, il risultato non viene influenzato:
Result result = Result.builder() .withExitCode(0) .withMessages(logger.getMessages()) .build();
VersionResult
VersionResult informa il server SnapCenter della versione del plug-in. Come eredita anche Di conseguenza, contiene i parametri config, exitCode, stdout, stderr e messaggi.
Parametro | Predefinito | Descrizione |
---|---|---|
Maggiore |
0 |
Principale campo di versione del plug-in. |
Minore |
0 |
Campo versione minore del plug-in. |
Patch |
0 |
Campo della versione della patch del plug-in. |
Costruire |
0 |
Campo della versione di build del plug-in. |
Ad esempio:
VersionResult result = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build();
Utilizzo dell'oggetto di contesto
L'oggetto Context fornisce i seguenti metodi:
Metodo di contesto | Scopo |
---|---|
Stringa GetWorkflowId(); |
Restituisce l'id del flusso di lavoro utilizzato dal server SnapCenter per flusso di lavoro corrente. |
Config getConfig(); |
Restituisce la configurazione inviata dal server SnapCenter a Agente. |
ID flusso di lavoro
L'ID del flusso di lavoro è l'id utilizzato dal server SnapCenter per fare riferimento a un'esecuzione specifica workflow.
Config
Questo oggetto contiene la maggior parte dei parametri che un utente può impostare nella configurazione di Server SnapCenter. Tuttavia, a causa di motivi di sicurezza, alcuni di questi parametri potrebbero ottenere filtrato sul lato server. Di seguito viene riportato un esempio di come accedere alla configurazione e al recupero un parametro:
final Config config = context.getConfig(); String myParameter = config.getParameter("PLUGIN_MANDATORY_PARAMETER");
""// myParameter" contiene ora il parametro letto dalla configurazione sul server SnapCenter Se una chiave del parametro di configurazione non esiste, restituirà una stringa vuota ("").
Esportazione del plug-in
È necessario esportare il plug-in per installarlo sull'host SnapCenter.
In Eclipse eseguire le seguenti operazioni:
-
Fare clic con il pulsante destro del mouse sul pacchetto di base del plug-in (nel nostro esempio com.netapp.snapcreator.agent.plugin.TutorialPlugin).
-
Selezionare Export → Java → jar file
-
Fare clic su Avanti.
-
Nella finestra seguente, specificare il percorso del file jar di destinazione: tutorial_plugin.jar La classe di base del plug-in è denominata TutorialPlugin.class, il plug-in deve essere aggiunto a una cartella con lo stesso nome.
Se il plug-in dipende da librerie aggiuntive, è possibile creare la seguente cartella: Lib/
È possibile aggiungere file jar, da cui dipende il plug-in (ad esempio, un driver di database). Quando SnapCenter carica il plug-in, che automaticamente associa tutti i file jar in questa cartella ad esso e. li aggiunge al classpath.