Skip to main content
La versione in lingua italiana fornita proviene da una traduzione automatica. Per eventuali incoerenze, fare riferimento alla versione in lingua inglese.

Sviluppo BASATO SU PERL

Collaboratori

È 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.

Nota Il file system Linux (Linux Flavors) è supportato. AIX/Solaris (Unix Flavors) non sono supportati.

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.

Nota Il file system Linux (Linux Flavors) è supportato. AIX e Solaris (versioni Unix) non sono supportati.

Quiesce

obbligatorio

Questa stub è responsabile dell'esecuzione di una pausa, il che significa posizionare l'applicazione in uno stato in cui è possibile creare una snapshot. Questo viene chiamato prima dell'operazione istantanea. I metadati dell'applicazione da conservare devono essere impostati come parte della risposta, che verranno restituiti durante le operazioni di cloning o ripristino successive sul Snapshot di 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 un'istantanea.

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;
}