<?xml version="1.0" encoding="UTF-8"?>
<!--
- Licensed Materials - Property of IBM Corp.
- IBM UrbanCode Build
- IBM UrbanCode Deploy
- IBM UrbanCode Release
- IBM AnthillPro
- (c) Copyright IBM Corporation 2002, 2017. All Rights Reserved.
-
- U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by
- GSA ADP Schedule Contract with IBM Corp.
-->
<plugin xmlns='http://www.urbancode.com/PluginXMLSchema_v1' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
  <header>
    <identifier id='com.urbancode.air.plugin.f5' version='18' name='F5' />
    <description>The F5 content switch plug-in includes steps for working with F5 nodes, pools, iRules, and data groups.</description>
    <tag>Infrastructure/Load Balancing/F5</tag>
  </header>
  <step-type name='Disable Pool Member'>
    <description>Disable a node in a specified pool.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, for the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='poolName' required='true'>
        <property-ui type='textAreaBox'
                     label='Pool Names'
                     description='The name of the pool that contains the node to disable. Separate multiple pool names with commas or newline characters.' />
      </property>
      <property name='isPoolGlobal'>
        <property-ui type='checkBox'
                     label='Pools are global'
                     description='Select if pools are global. Clear if pools are local.' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to disable. For example: WorkerNode. Separate multiple node names with commas or newline characters.
        There must be a 1-to-1 mapping of Node Names to Node Ports.
        Example Node Names: Node1, Node2, Node3
        Example Node Ports: 80, 80, 81' />
      </property>
      <property name='nodePort' required='true'>
        <property-ui type='textAreaBox' label='Node Ports' description='The port of the node to disable. For example: 80. Separate multiple node ports with commas or newline characters.
        There must be a 1-to-1 mapping of Node Names to Node Ports.
        Example Node Names: Node1, Node2, Node3
        Example Node Ports: 80, 80, 81' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='forceOffline'>
        <property-ui type='checkBox' label='Force node offline' description='Select to force the node offline.' />
      </property>
      <property name='doWaitForConnectionClose'>
        <property-ui type='checkBox' label='Wait for existing connections' description='Select to wait for all current connections to close after disabling the node in the pool and before completing the step.' />
      </property>
      <property name='sleepInterval'>
        <property-ui type='textBox' label='Sleep interval(sec)' description='The number of seconds to wait between active connections checks. Used only if "Wait for existing connections" is selected.' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_disable_pool_member.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Disable Node'>
    <description>Disable a specified node for all pools and ports.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. The protocol and port number are optional. For example: https://f5.example.com:8443 or f5.example.com or 192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, for the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to disable. For example: WorkerNode. Separate multiple node names with commas or newline characters.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='forceOffline'>
        <property-ui type='checkBox' label='Force node offline' description='Select to force the node offline, close connections, and disable monitors.' />
      </property>
      <property name='waitForConnections'>
        <property-ui type='textBox' label='Time to wait for existing connections' description='Specify the amount of time to wait for connections to close before disabling the node in the pool. If 0 or blank, the node is disabled without waiting.' />
      </property>
      <property name='sleepInterval'>
        <property-ui type='textBox' label='Sleep interval(sec)' description='The number of seconds to wait between active connections checks. Used only if "Time to wait for existing connections" is specified.' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_disable_node.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Confirm Enabled Node'>
    <description>This step succeeds if the node is online and enabled. The step fails if the node is offline or disabled.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to check. For example: WorkerNode. Separate multiple node names with commas or newline characters' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_confirm_enabled_node.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Confirm Disabled Node'>
    <description>This step succeeds if the node is offline and disabled. The step fails if the node is online or enabled.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to check. For example: WorkerNode. Separate multiple node names with commas or newline characters.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='checkAvailability'>
        <property-ui type='checkBox'
                     label='Include Availability Status'
                     description='Select to confirm the disabled availability status of the node.' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_confirm_disabled_node.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Enable Pool Member'>
    <description>Enable a node in a specified pool.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='The connection timeout, in seconds, for the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='poolName' required='true'>
        <property-ui type='textAreaBox'
                     label='Pool Names'
                     description='The name of the pool where the Node is located. Separate multiple pool names with a comma or new line. ' />
      </property>
      <property name='isPoolGlobal'>
        <property-ui type='checkBox'
                     label='Pools are global'
                     description='Select if pools are global. Clear if pools are local.' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to enable. For example: WorkerNode. Separate multiple node names with commas or newline characters.
        There must be a 1-to-1 mapping of Node Names to Node Ports.
        Example Node Names: Node1, Node2, Node3
        Example Node Ports: 80, 80, 81' />
      </property>
      <property name='nodePort' required='true'>
        <property-ui type='textAreaBox' label='Node Ports' description='The port of the node to enable. For example: 80. Separate multiple node ports with commas or newline characters.
        There must be a 1-to-1 mapping of Node Names to Node Ports.
        Example Node Names: Node1, Node2, Node3
        Example Node Ports: 80, 80, 81' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textAreaBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_enable_pool_member.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Enable Node'>
    <description>Enable a specified node for all pools and ports.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. The protocol and port number are optional. For example: https://f5.example.com:8443 or f5.example.com or 192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to enable. For example: WorkerNode. Separate multiple node names with commas or newline characters.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;lib/iControl.jar;lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_enable_node.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Add Pool Member'>
    <description>Add a node to a pool.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='poolName' required='true'>
        <property-ui type='textAreaBox' label='Pool Names' description='The name of the pool to add the node to. Separate multiple pool names with commas or newline characters.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to add to the pool. For example: WorkerNode. Separate multiple node names with commas or newline characters.
        There must be a 1-to-1 mapping of Node Names to Node Ports.
        Example Node Names: Node1, Node2, Node3
        Example Node Ports: 80, 80, 81' />
      </property>
      <property name='nodePort' required='true'>
        <property-ui type='textAreaBox' label='Node Ports' description='The port of the node to add to the pool. For example: 80. Separate multiple node ports with commas or newline characters.
        There must be a 1-to-1 mapping of Node Names to Node Ports.
        Example Node Names: Node1, Node2, Node3
        Example Node Ports: 80, 80, 81' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_add_pool_member.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Remove Pool Member'>
    <description>Remove a node from a pool.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='poolName' required='true'>
        <property-ui type='textAreaBox' label='Pool Names' description='The name of the pool to remove the node from. Separate multiple pool names with commas or newline characters.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to remove. For example: WorkerNode. Separate multiple node names with commas or newline characters.
        There must be a 1-to-1 mapping of Node Names to Node Ports.
        Example Node Names: Node1, Node2, Node3
        Example Node Ports: 80, 80, 81' />
      </property>
      <property name='nodePort' required='true'>
        <property-ui type='textAreaBox' label='Node Ports' description='The port of the node to remove from the pool. For example: 80. Separate multiple node ports with commas or newline characters.
        There must be a 1-to-1 mapping of Node Names to Node Ports.
        Example Node Names: Node1, Node2, Node3
        Example Node Ports: 80, 80, 81' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_remove_pool_member.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Create Pool'>
    <description>Create a pool.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='poolName' required='true'>
        <property-ui type='textBox' label='Pool Name' description='The name of the pool to create.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition to create the pool on. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='lbMethod' required='true'>
        <property-ui type='selectBox' label='Load Balancing Method' description='Select the load-balancing method for the pool from the list.' />
        <value label='Round Robin'>LB_METHOD_ROUND_ROBIN</value>
        <value label='Ratio (member)'>LB_METHOD_RATIO_MEMBER</value>
        <value label='Least Connections (member)'>LB_METHOD_LEAST_CONNECTION_MEMBER</value>
        <value label='Observer (member)'>LB_METHOD_OBSERVED_MEMBER</value>
        <value label='Predictive (member)'>LB_METHOD_PREDICTIVE_MEMBER</value>
        <value label='Ratio (node)'>LB_METHOD_RATIO_NODE_ADDRESS</value>
        <value label='Least Connections (node)'>LB_METHOD_LEAST_CONNECTION_NODE_ADDRESS</value>
        <value label='Fastest (node)'>LB_METHOD_FASTEST_NODE_ADDRESS</value>
        <value label='Observed (node)'>LB_METHOD_OBSERVED_NODE_ADDRESS</value>
        <value label='Predictive (node)'>LB_METHOD_PREDICTIVE_NODE_ADDRESS</value>
        <value label='Dynamic Ratio (node)'>LB_METHOD_DYNAMIC_RATIO</value>
        <value label='Fastest (application)'>LB_METHOD_FASTEST_APP_RESPONSE</value>
        <value label='Least Sessions'>LB_METHOD_LEAST_SESSIONS</value>
        <value label='Dynamic Ratio (member)'>LB_METHOD_DYNAMIC_RATIO_MEMBER</value>
        <value label='L3 Address'>LB_METHOD_L3_ADDR</value>
      </property>
      <property name='monitors'>
        <property-ui type='textAreaBox' label='Monitors' description='A list of monitors to assign to the pool, separated by commas or newline characters.' />
      </property>
      <property name='allowSnat' required='true'>
        <property-ui type='selectBox' label='Allow SNAT' description='Select to allow secure network address translation (SNAT).' />
        <value label='Yes'>STATE_ENABLED</value>
        <value label='No'>STATE_DISABLED</value>
      </property>
      <property name='allowNat' required='true'>
        <property-ui type='selectBox' label='Allow NAT' description='Select to allow network address translation (NAT).' />
        <value label='Yes'>STATE_ENABLED</value>
        <value label='No'>STATE_DISABLED</value>
      </property>
      <property name='serviceDownAction' required='true'>
        <property-ui type='selectBox' label='Action On Service Down' description='Select the action to take when a pool member is unavailable.' />
        <value label='None'>SERVICE_DOWN_ACTION_NONE</value>
        <value label='Reset'>SERVICE_DOWN_ACTION_RESET</value>
        <value label='Drop'>SERVICE_DOWN_ACTION_DROP</value>
        <value label='Reselect'>SERVICE_DOWN_ACTION_RESELECT</value>
      </property>
      <property name='slowRampTime' required='true'>
        <property-ui type='textBox' label='Slow Ramp Time' description='Specify the interval, in seconds, that a pool member is in slow ramp mode.' />
      </property>
      <property name='clientIpTos'>
        <property-ui type='textBox' label='IP ToS to Client' description='Specify the outbound Type of Service (ToS) level for the pool. Leave blank to use the default value.' />
      </property>
      <property name='serverIpTos'>
        <property-ui type='textBox' label='IP ToS to Server' description='Specify the inbound Type of Service (ToS) level for the pool. Leave blank to use the default value.' />
      </property>
      <property name='clientLinkQos'>
        <property-ui type='textBox' label='Link QoS to Client' description='Specify the outbound Level of Service (LoS) level for the pool. Leave blank to use the default value.' />
      </property>
      <property name='serverLinkQos'>
        <property-ui type='textBox' label='Link QoS to Server' description='Specify the inbound Level of Service (LoS) level for the pool. Leave blank to use the default value.' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_create_pool.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Delete Pool'>
    <description>Delete a pool.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='poolName' required='true'>
        <property-ui type='textBox' label='Pool Name' description='The name of the pool to delete.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the pool resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_delete_pool.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Create Node'>
    <description>Create a node.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection and monitor timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to create. For example: WorkerNode. Separate multiple node names with commas or newline characters.' />
      </property>
      <property name='nodeAddress' required='true'>
        <property-ui type='textAreaBox' label='Node Addresses' description='The address of the node to create. For example: 192.0.2.1. Separate multiple node addresses with commas or newline characters.' />
      </property>
      <property name='monitors'>
        <property-ui type='textAreaBox' label='Monitors' description='A list of monitors to assign to the node, separated by commas or newline characters. For example: icmp.' />
      </property>
      <property name='nodeConnection' required='true'>
        <property-ui type='textBox' label='Node Connection Limits' description='The node connection limit. Separate multiple node connection limits with commas or newline characters.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_create_node.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Delete Node'>
    <description>Delete a node.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='nodeName' required='true'>
        <property-ui type='textAreaBox' label='Node Names' description='The name of the node to delete. For example: WorkerNode. Separate multiple node names with commas or newline characters.' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the node resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_delete_node.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Create iRule'>
    <description>Create the specified iRule</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRule resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='iRuleName' required='true'>
        <property-ui type='textBox' label='iRule Name' description='The name of the iRule to create.' />
      </property>
      <property name='definition' required='true'>
        <property-ui type='textAreaBox' label='iRule Definition' description='Enter text that defines an iRule, or the full path to an iRule definition file. If you specify a file, the file is read and uploaded as the iRule definition.' />
      </property>
      <property name='failStrategy'>
        <property-ui type='selectBox' label='If iRule exists' description='Select the action to take if an iRule with the same name already exists.' />
        <value label='Warn Only'>WARN_ONLY</value>
        <value label='Fail Fast'>FAIL_FAST</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_create_iRule.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Delete iRule'>
    <description>Delete an iRule</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRule resides. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='iRuleName' required='true'>
        <property-ui type='textBox' label='iRule Name' description='The name of the iRule to delete.' />
      </property>
      <property name='failStrategy'>
        <property-ui type='selectBox' label='If iRule exists' description='Select the action to take if an iRule with the specified name does not exist.' />
        <value label='Warn Only'>WARN_ONLY</value>
        <value label='Fail Fast'>FAIL_FAST</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_delete_iRule.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Get iRule Statistics'>
    <description>Retrieve statistics for an iRule.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRules reside. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='iRuleNames'>
        <property-ui type='textAreaBox' label='iRule Names' description='A list of iRule names to retrieve statistics for. Separate multiple iRule names with commas or newline characters. If blank, all iRule statistics are returned.' />
      </property>
      <property name='failStrategy'>
        <property-ui type='selectBox' label='If iRule does not exist' description='Select the action to take if an iRule with the specified name does not exist.' />
        <value label='Warn Only'>WARN_ONLY</value>
        <value label='Fail'>FAIL</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_get_iRule_statistics.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Create Address Data Group'>
    <description>Create or modify an address data group. A data group is also known as a class.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRules reside. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='name' required='true'>
        <property-ui type='textBox' label='Address Data Group Name' description='The name of the address data group to create.' />
      </property>
      <property name='ipAddresses' required='true'>
        <property-ui type='textAreaBox' label='IP Address List' description='The IP addresses of the address data group members. Separate multiple IP addresses with commas or newline characters.' />
      </property>
      <property name='netmasks' required='true'>
        <property-ui type='textAreaBox' label='Netmask List' description='The netmasks of the address data group members. Separate multiple netmasks with commas or newline characters. Specify 255.255.255.255 as the default if netmask is unknown.' />
      </property>
      <property name='failStrategy'>
        <property-ui type='selectBox' label='If Data Group already exists' description='Select the action to take if a data group with the same name already exists.' />
        <value label='Warn Only'>WARN_ONLY</value>
        <value label='Overwrite'>OVERWRITE</value>
        <value label='Fail'>FAIL</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_create_address_class.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Create External Data Group'>
    <description>Create an external data group from a file in the data group file list. A data group is also known as a class.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRules reside. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='name' required='true'>
        <property-ui type='textBox' label='External Data Group Name' description='The name of the external data group to create.' />
      </property>
      <property name='file_name' required='true'>
        <property-ui type='textBox' label='File Name' description='The data group file object for the specified data group. This file must exist in the data group file list in F5.' />
      </property>
      <property name='file_format'>
        <property-ui type='selectBox' label='File Format Type' description='Select the file format for the data group.' />
        <value label='Default'>DEFAULT</value>
        <value label='Unknown'>FILE_FORMAT_UNKNOWN</value>
        <value label='CSV'>FILE_FORMAT_CSV</value>
      </property>
      <property name='file_mode'>
        <property-ui type='selectBox' label='File Mode' description='Select the file mode for the data group.' />
        <value label='Default'>DEFAULT</value>
        <!-- <value label='Unknown'>FILE_MODE_UNKNOWN</value> -->
        <value label='Read'>FILE_MODE_TYPE_READ</value>
        <value label='Read Write'>FILE_MODE_TYPE_READ_WRITE</value>
      </property>
      <property name='failStrategy'>
        <property-ui type='selectBox' label='If Data Group already exists' description='Select the action to take if a data group with the same name already exists.' />
        <value label='Warn Only'>WARN_ONLY</value>
        <value label='Fail'>FAIL</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_create_external_class.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Modify External Data Group'>
    <description>Modify the file format and mode of an external data group. A data group is also known as a class.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRules reside. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='name' required='true'>
        <property-ui type='textBox' label='External Data Group Name' description='The name of the external data group to modify.' />
      </property>
      <property name='file_format'>
        <property-ui type='selectBox' label='File Format Type' description='Select the file format for the data group.' />
        <value label='Default'>DEFAULT</value>
        <value label='Unknown'>FILE_FORMAT_UNKNOWN</value>
        <value label='CSV'>FILE_FORMAT_CSV</value>
      </property>
      <property name='file_mode'>
        <property-ui type='selectBox' label='File Mode' description='Select the file mode for the data group.' />
        <value label='Default'>DEFAULT</value>
        <!-- <value label='Unknown'>FILE_MODE_UNKNOWN</value> -->
        <value label='Read'>FILE_MODE_TYPE_READ</value>
        <value label='Read Write'>FILE_MODE_TYPE_READ_WRITE</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_modify_external_class.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Create String Data Group'>
    <description>Create or modify a string data group. A data group is also known as a class.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRules reside. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='name' required='true'>
        <property-ui type='textBox' label='String Data Group Name' description='The name of the string data group to create.' />
      </property>
      <property name='members'>
        <property-ui type='textAreaBox' label='String Member List' description='The member list associated with the string data group. Separate multiple members with commas or newline characters.' />
      </property>
      <property name='failStrategy'>
        <property-ui type='selectBox' label='If Data Group already exists' description='Select the action to take if a data group with the same name already exists.' />
        <value label='Warn Only'>WARN_ONLY</value>
        <value label='Overwrite'>OVERWRITE</value>
        <value label='Fail'>FAIL</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_create_string_class.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Create Value Data Group'>
    <description>Create or modify a value data group. A data group is also known as a class. A value is also known as an integer.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRules reside. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='name' required='true'>
        <property-ui type='textBox' label='Value Data Group Name' description='The name of the value data group to create.' />
      </property>
      <property name='members'>
        <property-ui type='textAreaBox' label='Value Member List' description='The list of integer members associated with the value data group. Separate multiple integers with commas or newline characters.' />
      </property>
      <property name='failStrategy'>
        <property-ui type='selectBox' label='If Data Group already exists' description='Select the action to take if a data group with the same name already exists.' />
        <value label='Warn Only'>WARN_ONLY</value>
        <value label='Overwrite'>OVERWRITE</value>
        <value label='Fail'>FAIL</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_create_value_class.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>

  <step-type name='Delete Data Group'>
    <description>Delete a data group. A data group is also known as a class.</description>
    <properties>
      <property name='serverURL' required='true'>
        <property-ui type='textBox' label='Server URL' description='The URL of the F5 appliance. This can be the IP address or domain name of the appliance, including the protocol and port number. For example: https://f5.example.com:8443 or http://192.0.2.1:8443.' default-value='${p:resource/F5/serverURL}' />
      </property>
      <property name='username' required='true'>
        <property-ui type='textBox' label='User Name' description='The username for the F5 appliance.' default-value='${p:resource/F5/username}' />
      </property>
      <property name='password' required='true'>
        <property-ui type='secureBox' label='Password' description='The password for the F5 appliance.' default-value='${p:resource/F5/password}' />
      </property>
      <property name='timeout' required='true'>
        <property-ui type='textBox' label='Timeout' description='Connection timeout, in seconds, to the F5 appliance.' default-value='${p:resource/F5/timeout}' />
      </property>
      <property name='partition' required='true'>
        <property-ui type='textBox' label='Partition' description='The partition where the iRules reside. Typically, accept the default value of "Common" unless you manage multiple partitions.' default-value='Common' />
      </property>
      <property name='name' required='true'>
        <property-ui type='textBox' label='Data Group Name' description='The name of the data group to delete.' />
      </property>
      <property name='failStrategy'>
        <property-ui type='selectBox' label='If Class does not exist' description='Select the action to take if a class with the specified name does not exist.' />
        <value label='Warn Only'>WARN_ONLY</value>
        <value label='Fail'>FAIL</value>
      </property>
      <property name='f5JarLocation'>
        <property-ui hidden='true' type='textBox' label='iControl Jar Location' description='Full path to the iControl.jar file' default-value='${PLUGIN_HOME}/lib/iControl.jar'/>
      </property>
    </properties>
    <post-processing><![CDATA[
 if (properties.get("exitCode") != 0) {
 properties.put(new java.lang.String("Status"), new java.lang.String("Failure"));
 }
 else {
 properties.put("Status", "Success");
 }
 ]]></post-processing>
    <command program='${GROOVY_HOME}/bin/groovy'>
      <arg value='-cp' />
      <arg path='.;classes;${p:f5JarLocation};lib/axis-1.4.jar;lib/commons-logging.jar;lib/axis-saaj-1.4.jar;lib/axis-jaxrpc-1.4.jar;lib/axis-wsdl4j-1.5.1.jar;lib/commons-discovery-0.2.jar;lib/securedata.jar;lib/jettison-1.1.jar;lib/commons-codec.jar;lib/CommonsUtil.jar' />
      <arg file='f5_delete_class.groovy' />
      <arg file='${PLUGIN_INPUT_PROPS}' />
      <arg file='${PLUGIN_OUTPUT_PROPS}' />
    </command>
  </step-type>
</plugin>
