Desenvolvimento baseado EM PERL
Você deve seguir certas convenções ao desenvolver o plug-in usando PERL.
-
O conteúdo deve ser legível
-
Deve implementar operações obrigatórias setenv, quiesce e unquiesce
-
Deve usar uma sintaxe específica para passar os resultados de volta ao agente
-
O conteúdo deve ser salvo como arquivo <PLUGIN_NAME>.pm
As operações disponíveis são
-
Setenv
-
versão
-
quiesce
-
unquiesce
-
clone_pre, clone_post
-
restore_pre, restaurar
-
limpeza
Manuseamento geral do plug-in
Usando o objeto resultados
Cada operação de plug-in personalizada deve definir o objeto resultados. Esse objeto envia mensagens, código de saída, stdout e stderr de volta ao agente host.
Objeto resultados:
my $result = {
exit_code => 0, stdout => "", stderr => "", };
Retornando o objeto resultados:
return $result;
Preservar a consistência dos dados
É possível preservar dados entre operações (exceto limpeza) como parte da mesma execução do fluxo de trabalho. Isso é feito usando pares chave-valor. Os pares de dados de valor-chave são definidos como parte do objeto de resultado e são retidos e disponíveis nas operações subsequentes do mesmo fluxo de trabalho.
A amostra de código a seguir define os dados a serem preservados:
my $result = { exit_code => 0, stdout => "", stderr => "", }; $result->{env}->{‘key1’} = ‘value1’; $result->{env}->{‘key2’} = ‘value2’; …. return $result
O código acima define dois pares de chave-valor, que estão disponíveis como entrada na operação subsequente. Os dois pares de chave-valor são acessíveis usando o seguinte código:
sub setENV { my ($self, $config) = @_; my $first_value = $config->{‘key1’}; my $second_value = $config->{‘key2’}; … }
=== Logging error messages Cada operação pode enviar mensagens de volta ao agente host, que exibe e armazena o conteúdo. Uma mensagem contém o nível da mensagem, um carimbo de data/hora e um texto da mensagem. As mensagens multilinha são suportadas.
Load the SnapCreator::Event Class: my $msgObj = new SnapCreator::Event(); my @message_a = ();
Use o msgObj para capturar uma mensagem usando o método coletar.
$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");
Aplicar mensagens ao objeto resultados:
$result->{message} = \@message_a;
Usando stubs plug-in
Plug-ins personalizados devem expor stubs de plug-in. Estes são métodos que o servidor SnapCenter chama, com base em um fluxo de trabalho.
Encaixe de encaixe | Opcional/obrigatório | Finalidade | ||
---|---|---|---|---|
Setenv |
obrigatório |
Este stub define o ambiente e o objeto de configuração. Qualquer análise ou manipulação de ambiente deve ser feita aqui. Cada vez que um stub é chamado, o stub setenv é chamado pouco antes. É necessário apenas para plug-ins estilo PERL. |
||
Versão |
Opcional |
Este esboço é usado para obter a versão do aplicativo. |
||
Descubra |
Opcional |
Este stub é usado para descobrir objetos de aplicativos como instância ou banco de dados hospedado no agente ou host. Espera-se que o plug-in retorne objetos de aplicativo descobertos em formato específico como parte da resposta. Este stub é usado apenas no caso de a aplicação ser integrada com o SnapDrive para Unix.
|
||
discovery_complete |
Opcional |
Este stub é usado para descobrir objetos de aplicativos como instância ou banco de dados hospedado no agente ou host. Espera-se que o plug-in retorne objetos de aplicativo descobertos em formato específico como parte da resposta. Este stub é usado apenas no caso de a aplicação ser integrada com o SnapDrive para Unix.
|
||
Quiesce |
obrigatório |
Este esboço é responsável por executar um quiesce, o que significa colocar o aplicativo em um estado em que você pode criar um Snapshot. Isso é chamado antes da operação Snapshot. Os metadados do aplicativo a serem retidos devem ser definidos como parte da resposta, que devem ser retornados durante operações subsequentes de clone ou restauração no Snapshot de storage correspondente na forma de parâmetros de configuração. |
||
Unquiesce |
obrigatório |
Este esboço é responsável por executar um unquiesce, o que significa colocar a aplicação em um estado normal. Isso é chamado depois que você cria uma captura Instantânea. |
||
clone_pre |
opcional |
Este esboço é responsável por executar tarefas de pré-clone. Isso pressupõe que você esteja usando a interface de clonagem do servidor SnapCenter integrada e é acionada ao executar uma operação de clone. |
||
clone_post |
opcional |
Este esboço é responsável por executar tarefas pós-clone. Isso pressupõe que você esteja usando a interface de clonagem do servidor SnapCenter integrada e é acionada somente quando executar operação de clone. |
||
restore_pre |
opcional |
Este esboço é responsável por executar tarefas de pré-restauração. Isso pressupõe que você esteja usando a interface de restauração interna do servidor SnapCenter e é acionado durante a execução da operação de restauração. |
||
Restaurar |
opcional |
Este esboço é responsável por executar tarefas de restauração de aplicativos. Isso pressupõe que você esteja usando a interface de restauração interna do servidor SnapCenter e só é acionado ao executar a operação de restauração. |
||
Limpeza |
opcional |
Este stub é responsável por executar a limpeza após operações de backup, restauração ou clone. A limpeza pode ocorrer durante a execução normal do fluxo de trabalho ou no caso de uma falha do fluxo de trabalho. Você pode inferir o nome do fluxo de trabalho sob o qual a limpeza é chamada consultando a AÇÃO do parâmetro de configuração, que pode ser backup, cloneVolAndLun ou fileOrVolRestore. O parâmetro de configuração ERROR_MESSAGE indica se houve algum erro durante a execução do fluxo de trabalho. Se ERROR_MESSAGE for definido e NÃO NULL, então a limpeza é chamada durante a execução de falha do fluxo de trabalho. |
||
app_version |
Opcional |
Este esboço é usado pelo SnapCenter para obter detalhes da versão do aplicativo gerenciados pelo plug-in. |
Informações sobre o pacote de plug-in
Cada plug-in deve ter as seguintes informações:
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 = ();
Operações
Você pode codificar várias operações como setenv, Version, quiesce e Unquiesce, que são suportadas pelos plug-ins personalizados.
Operação setenv
A operação setenv é necessária para plug-ins criados usando PERL. Pode definir o ENV e aceder facilmente aos parâmetros do plug-in.
sub setENV { my ($self, $obj) = @_; %config_h = %{$obj}; my $result = { exit_code => 0, stdout => "", stderr => "", }; return $result; }
Operação da versão
A operação versão retorna as informações da versão do aplicativo.
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; }
Operações de quiesce
A operação do quiesce executa a operação do quiesce do aplicativo nos recursos listados no parâmetro RECURSOS.
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; }
Anular a operação
A operação Unquiesce é necessária para desbloquear a aplicação. A lista de recursos está disponível no parâmetro RECURSOS.
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; }