Java 스타일
Java 사용자 지정 플러그인은 데이터베이스, 인스턴스 등과 같은 응용 프로그램과 직접 상호 작용합니다.
제한 사항
Java 프로그래밍 언어를 사용하여 플러그인을 개발하는 동안 알아야 할 몇 가지 제한 사항이 있습니다.
플러그인 특성 | Java 플러그인 |
---|---|
복잡성 |
낮음-중간 |
메모리 공간 |
최대 10-20MB |
다른 라이브러리에 대한 종속성 |
응용 프로그램 통신용 라이브러리 |
스레드 수입니다 |
1 |
스레드 런타임 |
1시간 미만 |
Java 제한에 대한 이유
SnapCenter 에이전트의 목표는 지속적이고 안전하고 강력한 애플리케이션 통합을 보장하는 것입니다. Java 플러그인을 지원함으로써 플러그인에서 메모리 누수 및 기타 원치 않는 문제를 일으킬 수 있습니다. 이러한 문제는 해결하기 어려우며, 특히 사용이 간편한 상태를 유지하는 것이 목표일 때 더욱 그렇습니다. 플러그인의 복잡성이 너무 복잡하지 않으면 개발자가 오류를 발생했을 가능성이 훨씬 줄어듭니다. Java 플러그인의 위험은 SnapCenter 에이전트와 동일한 JVM에서 실행된다는 것입니다. 플러그인이 충돌하거나 메모리를 누출하면 Agent에도 부정적인 영향을 미칠 수 있습니다.
지원되는 방법
방법 | 필수 요소입니다 | 설명 | 언제 누가 부르는가? |
---|---|---|---|
버전 |
예 |
플러그인 버전을 반환해야 합니다. |
SnapCenter 서버 또는 에이전트가 플러그인 버전을 요청합니다. |
정지 |
예 |
응용 프로그램에서 일시 중지를 수행해야 합니다. 대부분의 경우 이는 애플리케이션을 SnapCenter 서버가 백업을 생성할 수 있는 상태(예: 스냅샷 복사본)로 전환하는 것을 의미합니다. |
SnapCenter 서버가 스냅샷 복사본을 생성하거나 일반적으로 백업을 수행하기 전에 |
정지 해제 |
예 |
응용 프로그램에서 정지 해제를 수행해야 합니다. 대부분의 경우 이는 응용 프로그램을 다시 정상 작동 상태로 전환하는 것을 의미합니다. |
SnapCenter 서버가 스냅샷 복사본을 생성하거나 일반적인 백업을 수행한 후 |
정리 |
아니요 |
플러그인에서 청소해야 하는 모든 것을 정리하는 역할을 합니다. |
SnapCenter 서버의 워크플로가 완료되면(성공 또는 실패) |
ClonePre(사전 |
아니요 |
클론 작업을 수행하기 전에 수행해야 하는 작업을 수행해야 합니다. |
사용자가 "cloneVol" 또는 "cloneLun" 작업을 트리거하고 내장된 클론 생성 마법사(GUI/CLI)를 사용하는 경우 |
ClonePost |
아니요 |
클론 작업을 수행한 후 수행해야 하는 작업을 수행해야 합니다. |
사용자가 "cloneVol" 또는 "cloneLun" 작업을 트리거하고 내장된 클론 생성 마법사(GUI/CLI)를 사용하는 경우 |
RestorePre |
아니요 |
복구 작업을 호출하기 전에 수행해야 하는 작업을 수행해야 합니다. |
사용자가 복구 작업을 트리거하는 경우 |
복원 |
아니요 |
애플리케이션의 복원/복구를 수행합니다. |
사용자가 복구 작업을 트리거하는 경우 |
AppVersion(애플리케이션 버전) |
아니요 |
플러그인으로 관리되는 응용 프로그램 버전을 검색합니다. |
모든 워크플로우에서 백업/복원/클론과 같은 ASUP 데이터 수집의 일부 |
자습서
이 섹션에서는 Java 프로그래밍 언어를 사용하여 사용자 지정 플러그인을 만드는 방법에 대해 설명합니다.
일식을 설정합니다
-
Eclipse에서 새 Java 프로젝트 "TutorialPlugin"을 만듭니다
-
마침 * 을 클릭합니다
-
새 프로젝트 * → * 속성 * → * Java 빌드 경로 * → * 라이브러리 * → * 외부 jar 추가 * 를 마우스 오른쪽 버튼으로 클릭합니다
-
Host Agent의 ../lib/folder로 이동하여 jar scAgent-5.0-core.jar 및 common-5.0.jar 를 선택합니다
-
프로젝트를 선택하고 * src 폴더 * → * New * → * Package * 를 마우스 오른쪽 단추로 클릭한 다음 com.netapp.snapcreator.agent.plugin.TutorialPlugin 이름의 새 패키지를 만듭니다
-
새 패키지를 마우스 오른쪽 단추로 클릭하고 새로 만들기 → Java 클래스 를 선택합니다.
-
이름을 TutorialPlugin 으로 입력합니다.
-
수퍼클래스 찾아보기 단추를 클릭하고 "* AbstractPlugin"을 검색합니다. 하나의 결과만 표시되어야 합니다.
"AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin". .. 마침 * 을 클릭합니다. .. 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; } }
-
필요한 방법을 구현합니다
Quiesce, Unquiesce 및 version은 각 사용자 지정 Java 플러그인이 구현해야 하는 필수 메서드입니다.
다음은 플러그인 버전을 반환하는 버전 방법입니다.
@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; }
이 메서드는 Context 개체에 전달됩니다. 여기에는 Logger 및 Context Store 같은 여러 도우미뿐만 아니라 현재 작업에 대한 정보(workflow-ID, job-ID)도 포함됩니다. FINAL Logger = CONTEXT.getLogger(); 를 호출하여 로거를 가져올 수 있습니다. Logger 개체는 다른 로깅 프레임워크에서 알려진 유사한 메서드(예: logback)를 제공합니다. 결과 개체에서 종료 코드를 지정할 수도 있습니다. 이 예제에서는 문제가 없으므로 0이 반환됩니다. 다른 종료 코드는 다른 실패 시나리오에 매핑할 수 있습니다.
결과 개체 사용
결과 개체에는 다음 매개 변수가 포함됩니다.
매개 변수 | 기본값 | 설명 |
---|---|---|
구성 |
구성이 비어 있습니다 |
이 매개 변수는 구성 매개 변수를 서버로 다시 보내는 데 사용할 수 있습니다. 플러그인이 업데이트하려는 매개 변수가 될 수 있습니다. 이 변경 사항이 SnapCenter Server의 구성에 실제로 반영되는지 여부는 config의 app_CONF_persistency=Y 또는 N 매개 변수에 따라 달라집니다. |
ExitCode를 참조하십시오 |
0 |
작업의 상태를 나타냅니다. "0"은 작업이 성공적으로 실행되었음을 의미합니다. 다른 값은 오류 또는 경고를 나타냅니다. |
Stdout(스토우아웃) |
목록이 비어 있습니다 |
이 기능을 사용하여 stdout 메시지를 SnapCenter 서버로 다시 전송할 수 있습니다. |
Stderr |
목록이 비어 있습니다 |
stderr 메시지를 SnapCenter 서버로 다시 전송하는 데 사용할 수 있습니다. |
메시지 |
목록이 비어 있습니다 |
이 목록에는 플러그인에서 서버로 반환하려는 모든 메시지가 포함되어 있습니다. SnapCenter 서버는 이러한 메시지를 CLI 또는 GUI에 표시합니다. |
SnapCenter 에이전트는 빌더를 제공합니다 ("작성기 패턴")를 선택합니다. 따라서 다음과 같이 매우 간단하게 사용할 수 있습니다.
Result result = Result.builder() .withExitCode(0) .withStdout(stdout) .withStderr(stderr) .withConfig(config) .withMessages(logger.getMessages()) .build()
예를 들어, 종료 코드를 0으로 설정하고, stdout 및 stderr에 대한 목록을 설정하고, config 매개 변수를 설정하고, 서버로 다시 전송될 로그 메시지를 추가합니다. 모든 매개 변수가 필요하지 않으면 필요한 매개 변수만 보냅니다. 각 매개 변수에는 기본값이 있으므로 아래 코드에서 .withExitCode(0)를 제거하면 결과는 영향을 받지 않습니다.
Result result = Result.builder() .withExitCode(0) .withMessages(logger.getMessages()) .build();
버전
VersionResult 는 SnapCenter 서버에 플러그인 버전을 알립니다. 또한 result 에서 상속되므로 config, exitCode, stdout, stderr 및 messages 매개 변수가 포함됩니다.
매개 변수 | 기본값 | 설명 |
---|---|---|
전공 |
0 |
플러그인의 주 버전 필드입니다. |
경미합니다 |
0 |
플러그인의 부 버전 필드입니다. |
패치 |
0 |
플러그인의 패치 버전 필드입니다. |
빌드 |
0 |
플러그인의 빌드 버전 필드입니다. |
예를 들면 다음과 같습니다.
VersionResult result = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build();
컨텍스트 객체 사용
컨텍스트 개체는 다음 메서드를 제공합니다.
컨텍스트 방법입니다 | 목적 |
---|---|
문자열 getWorkflowId(); |
현재 워크플로에 대해 SnapCenter 서버에서 사용 중인 워크플로 ID를 반환합니다. |
구성 getconfig(); |
SnapCenter 서버에서 에이전트로 보내는 구성을 반환합니다. |
Workflow-ID입니다
workflow-ID는 SnapCenter 서버가 실행 중인 특정 워크플로를 참조하는 데 사용하는 ID입니다.
구성
이 개체에는 사용자가 SnapCenter 서버의 config에서 설정할 수 있는 매개 변수가 대부분 포함되어 있습니다. 그러나 보안상의 이유로 이러한 매개 변수 중 일부는 서버 측에서 필터링될 수 있습니다. 다음은 Config에 액세스하고 매개 변수를 검색하는 방법에 대한 예입니다.
final Config config = context.getConfig(); String myParameter = config.getParameter("PLUGIN_MANDATORY_PARAMETER");
""//myParameter"에 이제 SnapCenter 서버의 config에서 읽은 매개 변수가 포함되어 있습니다. config 매개 변수 키가 없으면 빈 문자열("")이 반환됩니다.
플러그인을 내보내는 중입니다
SnapCenter 호스트에 설치하려면 플러그인을 내보내야 합니다.
Eclipse에서 다음 작업을 수행합니다.
-
플러그인의 기본 패키지를 마우스 오른쪽 단추로 클릭합니다(예: com.netapp.snapcreator.agent.plugin.TutorialPlugin).
-
내보내기 * → * Java * → * JAR 파일 * 을 선택합니다
-
다음 * 을 클릭합니다.
-
다음 창에서 대상 jar 파일 경로를 지정합니다. tutorial_plugin.jar 플러그인의 기본 클래스는 TutorialPlugin.class 로 명명되며, 동일한 이름의 폴더에 플러그인을 추가해야 합니다.
플러그인이 추가 라이브러리에 종속된 경우 lib / 폴더를 만들 수 있습니다
플러그인이 종속된 jar 파일을 추가할 수 있습니다(예: 데이터베이스 드라이버). SnapCenter가 플러그인을 로드하면 이 폴더의 모든 jar 파일이 자동으로 해당 파일과 연관되고 classpath에 추가됩니다.