Estilo Java
Un complemento personalizado de Java interactúa directamente con una aplicación como base de datos, instancia, etc.
Limitaciones
Existen ciertas limitaciones que debe tener en cuenta al desarrollar un plug-in utilizando el lenguaje de programación Java.
Característica de plug-in | Plugin de Java |
---|---|
Complejidad |
De bajo a mediano |
Huella de la memoria |
Hasta 10-20 MB |
Dependencias con otras bibliotecas |
Bibliotecas para la comunicación de aplicaciones |
Número de subprocesos |
1 |
Tiempo de ejecución de subprocesos |
Menos de una hora |
Motivo de las limitaciones de Java
El objetivo del agente SnapCenter es garantizar una integración de aplicaciones sólida, segura y continua. Al admitir plug-ins de Java, es posible que los plug-ins introduzcan fugas de memoria y otros problemas no deseados. Esas cuestiones son difíciles de abordar, especialmente cuando el objetivo es mantener las cosas fáciles de usar. Si la complejidad de un complemento no es demasiado compleja, es mucho menos probable que los desarrolladores hubieran introducido los errores. El peligro del plugin de Java es que lo son Se está ejecutando en la misma JVM que el propio agente de SnapCenter. Cuando el plug-in se bloquea o pierde memoria, también puede afectar negativamente al agente.
Métodos admitidos
Método | Obligatorio | Descripción | ¿Cuándo y por quién? |
---|---|---|---|
Versión |
Sí |
Necesita obtener la versión del plugin. |
Por el servidor o agente de SnapCenter para solicitar la versión de el plugin. |
Modo de inactividad |
Sí |
Necesita realizar una pausa en la aplicación. En la mayoría de los casos, esto implica poner la aplicación en un estado donde SnapCenter Server puede crear un backup (por ejemplo, una copia Snapshot). |
Antes de que el servidor de SnapCenter cree una copia Snapshot o. realiza una copia de seguridad en general. |
Inactivación |
Sí |
Necesita realizar una reanudación de la aplicación. En la mayoría de los casos, esto significa volver a poner la aplicación en un estado de funcionamiento normal. |
Después de que el servidor de SnapCenter haya creado una copia snapshot o haya creado una copia snapshot realización de una copia de seguridad en general. |
Limpieza |
No |
Responsable de la limpieza de cualquier cosa que el plug-in necesite limpiar. |
Cuando termina un flujo de trabajo en el servidor SnapCenter (correctamente o con un error). |
ClonPree |
No |
Debe realizar las acciones que deben realizarse antes de realizar una operación de clonado. |
Cuando un usuario activa una acción "clonVol" o "clonLun" y utiliza el asistente de clonación integrado (GUI/CLI). |
ClonPost |
No |
Debe realizar las acciones que deben realizarse después de realizar una operación de clonado. |
Cuando un usuario activa una acción "clonVol" o "clonLun" y utiliza el asistente de clonación integrado (GUI/CLI). |
RestauradoPre |
No |
Debe ejecutar acciones que deben realizarse antes de solicitar la operación de restauración. |
Cuando un usuario activa una operación de restauración. |
Restaurar |
No |
Responsable de la restauración/recuperación de una aplicación. |
Cuando un usuario activa una operación de restauración. |
Versión de appVersion |
No |
Para recuperar la versión de la aplicación que gestiona el plugin. |
Como parte de la recogida de datos de ASUP en cada flujo de trabajo, como Backup/Restore/Clone. |
Tutorial
En esta sección se describe cómo crear un complemento personalizado mediante el lenguaje de programación Java.
Configuración de eclipse
-
Cree un nuevo proyecto Java "TutorialPlugin" en Eclipse
-
Haga clic en Finalizar
-
Haga clic con el botón derecho del ratón en nuevo proyecto → Propiedades → Java Build Path → Bibliotecas → Añadir tarros externos
-
Desplácese a la carpeta ../lib/ del agente anfitrión y seleccione Jarras scAgent-5.0-core.jar y common-5.0.jar
-
Seleccione el proyecto y haga clic con el botón derecho del ratón en la carpeta src → Nuevo → paquete y cree un nuevo paquete con el nombre com.netapp.snapcreator.agent.plugin.TutorialPlugin
-
Haga clic con el botón derecho del ratón en el nuevo paquete y seleccione Nuevo → clase Java.
-
Introduzca el nombre como TutorialPlugin.
-
Haga clic en el botón de exploración de la superclase y busque "*AbstractPlugin". Sólo debe aparecer un resultado:
"AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin". .. Haga clic en *Finalizar*. .. Clase 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; } }
-
Implementación de los métodos necesarios
La función de inactividad, la reanudación y la versión son métodos obligatorios que cada plugin de Java personalizado debe implementar.
A continuación, se muestra un método de versión para obtener la versión del plugin.
@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; }
El método se pasa en un objeto de contexto. Contiene varios asistentes, por ejemplo, un registrador y un almacén de contexto, así como información sobre la operación actual (Workflow-ID, Job-ID). Podemos obtener el registrador llamando al registrador de registros final = context.getLogger();. El objeto logger proporciona métodos similares conocidos por otros marcos de registro, por ejemplo, logback. En el objeto Result, también puede especificar el código de salida. En este ejemplo, se devuelve cero, ya que no hubo ningún problema. Otros códigos de salida pueden asignar a diferentes situaciones de fallo.
Utilizando el objeto Resultado
El objeto Result contiene los parámetros siguientes:
Parámetro | Predeterminado | Descripción |
---|---|---|
Gestión de |
Vacío gestión de |
Este parámetro se puede utilizar para enviar parámetros de configuración al servidor. TI pueden ser parámetros que el plugin desea actualizar. Si este cambio es Realmente se refleja en la configuración del servidor de SnapCenter depende de El parámetro APP_CONF_PERSISTENCY=Y o N en la configuración. |
ExitCode |
0 |
Indica el estado de la operación. Un “0” significa que la operación era se ha ejecutado correctamente. Otros valores indican errores o advertencias. |
Apedrear |
Vacío Lista |
Se puede utilizar para transmitir mensajes stdout de vuelta a la SnapCenter Servidor. |
Stderr |
Vacío Lista |
Se puede utilizar para transmitir mensajes stderr de vuelta a la SnapCenter Servidor. |
Mensajes |
Vacío Lista |
Esta lista contiene todos los mensajes a los que un plugin desea volver servidor. El servidor SnapCenter muestra esos mensajes en la CLI o en la GUI. |
El agente de SnapCenter proporciona constructores ("Patrón de creación") para todos sus tipos de resultados. Esto hace que su uso sea muy sencillo:
Result result = Result.builder() .withExitCode(0) .withStdout(stdout) .withStderr(stderr) .withConfig(config) .withMessages(logger.getMessages()) .build()
Por ejemplo, establezca el código de salida en 0, establezca las listas para stdout y stderr, defina los parámetros de configuración y también agregue los mensajes de registro que se enviarán de nuevo al servidor. Si no necesita todos los parámetros, envíe sólo los que necesite. Como cada parámetro tiene un valor predeterminado, si quita .witEExitCode(0) del código siguiente, el resultado no se verá afectado:
Result result = Result.builder() .withExitCode(0) .withMessages(logger.getMessages()) .build();
VersionResult
VersionResult informa a SnapCenter Server de la versión del plugin. Como también hereda De result, contiene los parámetros config, ExitCode, stdout, stderr y messages.
Parámetro | Predeterminado | Descripción |
---|---|---|
Importante |
0 |
Campo de versión principal del plugin. |
Menor |
0 |
Campo de versión secundaria del plugin. |
Parche |
0 |
Campo de versión de revisión del plugin. |
Cree |
0 |
Cree el campo de versión del plugin. |
Por ejemplo:
VersionResult result = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build();
Uso del objeto de contexto
El objeto Context proporciona los siguientes métodos:
Método de contexto | Específico |
---|---|
Cadena GetWorkflowId(); |
Devuelve el identificador de flujo de trabajo que está utilizando el servidor SnapCenter para el flujo de trabajo actual. |
Config getconfig(); |
Devuelve la configuración que se envía desde el servidor SnapCenter al Agente. |
ID del flujo de trabajo
El workflow-ID es el identificador que el servidor SnapCenter utiliza para hacer referencia a una ejecución específica flujo de trabajo.
Gestión de
Este objeto contiene (la mayoría) de los parámetros que un usuario puede definir en la configuración del Servidor SnapCenter. Sin embargo, debido a razones de seguridad, algunos de esos parámetros pueden obtener filtrado en el servidor. A continuación encontrará un ejemplo de cómo acceder a la configuración y recuperar un parámetro:
final Config config = context.getConfig(); String myParameter = config.getParameter("PLUGIN_MANDATORY_PARAMETER");
'// MyParameter' ahora contiene el parámetro leído de la configuración en el servidor SnapCenter Si una clave de parámetro de configuración no existe, devolverá una cadena vacía ('').
Exportando el plugin
Debe exportar el plugin para instalarlo en el host de SnapCenter.
En Eclipse, realice las siguientes tareas:
-
Haga clic con el botón derecho en el paquete base del plugin (en nuestro ejemplo) com.netapp.snapcreator.agent.plugin.TutorialPlugin).
-
Seleccione Exportar → Java → Archivo Jar
-
Haga clic en Siguiente.
-
En la siguiente ventana, especifique la ruta del archivo jar de destino: tutorial_plugin.jar La clase base del plugin se llama TutorialPlugin.class, el plugin se debe agregar a una carpeta con el mismo nombre.
Si el plugin depende de bibliotecas adicionales, puede crear la siguiente carpeta: Lib/
Puede agregar archivos JAR en los que depende el plugin (por ejemplo, un controlador de base de datos). Cuando SnapCenter carga el plugin, asocia automáticamente todos los archivos jar de esta carpeta con él y. los agrega a la classpath.