Skip to main content
이 제품의 최신 릴리즈를 사용할 수 있습니다.
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

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 프로그래밍 언어를 사용하여 사용자 지정 플러그인을 만드는 방법에 대해 설명합니다.

일식을 설정합니다

  1. Eclipse에서 새 Java 프로젝트 "TutorialPlugin"을 만듭니다

  2. 마침 * 을 클릭합니다

  3. 새 프로젝트 * → * 속성 * → * Java 빌드 경로 * → * 라이브러리 * → * 외부 jar 추가 * 를 마우스 오른쪽 버튼으로 클릭합니다

  4. Host Agent의 ../lib/folder로 이동하여 jar scAgent-5.0-core.jar 및 common-5.0.jar 를 선택합니다

  5. 프로젝트를 선택하고 * src 폴더 * → * New * → * Package * 를 마우스 오른쪽 단추로 클릭한 다음 com.netapp.snapcreator.agent.plugin.TutorialPlugin 이름의 새 패키지를 만듭니다

  6. 새 패키지를 마우스 오른쪽 단추로 클릭하고 새로 만들기 → Java 클래스 를 선택합니다.

    1. 이름을 TutorialPlugin 으로 입력합니다.

    2. 수퍼클래스 찾아보기 단추를 클릭하고 "* 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에서 다음 작업을 수행합니다.

  1. 플러그인의 기본 패키지를 마우스 오른쪽 단추로 클릭합니다(예: com.netapp.snapcreator.agent.plugin.TutorialPlugin).

  2. 내보내기 * → * Java * → * JAR 파일 * 을 선택합니다

  3. 다음 * 을 클릭합니다.

  4. 다음 창에서 대상 jar 파일 경로를 지정합니다. tutorial_plugin.jar 플러그인의 기본 클래스는 TutorialPlugin.class 로 명명되며, 동일한 이름의 폴더에 플러그인을 추가해야 합니다.

플러그인이 추가 라이브러리에 종속된 경우 lib / 폴더를 만들 수 있습니다

플러그인이 종속된 jar 파일을 추가할 수 있습니다(예: 데이터베이스 드라이버). SnapCenter가 플러그인을 로드하면 이 폴더의 모든 jar 파일이 자동으로 해당 파일과 연관되고 classpath에 추가됩니다.