Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

ElementPathDescription
PluginDefinition/The root element for this plugin definition.
Name/PluginDefinitionThe name of the plugin, which appears on plugins page after upload.
PluginDisplayName/PluginDefinitionThe display name of the plugin, which appears on workflow page under workflow operations.
Description/PluginDefinitionA description for this plugin, which is displayed on the plugins page after upload.
TechnologyGroup/PluginDefinitionThe name of the technology that is plugin is for, which is displayed on the plugins page after upload.
SubTechnologyGroup/PluginDefinitionThe name of the sub-technology that is plugin is for, which is displayed on the plugins page after upload.
Vendor/PluginDefinitionThe name of the vendor which authored the plugin.
Type/PluginDefinitionPlugin type. Supported values are java and docker. Optional. Default is java.
ImageName/PluginDefinitionFull name of Docker image
MaxConfurrentThreads/PluginDefinitionThe number of concurrent threads which are allowed to execute plugin operations on any single endpoint. Default is -1, which means unlimited.
Version/PluginDefinitionThe version of the plugin.
ResourceTypes/PluginDefinitionA list of server/component types which are applicable for the underlying technology. This helps identify the endpoint to run a particular operation on. (e.g. for WebLogic - NodeManager, AdminServer, ManagedServer).
Resource/PluginDefinition/ResourceTypesA server/component types which is applicable for the underlying technology (e.g. NodeManager).
Operations/PluginDefinition/A list of operations supported by this plugin.
Operation/PluginDefinition/OperationsAn operation supported by this plugin.
Name/PluginDefinition/Operations/OperationThe name of the plugin operation.
Description/PluginDefinition/Operations/OperationA description for the plugin operation.
Target/PluginDefinition/Operations/OperationThe For Java, the package qualified name of the Java class which implements PluginProvider or extends AbstractPluginProvider.  For Docker, the command passed to image when the container is started.
PropertyKeys/PluginDefinition/Operations/OperationThe list of properties used by this plugin operation. See Property Definitions section for details.
PropertyKey/PluginDefinition/Operations/Operation/PropertyKeysA reference to a property used by this plugin operation. See Property Definitions section for details.
Inputs/PluginDefinition/Operations/OperationA list of inputs used by this plugin operation.
AllowsUserDefined/PluginDefinition/Operations/Operation/InputsWhether or not this plugin operation allows user defined inputs. User defined inputs are useful for low-level technology plugins (e.g. shell) where the user is essentially providing the implementation via source or scripting code.
Input/PluginDefinition/Operations/Operation/InputsAn input definition for this plugin operation.
Name/PluginDefinition/Operations/Operation/Inputs/InputThe name of the input. Must be alpha-numeric, and be free of whitespace or special characters (except underscore). This name may be used in shell scripts or Groovy scripts and therefore must adhere to these variable naming standards.
DataType/PluginDefinition/Operations/Operation/Inputs/InputThe data type of the input. Must be one of Boolean, Double, Integer, String.
Description/PluginDefinition/Operations/Operation/Inputs/InputThe description of the plugin input, which is displayed on the plugin step editor of the workflow.
DisplayName/PluginDefinition/Operations/Operation/Inputs/InputThe display name of the plugin input, which is displayed on the plugin step editor of the workflow.
DefaultValue/PluginDefinition/Operations/Operation/Inputs/InputThe default value for the plugin input if no value is specified by the user. This value will also be displayed by default on the plugin step editor of the workflow.
IsDefaultValueExpression/PluginDefinition/Operations/Operation/Inputs/InputIdentifies whether the default value for this input is an expression or a literal value, if specified.
SubDataType/PluginDefinition/Operations/Operation/Inputs/InputAn optional sub-datatype for this input. Valid options are DIRECTORY, JDBCURL, and URL. Setting the SubDataType adds additional validation when user enters value.
IsRequired/PluginDefinition/Operations/Operation/Inputs/InputIndicates whether this input is required or not. Required inputs are enforced by the plugin step editor and at runtime.
IsEncrypted/PluginDefinition/Operations/Operation/Inputs/InputIndicates whether the input is encrypted or not. Encrypted values are masked on the editor, and their values are not displayed in log files.
MinValue/PluginDefinition/Operations/Operation/Inputs/InputIdentifies the minimum required value for this input, and is enforced by the plugin step editor and at runtime. This value is only applicable for Integer and Double input types.
MaxValue/PluginDefinition/Operations/Operation/Inputs/InputIdentifies the maximum required value for this input, and is enforced by the plugin step editor and at runtime. This value is only applicable for Integer and Double input types.
ListData/PluginDefinition/Operations/Operation/Inputs/InputProvides a list of values for this input which may be selected by the user on the plugin step editor. When ListData is provided the plugin step editor will render the value using a drop down component.
DisplayRows/PluginDefinition/Operations/Operation/Inputs/InputDefines the height of the input field on the plugin step editor.
DisplayColumns/PluginDefinition/Operations/Operation/Inputs/InputDefines the length of the input field on the plugin step editor.
LengthPrecision/PluginDefinition/Operations/Operation/Inputs/InputDefines the required input length. Only applies to String datatype.
ValidatorScript/PluginDefinition/Operations/Operation/Inputs/InputAn optional Groovy script which is executed to determine whether this input's value is valid. The Value bind variable is set to the current value of this input, while every other input is available by it's name. The script must return true if validation passes, and false otherwise. When returning false, the variable ValidationMessage should be set to the message to display at runtime when validation fails.
IsMultiselect/PluginDefinition/Operations/Operation/Inputs/InputIf the ListData attribute is provided, the IsMultiselect identifies whether the user can select more than one value. As such, the input component for this input on the plugin step editor behaves accordingly.
Outputs/PluginDefinition/Operations/OperationA list of outputs returned by this plugin operation's execution.
AllowsUserDefined/PluginDefinition/Operations/Operation/OutputsWhether or not this plugin operation allows user defined outputs. User defined outputs are useful for low-level technology plugins (e.g. shell) where the user is essentially providing the implementation via source or scripting code.
Output/PluginDefinition/Operations/Operation/OutputsThe name of the output returned from this plugin operation.
EndPointSpecification/PluginDefinition/Operations/OperationDefines the strategy used for determining the endpoint or endpoints on which a plugin operation will execute on.
Selection/PluginDefinition/Operations/Operation/EndPointSpecificationDefines which endpoints will be seleted as candidates to execute on.
All/PluginDefinition/Operations/Operation/EndPointSpecification/SelectionIndicates that all endpoints associated to the target environment instance should be selected as execution candidates.
Resource/PluginDefinition/Operations/Operation/EndPointSpecification/SelectionIndicates that only endpoints having the given resource name should be selected as execution candidates.
Delegated/PluginDefinition/Operations/Operation/EndPointSpecification/SelectionIndicates that the endpoint selection is delegated to the workflow developer (within the plugin step editor). In this case, the plugin step editor will present options of All and Resource.
Execution/PluginDefinition/Operations/Operation/EndPointSpecificationOf the selected endpoint candidates, determines which one(s) to execute on.
Any/PluginDefinition/Operations/Operation/EndPointSpecification/ExecutionIndicates to execute on one of the selected endpoints (at random).
All/PluginDefinition/Operations/Operation/EndPointSpecification/ExecutionIndicates to execute on all of the selected endpoints.
Delegated/PluginDefinition/Operations/Operation/EndPointSpecification/ExecutionIndicates that execution strategy is delegated to the workflow developer (within the plugin step editor). In this case, the plugin step editor will present options of Any and All.
ConsumesArtifacts/PluginDefinition/Operations/OperationIdentifies whether this plugin operation consumes an artifact. Valid values are true, false, DELEGATED. In the case of DELEGATED, the plugin step editor will present a checkbox for the workflow developer to determine. When a plugin operation consumes artifacts, the associated artifacts from the artifact repository are copied to the artifact directory within the working directory on the endpoint prior to execution.
ProducesArtifacts/PluginDefinition/Operations/OperationIdentifies whether this plugin operation produces an artifact. Valid values are true, false, DELEGATED. In the case of DELEGATED, the plugin step editor will present a checkbox for the workflow developer to determine. When a plugin operation produces artifacts, the associated artifacts from the artifact directory on the endpoint are copied back to the server and stored in the artifact repository.

...

A plugin can be implemented as a Docker image (instead of Java implementation). In this case the "plugin.jar" file contains plugin.xml file only. The Docker image should be stored in a Docker repository accessible from an endpoint (Docker host or Kubernetes cluster) executing the plugin. The full name of the image including repository should be specified in ImageName element of plugin.xml file.

...

While executing a plugin operation on a Docker host, FlexDeploy runs the following command on the target endpoint:

Code Block
languagebash
themeEclipse
firstline1
titleDocker command structure
linenumberstrue
docker run -rm --env-file env.list --name STEP_NAME_WF_EXEC_ID  -v ${FD_WORKING_DIR}:/fd_working_dir FULL_IMAGE_NAME:PLUGIN_VERSION FD_PLUGIN_OPERATION_TARGET


While executing a plugin operation on a Kubernetes cluster, FlexDeploy runs the following commands

Code Block
languagebash
themeEclipse
firstline1
titleKubectl command structure
linenumberstrue
kubectl create -f pod.json
kubectl cp ${FD_WORKING_DIR} ${INTERNAL_POD_NAME}:/fd_working_dir
kubectl exec -it ${INTERNAL_POD_NAME} -- ${FD_PLUGIN_OPERATION_TARGET}
kubectl cp ${INTERNAL_POD_NAME}:/fd_working_dir ${FD_WORKING_DIR}
kubectl delete pod ${INTERNAL_POD_NAME}

Note that images utilizing an entrypoint will not have their entrypoints called by the Kubernetes framework.  This is to allow time for the working directory to be copied before execution starts.  

FlexDeploy passes into the Docker container or K8 Pod values of the following environment variables (through env.list filefor docker) or (pod.json for K8):

  • FD_WORKING_DIR
  • FD_ARTIFACTS_DIR
  • FD_TEMP_DIR
  • FD_INTERNAL_DIR
  • FD_TEST_RESULTS_DIR
  • FD_OBJECT_RESULTS_DIR
  • FD_TRANSFER_DIR
  • FD_ENVIRONMENT_CODE
  • FD_ENVIRONMENT_NAME
  • FD_INSTANCE_CODE
  • FD_INSTANCE_NAME
  • FD_PROJECT_NAME
  • FD_PLUGIN_INSTALL_DIR
  • FD_ENDPOINT_NAME
  • FD_ENDPOINT_ADDRESS
  • FD_PLUGIN
  • FD_PLUGIN_OPERATION
  • FD_RESULT_FILE_NAME
  • All plugin operation inputs 
  • All properties (by Name from metadata) for current project and environment instance

...

Once the plugin operation finishes its execution, the corresponding Docker container or Kubernetes POD will be removed.

Best Practices

...