Sviluppo BASATO SU PERL
È necessario seguire alcune convenzioni durante lo sviluppo del plug-in con PERL.
-
Il contenuto deve essere leggibile
-
Devono implementare le operazioni obbligatorie setenv, quiesce e senza richieste
-
Deve utilizzare una sintassi specifica per restituire i risultati all'agente
-
Il contenuto deve essere salvato come file <PLUGIN_NAME>.pm
Le operazioni disponibili sono
-
Setenv
-
versione
-
quiesce
-
non fare domande
-
clone_pre, clone_post
-
restore_pre, ripristino
-
pulizia
Gestione generale dei plug-in
Utilizzo dell'oggetto Results
Ogni operazione di plug-in personalizzata deve definire l'oggetto Results. Questo oggetto invia messaggi, codice di uscita, stdout e stderr all'agente host.
Oggetto Results (risultati):
my $result = {
exit_code => 0, stdout => "", stderr => "", };
Restituzione dell'oggetto Results:
return $result;
Preservare la coerenza dei dati
È possibile conservare i dati tra le operazioni (eccetto la pulizia) come parte della stessa esecuzione del flusso di lavoro. Ciò avviene utilizzando coppie chiave-valore. Le coppie chiave-valore dei dati vengono impostate come parte dell'oggetto risultato e vengono conservate e disponibili nelle successive operazioni dello stesso flusso di lavoro.
Il seguente esempio di codice imposta i dati da conservare:
my $result = { exit_code => 0, stdout => "", stderr => "", }; $result->{env}->{‘key1’} = ‘value1’; $result->{env}->{‘key2’} = ‘value2’; …. return $result
Il codice precedente imposta due coppie chiave-valore, che sono disponibili come input nell'operazione successiva. Le due coppie chiave-valore sono accessibili utilizzando il seguente codice:
sub setENV { my ($self, $config) = @_; my $first_value = $config->{‘key1’}; my $second_value = $config->{‘key2’}; … }
=== Logging error messages Ciascuna operazione può inviare i messaggi all'agente host, che visualizza e memorizza il contenuto. Un messaggio contiene il livello del messaggio, un indicatore data e ora e un testo del messaggio. Sono supportati i messaggi multilinea.
Load the SnapCreator::Event Class: my $msgObj = new SnapCreator::Event(); my @message_a = ();
Utilizzare msgObj per acquisire un messaggio utilizzando il metodo Collect.
$msgObj->collect(\@message_a, INFO, "My INFO Message"); $msgObj->collect(\@message_a, WARN, "My WARN Message"); $msgObj->collect(\@message_a, ERROR, "My ERROR Message"); $msgObj->collect(\@message_a, DEBUG, "My DEBUG Message"); $msgObj->collect(\@message_a, TRACE, "My TRACE Message");
Applicare i messaggi all'oggetto Results:
$result->{message} = \@message_a;
Utilizzo di stub plug-in
I plug-in personalizzati devono esporre gli stub plug-in. Questi sono i metodi che il server SnapCenter chiama, in base a un flusso di lavoro.
Stub plug-in | Opzionale/obbligatorio | Scopo | ||
---|---|---|---|---|
Setenv |
obbligatorio |
Questo stub imposta l'ambiente e l'oggetto di configurazione. Qualsiasi analisi o gestione dell'ambiente deve essere eseguita qui. Ogni volta che viene chiamato uno stub, lo stub setenv viene chiamato poco prima. È necessario solo per i plug-in PERL-style. |
||
Versione |
Opzionale |
Questo stub viene utilizzato per ottenere la versione dell'applicazione. |
||
Scopri |
Opzionale |
Questo stub viene utilizzato per rilevare gli oggetti dell'applicazione come istanze o database ospitati sull'agente o sull'host. Il plug-in restituirà gli oggetti dell'applicazione rilevati in un formato specifico come parte della risposta. Questo stub viene utilizzato solo nel caso in cui l'applicazione sia integrata con SnapDrive per Unix.
|
||
discovery_complete |
Opzionale |
Questo stub viene utilizzato per rilevare gli oggetti dell'applicazione come istanze o database ospitati sull'agente o sull'host. Il plug-in restituirà gli oggetti dell'applicazione rilevati in un formato specifico come parte della risposta. Questo stub viene utilizzato solo nel caso in cui l'applicazione sia integrata con SnapDrive per Unix.
|
||
Quiesce |
obbligatorio |
Questo stub è responsabile dell'esecuzione di un quiesce, il che significa mettere l'applicazione in uno stato in cui è possibile creare una copia Snapshot. Questo viene chiamato prima dell'operazione di copia Snapshot. I metadati dell'applicazione da conservare devono essere impostati come parte della risposta, che verrà restituita durante le successive operazioni di clonazione o ripristino sulla copia Snapshot dello storage corrispondente sotto forma di parametri di configurazione. |
||
Senza richieste |
obbligatorio |
Questo stub è responsabile dell'esecuzione di un'operazione senza oggetto, il che significa mettere l'applicazione in uno stato normale. Questa operazione viene richiamata dopo la creazione di una copia Snapshot. |
||
clone_pre |
opzionale |
Questo stub è responsabile dell'esecuzione delle attività di precolona. Ciò presuppone che si stia utilizzando l'interfaccia di clonazione del server SnapCenter integrata e che venga attivata durante l'esecuzione dell'operazione di clonazione. |
||
clone_post |
opzionale |
Questo stub è responsabile dell'esecuzione delle attività post-clone. Ciò presuppone che si stia utilizzando l'interfaccia di clonazione del server SnapCenter integrata e che venga attivata solo quando si esegue un'operazione di clonazione. |
||
ripristina_pre |
opzionale |
Questo stub è responsabile dell'esecuzione delle attività di prerestore. Ciò presuppone che si stia utilizzando l'interfaccia di ripristino del server SnapCenter integrata e che venga attivata durante l'esecuzione dell'operazione di ripristino. |
||
Ripristinare |
opzionale |
Questo stub è responsabile dell'esecuzione delle attività di ripristino delle applicazioni. Questo presuppone che si stia utilizzando l'interfaccia di ripristino del server SnapCenter integrata e viene attivato solo quando si esegue l'operazione di ripristino. |
||
Pulizia |
opzionale |
Questo stub è responsabile dell'esecuzione della pulizia dopo le operazioni di backup, ripristino o clonazione. La pulizia può avvenire durante la normale esecuzione del flusso di lavoro o in caso di errore del flusso di lavoro. È possibile dedurre il nome del flusso di lavoro con cui viene chiamata la pulizia facendo riferimento ALL'AZIONE del parametro di configurazione, che può essere backup, cloneVolAndLun o fileOrVolRestore. Il parametro di configurazione ERROR_MESSAGE indica se si è verificato un errore durante l'esecuzione del flusso di lavoro. Se ERROR_MESSAGE è definito e NON NULL, la pulitura viene richiamata durante l'esecuzione di un errore del workflow. |
||
versione_app |
Opzionale |
Questo stub viene utilizzato da SnapCenter per gestire i dettagli della versione dell'applicazione dal plug-in. |
Informazioni sul pacchetto plug-in
Ogni plug-in deve avere le seguenti informazioni:
package MOCK; our @ISA = qw(SnapCreator::Mod); =head1 NAME MOCK - class which represents a MOCK module. =cut =head1 DESCRIPTION MOCK implements methods which only log requests. =cut use strict; use warnings; use diagnostics; use SnapCreator::Util::Generic qw ( trim isEmpty ); use SnapCreator::Util::OS qw ( isWindows isUnix getUid createTmpFile ); use SnapCreator::Event qw ( INFO ERROR WARN DEBUG COMMENT ASUP CMD DUMP ); my $msgObj = new SnapCreator::Event(); my %config_h = ();
Operazioni
È possibile codificare diverse operazioni come setenv, Version, Quiesce e Unquiesce, supportate dai plug-in personalizzati.
Operazione setenv
L'operazione setenv è necessaria per i plug-in creati utilizzando PERL. È possibile impostare ENV e accedere facilmente ai parametri del plug-in.
sub setENV { my ($self, $obj) = @_; %config_h = %{$obj}; my $result = { exit_code => 0, stdout => "", stderr => "", }; return $result; }
Funzionamento della versione
L'operazione di versione restituisce le informazioni sulla versione dell'applicazione.
sub version { my $version_result = { major => 1, minor => 2, patch => 1, build => 0 }; my @message_a = (); $msgObj->collect(\@message_a, INFO, "VOLUMES $config_h{'VOLUMES'}"); $msgObj->collect(\@message_a, INFO, "$config_h{'APP_NAME'}::quiesce"); $version_result->{message} = \@message_a; return $version_result; }
Interrompere le operazioni
L'operazione quiesce esegue l'operazione di quiesce dell'applicazione sulle risorse elencate nel parametro RESOURCES.
sub quiesce { my $result = { exit_code => 0, stdout => "", stderr => "", }; my @message_a = (); $msgObj->collect(\@message_a, INFO, "VOLUMES $config_h{'VOLUMES'}"); $msgObj->collect(\@message_a, INFO, "$config_h{'APP_NAME'}::quiesce"); $result->{message} = \@message_a; return $result; }
Operazione senza problemi
L'operazione Unquiesce è necessaria per interrompere l'applicazione. L'elenco delle risorse è disponibile nel parametro RESOURCES.
sub unquiesce { my $result = { exit_code => 0, stdout => "", stderr => "", }; my @message_a = (); $msgObj->collect(\@message_a, INFO, "VOLUMES $config_h{'VOLUMES'}"); $msgObj->collect(\@message_a, INFO, "$config_h{'APP_NAME'}::unquiesce"); $result->{message} = \@message_a; return $result; }