简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

Java 模式

提供者 netapp-nsriram 下载此页面的 PDF

Java 自定义插件直接与数据库,实例等应用程序交互。

限制

在使用 Java 编程语言开发插件时,您应注意一些限制。

插件特征 Java 插件

复杂性

从低到中

内存占用空间

最多 10-20 MB

其他库的依赖关系

用于应用程序通信的库

线程数

1.

线程运行时

不到一小时

Java 限制的原因

SnapCenter 代理的目标是确保持续,安全且稳定可靠的应用程序集成。通过支持 Java 插件,插件可能会导致内存泄漏和其他不需要的问题。这些问题很难解决,尤其是在目标是让事情简单易用的情况下。如果插件的复杂性不是太复杂,开发人员可能会出现错误的可能性就会小得多。Java 插件的风险在于,它们与 SnapCenter 代理本身在同一 JVM 中运行。当插件崩溃或内存泄漏时,它也可能对代理产生负面影响。

支持的方法

方法 Required Description 何时被调用?由谁调用?

version

是的。

需要返回插件的版本。

由 SnapCenter 服务器或代理请求插件的版本。

暂停

是的。

需要对应用程序执行暂停。在大多数情况下,这意味着将应用程序置于 SnapCenter 服务器可以创建备份的状态(例如 Snapshot 副本)。

在 SnapCenter 服务器创建 Snapshot 副本或执行常规备份之前。

取消静默

是的。

需要对应用程序执行静默操作。在大多数情况下,这意味着将应用程序重新置于正常运行状态。

在 SnapCenter 服务器创建 Snapshot 副本或执行常规备份之后。

清理

负责清理插件需要清理的任何内容。

SnapCenter 服务器上的工作流完成后(成功或出现故障)。

clonePre

应在执行克隆操作之前执行需要执行的操作。

当用户触发 "cloneVol" 或 "cloneLun" 操作并使用内置克隆向导( GUI/CLI )时。

clonePost

应在执行克隆操作后执行需要执行的操作。

当用户触发 "cloneVol" 或 "cloneLun" 操作并使用内置克隆向导( GUI/CLI )时。

还原前

应在调用还原操作之前执行需要执行的操作。

用户触发还原操作时。

还原

负责执行应用程序的还原 / 恢复。

用户触发还原操作时。

应用程序版本

以检索插件管理的应用程序版本。

作为备份 / 还原 / 克隆等每个工作流中 ASUP 数据收集的一部分。

教程

本节介绍如何使用 Java 编程语言创建自定义插件。

设置 Eclipse

  1. 在 Eclipse 中创建一个新的 Java 项目 "TuttorialPlug"

  2. 单击 * 完成 * 。

  3. 右键单击 * 新项目 * → * 属性 * → * Java 构建路径 * → * 库 * → * 添加外部 JAR *

  4. 导航到主机代理的 ./lib/ 文件夹,然后选择 JAR scAgent-5.0-core.jar 和 common-5.0.jar

  5. 选择项目并右键单击 * 源文件夹 * → * 新增 * → * 软件包 * ,然后创建一个名为 com.netapp.snapcreator.agent.plugin.TutorialPlugin 的新软件包

  6. 右键单击新软件包并选择新建 → Java 类。

    1. 输入名称作为 TuttorialPlugin 。

    2. 单击超类浏览按钮并搜索 "* 抽象插件 " 。只应显示一个结果:

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

实施所需的方法

暂停,取消静默和版本是每个自定义 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;
}

方法在上下文对象中传递。其中包含多个帮助程序,例如 Logger 和上下文存储,以及有关当前操作的信息(工作流 ID ,作业 ID )。我们可以通过调用 final Logger logger = context.getLogger ()来获取此日志程序。logger 对象提供了其他日志记录框架中已知的类似方法,例如,登录回。在 result 对象中,您还可以指定退出代码。在此示例中,返回零,因为没有问题描述。其他退出代码可以映射到不同的故障情形。

正在使用结果对象

result 对象包含以下参数:

参数 Default Description

配置

空配置

此参数可用于将配置参数发送回服务器。它可以是插件要更新的参数。此更改是否实际反映在 SnapCenter 服务器的配置中取决于配置中的 APP_CONF_persistency=Y 或 N 参数。

ExitCode

0

指示操作的状态。"0" 表示操作已成功执行。其他值表示错误或警告。

标准输出

空列表

这可用于将 stdout 消息传输回 SnapCenter 服务器。

标准

空列表

这可用于将 stderr 消息传输回 SnapCenter 服务器。

消息

空列表

此列表包含插件要返回到服务器的所有消息。SnapCenter 服务器会在命令行界面或图形用户界面中显示这些消息。

SnapCenter 代理可提供构建程序 ("构建程序模式")。这使得使用它们变得非常简单:

Result result = Result.builder()
                    .withExitCode(0)
                    .withStdout(stdout)
                    .withStderr(stderr)
                    .withConfig(config)
                    .withMessages(logger.getMessages())
                    .build()

例如,将退出代码设置为 0 ,为 stdout 和 stderr 设置列表,设置配置参数,并附加要发送回服务器的日志消息。如果您不需要所有参数,请仅发送所需的参数。由于每个参数都有一个默认值,因此,如果从以下代码中删除 .withExitCode ( 0 ),则结果不会受到影响:

Result result = Result.builder()
                      .withExitCode(0)
                      .withMessages(logger.getMessages())
                      .build();

版本结果

VersionResult 会向 SnapCenter 服务器通知插件版本。由于它还会从结果继承,因此它包含 config , exitCode , stdout , stderr 和 messages 参数。

参数 Default Description

major

0

插件的主要版本字段。

次要

0

插件的次要版本字段。

patch

0

插件的修补程序版本字段。

build

0

此插件的 Build version 字段。

例如:

VersionResult result = VersionResult.builder()
                                  .withMajor(1)
                                  .withMinor(0)
                                  .withPatch(0)
                                  .withBuild(0)
                                  .build();

使用上下文对象

上下文对象提供了以下方法:

上下文方法 目的

字符串 getWorkflowId( );

返回 SnapCenter 服务器在当前工作流中使用的工作流 ID 。

config getconfig( );

返回正在从 SnapCenter 服务器发送到代理的配置。

工作流 ID

工作流 ID 是 SnapCenter 服务器用于引用特定正在运行的工作流的 ID 。

配置

此对象包含(大多数)用户可在 SnapCenter 服务器的配置中设置的参数。但是,由于安全原因,其中某些参数可能会在服务器端进行筛选。以下是有关如何访问 Config 并检索参数的示例:

final Config config = context.getConfig();
String myParameter =
config.getParameter("PLUGIN_MANDATORY_PARAMETER");

现在, "/" myParameter " 包含从 SnapCenter 服务器上的配置中读取的参数如果配置参数密钥不存在,则它将返回空字符串( "" )。

导出插件

要在 SnapCenter 主机上安装此插件,必须导出此插件。

在 Eclipse 中,执行以下任务:

  1. 右键单击插件的基础软件包(在我们的示例 com.netapp.snapcreator.agent.plugin.TutorialPlugin 中)。

  2. 选择 * 导出 * → * Java * → * JAR 文件 *

  3. 单击 * 下一步 * 。

  4. 在以下窗口中,指定目标 JAR 文件路径: tutorial_plugin.jar 插件的基础类名为 TuttorialPlugin 。 class ,必须将此插件添加到同名文件夹中。

如果插件依赖于其他库,则可以创建以下文件夹: lib/

您可以添加与插件相关的 JAR 文件(例如数据库驱动程序)。当 SnapCenter 加载此插件时,它会自动将此文件夹中的所有 JAR 文件与其关联,并将其添加到类路径中。