Perl 기반 개발
PERL을 사용하여 플러그인을 개발하는 동안 특정 규칙을 따라야 합니다.
-
내용을 읽을 수 있어야 합니다
-
필수 작업 setenv, quiesce 및 unquiesce를 구현해야 합니다
-
결과를 에이전트로 다시 전달하려면 특정 구문을 사용해야 합니다
-
콘텐츠는 <plugin_name>.pm 파일로 저장해야 합니다
사용 가능한 작업은 입니다
-
설정
-
버전
-
정지
-
정지 해제
-
clone_pre, clone_post
-
restore_pre, 복구하십시오
-
정리
일반적인 플러그인 처리
결과 개체 사용
모든 사용자 지정 플러그인 작업은 결과 개체를 정의해야 합니다. 이 개체는 메시지, 종료 코드, stdout 및 stderr를 다시 호스트 에이전트로 보냅니다.
결과 개체:
my $result = {
exit_code => 0, stdout => "", stderr => "", };
결과 객체 반환:
return $result;
데이터 일관성 유지
정리 작업을 제외한 작업 간 데이터를 동일한 워크플로 실행의 일부로 보존할 수 있습니다. 이 작업은 키 값 쌍을 사용하여 수행됩니다. 데이터의 키 값 쌍은 결과 개체의 일부로 설정되며 동일한 워크플로의 후속 작업에서 사용 가능한 것으로 유지됩니다.
다음 코드 샘플은 보존할 데이터를 설정합니다.
my $result = { exit_code => 0, stdout => "", stderr => "", }; $result->{env}->{‘key1’} = ‘value1’; $result->{env}->{‘key2’} = ‘value2’; …. return $result
위의 코드는 두 개의 키 값 쌍을 설정하며, 이러한 키 값 쌍은 후속 작업에서 입력으로 사용할 수 있습니다. 다음 코드를 사용하여 두 키 값 쌍에 액세스할 수 있습니다.
sub setENV { my ($self, $config) = @_; my $first_value = $config->{‘key1’}; my $second_value = $config->{‘key2’}; … }
=== Logging error messages 각 작업은 콘텐츠를 표시하고 저장하는 호스트 에이전트로 메시지를 다시 보낼 수 있습니다. 메시지에는 메시지 수준, 타임스탬프 및 메시지 텍스트가 포함됩니다. 여러 줄 메시지가 지원됩니다.
Load the SnapCreator::Event Class: my $msgObj = new SnapCreator::Event(); my @message_a = ();
msgObj 를 사용하여 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");
결과 객체에 메시지 적용:
$result->{message} = \@message_a;
플러그인 스텁 사용
사용자 지정 플러그인은 플러그인 스텁을 노출해야 합니다. SnapCenter 서버가 워크플로에 따라 호출하는 메서드입니다.
플러그인 스텁 | 선택 사항/필수 요소입니다 | 목적 | ||
---|---|---|---|---|
설정 |
필수 요소입니다 |
이 스텁은 환경과 구성 개체를 설정합니다. 모든 환경 구문 분석 또는 처리는 여기에서 수행해야 합니다. 스텁이 호출될 때마다 setenv 스텁이 바로 전에 호출됩니다. PERL 스타일 플러그인에만 필요합니다. |
||
버전 |
선택 사항 |
이 스텁은 응용 프로그램 버전을 가져오는 데 사용됩니다. |
||
파악 |
선택 사항 |
이 스텁은 에이전트나 호스트에서 호스팅되는 인스턴스 또는 데이터베이스와 같은 애플리케이션 객체를 검색하는 데 사용됩니다. 플러그인은 응답의 일부로 검색된 애플리케이션 객체를 특정 형식으로 반환해야 합니다. 이 스텁은 응용 프로그램이 Unix용 SnapDrive와 통합된 경우에만 사용됩니다.
|
||
discovery_complete(검색 완료 |
선택 사항 |
이 스텁은 에이전트나 호스트에서 호스팅되는 인스턴스 또는 데이터베이스와 같은 애플리케이션 객체를 검색하는 데 사용됩니다. 플러그인은 응답의 일부로 검색된 애플리케이션 객체를 특정 형식으로 반환해야 합니다. 이 스텁은 응용 프로그램이 Unix용 SnapDrive와 통합된 경우에만 사용됩니다.
|
||
정지 |
필수 요소입니다 |
이 스텁은 일시 중지를 수행합니다. 즉, 스냅샷을 생성할 수 있는 상태로 애플리케이션을 배치합니다. 이를 스냅샷 작업 이전이라고 합니다. 보존할 애플리케이션의 메타데이터는 응답의 일부로 설정되어야 하며, 이 메타데이터는 구성 매개 변수의 형태로 해당 스토리지 스냅샷의 후속 클론 또는 복원 작업 중에 반환됩니다. |
||
정지 해제 |
필수 요소입니다 |
이 스텁은 중지 해제를 수행하는 역할을 하며, 이는 애플리케이션을 정상 상태로 전환하는 것을 의미합니다. 스냅샷을 생성한 후에 이 메시지가 호출됩니다. |
||
Clone_pre |
선택 사항 |
이 스텁은 사전 클론 작업을 수행합니다. 기본 제공 SnapCenter 서버 클론 생성 인터페이스를 사용 중이며 클론 작업을 수행할 때 트리거됩니다. |
||
clone_post |
선택 사항 |
이 스텁은 사후 클론 작업을 수행하는 역할을 합니다. 이는 사용자가 기본 제공 SnapCenter 서버 클론 생성 인터페이스를 사용하고 있다고 가정하고 클론 작업을 수행할 때만 트리거됩니다. |
||
restore_pre |
선택 사항 |
이 스텁은 PreRestore 작업을 수행하는 역할을 합니다. 이는 사용자가 기본 제공 SnapCenter 서버 복원 인터페이스를 사용하고 있으며 복원 작업을 수행하는 동안 트리거된다고 가정합니다. |
||
복원 |
선택 사항 |
이 스텁은 애플리케이션 복구 작업을 수행하는 역할을 합니다. 이는 사용자가 기본 제공 SnapCenter 서버 복원 인터페이스를 사용하고 있다고 가정하고 복원 작업을 수행할 때만 트리거됩니다. |
||
정리 |
선택 사항 |
이 스텁은 백업, 복구 또는 클론 작업 후 정리 작업을 수행합니다. 정리 작업은 정상적인 워크플로 실행 중 또는 워크플로 오류가 발생한 경우에 가능합니다. 백업, cloneVolAndLun 또는 fileOrVolRestore 등의 구성 매개 변수 작업을 참조하여 정리 작업이 호출되는 워크플로 이름을 유추할 수 있습니다. 구성 매개 변수 ERROR_MESSAGE는 워크플로우를 실행하는 동안 오류가 있는지 여부를 나타냅니다. ERROR_MESSAGE가 정의되어 있고 NULL이 아닌 경우 Workflow 장애 실행 중에 정리가 호출됩니다. |
||
APP_VERSION |
선택 사항 |
이 스텁은 SnapCenter에서 플러그인으로 관리되는 애플리케이션 버전 세부 정보를 가져오는 데 사용됩니다. |
플러그인 패키지 정보
모든 플러그인에는 다음 정보가 있어야 합니다.
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 = ();
운영
사용자 지정 플러그인에서 지원하는 setenv, Version, Quiesce 및 Unquiesce와 같은 다양한 작업을 코딩할 수 있습니다.
setenv 작동
PERL을 사용하여 만든 플러그인에는 setenv 작업이 필요합니다. ENV를 설정하고 플러그인 매개변수에 쉽게 액세스할 수 있습니다.
sub setENV { my ($self, $obj) = @_; %config_h = %{$obj}; my $result = { exit_code => 0, stdout => "", stderr => "", }; return $result; }
버전 작업
버전 작업은 응용 프로그램 버전 정보를 반환합니다.
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; }
중지 작업
Quiesce 작업은 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; }
작업 중지 해제
응용 프로그램 정지 해제를 위해서는 중지 해제 작업이 필요합니다. 리소스 목록은 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; }