Skip to content

Usage

List of All Commands:

  • Download a Generic Process
    Syntax:
    download-generic-process <username> <password> <server-url> <process-name> <output-file>
    Example:

    download-generic-process myuser mypassword https://url:8443 myGenericProcessName myGenericProcess.json

    download-generic-process myuser mypassword https://url:8443 myGenericProcessName myGenericProcess.yaml

  • Download all Generic processes
    Syntax:
    download-generic-process-all <username> <password> <server-url> <output-file-type(json/yaml)>
    Example:

    For Ex(json format): ./download-generic-process-all myuser mypassword https://url:8443 json

    For Ex(yaml format): ./download-generic-process-all myuser mypassword https://url:8443 yaml

  • Download a Component Process
    Syntax:
    download-component-process <username> <password> <server-url> <component-process-name> <component-name> <output-file>
    Example:

    download-component-process myuser mypassword https://url:8443 myComponentProcessName myComponentName myComponentProcess.json

    download-component-process myuser mypassword https://url:8443 myComponentProcessName myComponentName myComponentProcess.yaml

  • Download all processes for a given component
    Syntax:
    download-component-process-all <username> <password> <server-url> <component-name> <output-file-type(json)>
    Example:

    For Ex(json format): ./download-component-process-all myuser mypassword https://url:8443 myComponentName json

    For Ex(yaml format): ./download-component-process-all myuser mypassword https://url:8443 myComponentName yaml

  • Download an Application Process
    Syntax:
    download-application-process <username> <password> <server-url> <application-process-name> <application-name> <output-file>
    Example:

    download-application-process myuser mypassword https://url:8443 myApplicationProcessName myApplicationName myApplicationProcess.json

    download-application-process myuser mypassword https://url:8443 myApplicationProcessName myApplicationName myApplicationProcess.yaml

  • Download all processes for a given application
    Syntax:
    download-application-process-all <username> <password> <server-url> <application-name> <output-file-type(json)>
    Example:

    For Ex(json format): ./download-application-process-all myuser mypassword https://url:8443 myApplicationName json

    For Ex(yaml format): ./download-application-process-all myuser mypassword https://url:8443 myApplicationName yaml

  • Download a Component Template Process
    Syntax:
    download-component-template-process <username> <password> <server-url> <component-template-process-name> <component-template-name> <output-file>
    Example:

    download-component-template-process myuser mypassword https://url:8443 myComponentTemplateProcessName myComponenTemplatetName myComponentTemplateProcess.json

    download-component-template-process myuser mypassword https://url:8443 myComponentTemplateProcessName myComponenTemplatetName myComponentTemplateProcess.yml

  • Download an Application Template Process
    Syntax:
    download-application-template-process <username> <password> <server-url> <application-template-process-name> <application-template-name> <output-file>
    Example:

    download-application-template-process myuser mypassword https://url:8443 myApplicationTemplateProcessName myApplicationTemplateName myApplicationTemplateProcess.json

    download-application-template-process myuser mypassword https://url:8443 myApplicationTemplateProcessName myApplicationTemplateName myApplicationTemplateProcess.yaml

  • Upload a Generic Process
    Syntax:
    upload-generic-process <username> <password> <server-url> <input-file>
    Example:

    upload-generic-process myuser mypassword https://url:8443 myGenericProcess.json

    upload-generic-process myuser mypassword https://url:8443 myGenericProcess.yml

  • Upload a Component Process
    Syntax:
    upload-component-process <username> <password> <server-url> <input-file>
    Example:

    upload-component-process myuser mypassword https://url:8443 myComponentProcess.json

    upload-component-process myuser mypassword https://url:8443 myComponentProcess.yml

  • Upload an Application Process
    Syntax:
    upload-application-process <username> <password> <server-url> <input-file>
    Example:

    upload-application-process myuser mypassword https://url:8443 myApplicationProcess.json

    upload-application-process myuser mypassword https://url:8443 myApplicationProcess.yml

  • Upload a component template process
    Syntax:
    upload-component-template-process <username> <password> <server-url> <input-file>
    Example:

    ./upload-component-template-process myuser mypassword https://url:8443 myComponentTemplateProcess.json

    ./upload-component-template-process myuser mypassword https://url:8443 myComponentTemplateProcess.yaml

  • Upload an application template process
    Syntax:
    upload-application-template-process <username> <password> <server-url> <application-process-name> <application-name> <input-file>
    Example:

    For Ex: ./upload-application-template-process myuser mypassword https://url:8443 myApplicationTemplateProcess.json

    For Ex: ./upload-application-template-process myuser mypassword https://url:8443 myApplicationTemplateProcess.yaml

  • Note: Both .yml and .yaml extensions are supported

  • Important Note: Use quotes for process names/application names/component names that contains space
    For Ex. While downloading an application process:
    download-application-process myuser mypassword https://url:8443 "my ApplicationProcess Name" "my Application Name" myApplicationProcess.json

Structure of a Process file

  • A process file has below a structure
  {
    // "<.. process configuration block..>"        
    "[component | application]": "[ <name of the component> | <name of the application>] ", // Field not required/generated for Generic process
    "process-name": "<name of the process>",
    "process": {
          //"<...json body of the process step definitions ...>"
      }
  }     
  # "<.. process configuration block..>"  
  "[component | application]": "[ <name of the component> | <name of the application> ]"  # Field not required/generated for Generic process
  process-name: "<name of the process>"
  process:
    # <...yaml body of the process step definitions ...>
  • A process in the above structure is mapped to a json that has multiple process step definitions. there are multiple types of steps that are supported in Devops Deploy

Process step definitions

  • 'Devops-Deploy' processes are composed of different steps that are made up of json. The steps ideally start from the 'Start' step and terminate at the last user defined step. Unlike in the UI, there's no need for an explicit 'Finish' step.

  • There are different types of steps, and many of them are contextual in nature and may not apply to all types of processes. One way to verify is to see if the step you are trying to add is available in the palette in the process design page in the UI

  • The structure of a step is composed of step-data that defines the type of step and its attributes and the step workflow data that tells what is the target of the step upon successful (or) unsuccessful termination of the step. Target can be another defined step or be the finish step.

  { 
    "<name of the step>" : {
        " ..step data.. "
        "  .."
        "  .."
      },
      "on" : {
          "..step Termination events data.."
      }
    } 
  "<name of the step>":
    step_data: " ..."
    another_field: " ..."

  on:
    step_termination_events_data: " ..."

Termination Events within in a Process

The step termination event tells the possible termination possibilities of a step and attach a target step based on the type of the termination event. The three types of termination events are 1. success — upon successful completion of this step 2. failure - upon unsuccessful completion of this step 3. complete - upon completion of the current step irrespective of successful or unsuccessful execution

  • The events contain data to complete the workflow by defining what the next step is post the completion of the current step. the events can either start an array of one or more steps defined in the process or can terminate at the finish step

Termination event Examples

  1. Example of events calling other steps in successful and unsuccessful scenarios of the current step
  { 
    "on" : {
      "success" : {
          "start" : ["some-step", "some other step"]
      },
      "failure" : {
          "start" : ["some step"]
      }
    }
  }
  on:
    success:
      start:
        - "some-step"
        - "some other step"
    failure:
      start:
        - "some step"
  1. Examples of events calling the finish step

  2. Example-1

  {
  "on" : {
    "success" : {
        "finish" : ""
      }
  }
  }
  on:
    success:
      finish: ""
  • Example-2
  {
    "on" : {
      "success": {
        "start": [
          "start-server"
        ]
      },
      "failure": {
        "finish": ""
      }
    }
  }
  on:
    success:
      start:
        - "start-server"
    failure:
      finish: ""

Note that in the above examples, the finish attribute has no value. The finish step does not need a definition and hence there is no need for a target step value.

Process configurations

Component Process Configurations

  • Available from 8.X versions

  • Syntax

{
  // --- Common Fields: Always Present ---
  // These fields are fundamental and required for all process definitions.
  description: "[[String: A brief, descriptive summary of the process's purpose, e.g., 'Deploy web application to production', 'Uninstall database service', 'Apply configuration changes to server']]",
  defaultWorkingDir: "[[String: The default working directory for the process execution. Often uses placeholders for dynamic paths, e.g., '${p:resource/work.dir}/${p:component.name}']]",
  status: "[[String: The current status of this process definition. Typically 'Active' or 'Inactive'.]]",

  // --- Property Definitions (propDefs): Rule 1 ---
  // This array holds definitions for custom properties that can be configured for this process.
  //  This array can have 0 or more nested JSON objects. If no custom properties are needed, provide an empty array: `[]`.
  propDefs: [
    {
       index: "[[Integer: A zero-based index defining the display order of this property in the UI, e.g., 0, 1, 2]]",
       name: "[[String: The internal, unique identifier for the property (e.g., 'text-prop', 'databasePort', 'deploymentStrategy'). This is often used in scripts/plugins to reference the property's value.]]",
       type: "[[String: The data type and UI control type for the property. Allowed values: 'TEXT', 'DATETIME', 'TEXTAREA', 'BOOLEAN', 'SELECT', 'MULTI_SELECT', 'CHECKBOX'..]]",
       inherited: "[[Boolean: Set to `true` if this property's value can be inherited from a parent object (e.g., component or application level). Set to `false` otherwise.]]",
       isHidden: "[[Boolean: Set to `true` if this property should not be visible in the standard UI forms (useful for internal or advanced properties). Set to `false` for visible properties.]]",
       required: "[[Boolean: Set to `true` if a value for this property must be provided before the process can be executed. Set to `false` if it's optional.]]",
       label: "[[String: The user-friendly label displayed next to the property in the UI (e.g., 'Application Name', 'Database Port Number').]]",
       description: "[[String: A detailed explanation of what the property is used for and what kind of value is expected (e.g., 'Full path to the application's WAR file', 'The port number for the database connection').]]",
       pattern: "[[String: An optional regular expression pattern for validating the property's value. Can be an empty string `''` if no pattern validation is needed.]]",
       value: "[[String|Boolean: The default value for this property. The data type (String, Number, Boolean, or null) must correspond to the `type` field. For example, if `type` is 'DATETIME', this might be a timestamp as a string '1744100280000'. If `type` is 'TEXT', it could be 'initial data'. If `type` is 'BOOLEAN', it's `true` or `false`.]]",
    },
    // Add more property definition objects here as needed.
  ],

  // --- Required Role Names (requiredRoleNames) ---
  // This array specifies the names of roles that a user must possess to be authorized to execute this process.
  // This array can be empty `[]` if no specific role restrictions apply beyond general system permissions.
  requiredRoleNames: [
    'Deployer', 'Admin',
  ],

  // --- Conditional Fields Based on UI Process Type ---
  // The following fields (`takesVersion`, `inventoryActionType`, `configActionType`)
  // will be present or absent, and have specific values, depending on the "Process Type"
  // selected in the User Interface for this process.
  // Uncomment and configure ONLY ONE of the scenarios below based on your UI selection.

  // Scenario 1: UI Process Type is "Deployment" (or "Install")
  takesVersion: true, // Indicates if this deployment process requires or consumes a version.
  inventoryActionType: "ADD", // Denotes that this process adds an item to inventory.
  configActionType: "ADD",    // Denotes that this process applies configuration changes.

  // Scenario 2: UI Process Type is "Uninstall"
  inventoryActionType: "REMOVE", // Denotes that this process removes an item from inventory.
  // DO NOT include "configActionType" or "takesVersion" fields for this scenario.

  // Scenario 3: UI Process Type is "Configuration"
  configActionType: "ADD", // Denotes that this process applies configuration changes.
  // DO NOT include "inventoryActionType" or "takesVersion" fields for this scenario.

  // Scenario 4: UI Process Type is "Operational-with-version"
  takesVersion: true, // Indicates this operational process is tied to a specific version.
  // DO NOT include "inventoryActionType" or "configActionType" fields for this scenario.

  // Scenario 5: UI Process Type is "Operational-without-version"
  takesVersion: false, // Indicates this operational process is NOT tied to a specific version.
  // DO NOT include "inventoryActionType" or "configActionType" fields for this scenario.
}
  # --- Common Fields: Always Present ---
  # These fields are fundamental and required for all process definitions.
  description: "[[String: A brief, descriptive summary of the process's purpose, e.g., 'Deploy web application to production', 'Uninstall database service', 'Apply configuration changes to server']]"
  defaultWorkingDir: "[[String: The default working directory for the process execution. Often uses placeholders for dynamic paths, e.g., '${p:resource/work.dir}/${p:component.name}']]"
  status: "[[String: The current status of this process definition. Typically 'Active' or 'Inactive'.]]"

  # --- Property Definitions (propDefs) ---
  # This array holds definitions for custom properties that can be configured for this process.
  propDefs:
  # Example property definition object. Add more items as needed.
  - index: "[[Integer: A zero-based index defining the display order of this property in the UI, e.g., 0, 1, 2]]"
    name: "[[String: The internal, unique identifier for the property (e.g., 'text-prop', 'databasePort', 'deploymentStrategy'). This is often used in scripts/plugins to reference the property's value.]]"
    type: "[[String: The data type and UI control type for the property. Allowed values: 'TEXT', 'DATETIME', 'TEXTAREA', 'BOOLEAN', 'SELECT', 'MULTI_SELECT', 'CHECKBOX'.]]"
    inherited: "[[Boolean: Set to `true` if this property's value can be inherited from a parent object (e.g., component or application level). Set to `false` otherwise.]]"
    isHidden: "[[Boolean: Set to `true` if this property should not be visible in the standard UI forms (useful for internal or advanced properties). Set to `false` for visible properties.]]"
    required: "[[Boolean: Set to `true` if a value for this property must be provided before the process can be executed. Set to `false` if it's optional.]]"
    label: "[[String: The user-friendly label displayed next to the property in the UI (e.g., 'Application Name', 'Database Port Number').]]"
    description: "[[String: A detailed explanation of what the property is used for and what kind of value is expected (e.g., 'Full path to the application's WAR file', 'The port number for the database connection').]]"
    pattern: "[[String: An optional regular expression pattern for validating the property's value. Can be an empty string `''` if no pattern validation is needed.]]"
    value: "[[String|Number|Boolean|null: The default value for this property. The data type (String, Number, Boolean, or null) must correspond to the `type` field. For example, if `type` is 'DATETIME', this might be a timestamp as a string '1744100280000'. If `type` is 'TEXT', it could be 'initial data'. If `type` is 'BOOLEAN', it's `true` or `false'.]]"
  # Add more property definition objects here as needed.

  # --- Required Role Names (requiredRoleNames) ---
  # This array specifies the names of roles that a user must possess to be authorized to execute this process.
  # This array can be empty `[]` if no specific role restrictions apply beyond general system permissions.
  requiredRoleNames:
  - "role1"
  - "role2"

  # --- Conditional Fields Based on UI Process Type ---
  # The following fields (`takesVersion`, `inventoryActionType`, `configActionType`)
  # will be present or absent, and have specific values, depending on the "Process Type"
  # selected in the User Interface for this process.
  # IMPORTANT: Uncomment and configure ONLY ONE of the scenarios below based on your UI selection.
  # Ensure that fields marked "DO NOT include" are completely omitted from your final YAML.

  # Scenario 1: UI Process Type is "Deployment" (or "Install")
  takesVersion: true # Indicates if this deployment process requires or consumes a version.
  inventoryActionType: "ADD" # Denotes that this process adds an item to inventory.
  configActionType: "ADD"    # Denotes that this process applies configuration changes.

  # Scenario 2: UI Process Type is "Uninstall"
  inventoryActionType: "REMOVE" # Denotes that this process removes an item from inventory.
  # DO NOT include `configActionType` or `takesVersion` fields for this scenario.

  # Scenario 3: UI Process Type is "Configuration"
  configActionType: "ADD" # Denotes that this process applies configuration changes.
  # DO NOT include `inventoryActionType` or `takesVersion` fields for this scenario.

  # Scenario 4: UI Process Type is "Operational-with-version"
  takesVersion: true # Indicates this operational process is tied to a specific version.
  # DO NOT include `inventoryActionType` or `configActionType` fields for this scenario.

  # Scenario 5: UI Process Type is "Operational-without-version"
  takesVersion: false # Indicates this operational process is NOT tied to a specific version.
  # DO NOT include `inventoryActionType` or `configActionType` fields for this scenario.
  • Below is an example for an "install type" component process configuration
  {
    "description": "Process description",
    "defaultWorkingDir": "${p:resource\/work.dir}\/${p:component.name}",
    "takesVersion": true,
    "inventoryActionType": "ADD",
    "configActionType": "ADD",
    "status": "Active",
    "propDefs": [
          {
          "index": 0,
          "name": "text-prop",
          "type": "TEXT",
          "inherited": false,
          "isHidden": false,
          "required": false,
          "label": "label testing",
          "description": "text property changed",
          "pattern": "",
          "value": "some data"
          },
          {
          "index": 1,
          "name": "Date Time prop",
          "type": "DATETIME",
          "inherited": false,
          "isHidden": false,
          "required": true,
          "label": "Date Time prop",
          "description": "date time prop",
          "pattern": "",
          "value": "1744100280000"
          }
    ]
    "requiredRoleNames": [
        "custom_role",
        "Deployer"
    ]
  }
  // rest of the process 

```yaml


description: "test-3" defaultWorkingDir: "${p:resource/work.dir}/${p:component.name}" takesVersion: true inventoryActionType: "ADD" configActionType: "ADD" status: "Active" propDefs: - index: 0 name: "text-prop" type: "TEXT" inherited: false isHidden: false required: false label: "label testing" description: "text property changed" pattern: "" value: "some data" - index: 1 name: "Date Time prop" type: "DATETIME" inherited: false isHidden: false required: true label: "Date Time prop" description: "date time prop" pattern: "" value: "1744100280000" requiredRoleNames: - "custom_role" - "Deployer" active: true # rest of the process

```

Application process configuration

  • Available from 8.X versions

  • Syntax

{
  "inventoryManagementType": "[[String: Type of inventory management. Allowed values: 'AUTOMATIC', 'ADVANCED']]",
  "offlineAgentHandling": "[[String: How offline agents are handled. Allowed values: 'FAIL_BUT_CONTINUE', 'PRE_EXECUTION_CHECK', 'ALLOW_OFFLINE']]",
  "description": "[[String: A brief description of the process or definition.]]",
  "disableSnapshots": "[[Boolean: true if snapshots are disabled, false otherwise.]]",

  "propDefs": [
      // This array can contain 0 or more property definition objects.
      // If no custom properties are needed, provide an empty array: []
      {
          "index": "[[Integer: The display order index of the property (e.g., 0, 1, 2).]]",
          "name": "[[String: The internal name of the property (e.g., 'prop-1', 'text-prop').]]",
          "type": "[[String: The data type of the property. Examples: 'TEXT', 'DATETIME', 'TEXTAREA', 'SELECT', 'MULIT_SELECT'.]]",
          "inherited": "[[Boolean: true if inherited, false otherwise.]]",
          "isHidden": "[[Boolean: true if the property should be hidden in the UI, false otherwise.]]",
          "required": "[[Boolean: true if the property is mandatory, false otherwise.]]",
          "label": "[[String: The user-friendly label for the property in the UI.]]",
          "description": "[[String: A detailed description of the property.]]",
          "pattern": "[[String: A regular expression pattern for validation (can be empty '').]]",
          "value": "[[String|Number|Boolean|null: The default or current value of the property. Type depends on the 'type' field. E.g., 'prop-value', '1744100280000', true, null.]]"
      }
  ],

  "versionPresets": [
      // This array defines component version selectors. It can contain one or more objects.
      {
          "component": "[[String: The name of the component]]",
          "selector": "[[String: The version selector strategy. should use one of the below:
          'latestWithStatus/[status-name]',
          'version/[[ String: version-name]]',
          'latestVersion/',
          'allWithStatus/[[String: status-name]]',
          'allInEnvironment/[[String: inventory-status]]',
          'reverseAllInEnvironment/[[String: inventory-status]]']]"
      }
  ],

  // "requiredRoleNames": "[[Optional Array of Strings: Role names required to execute. This field is optional. If present and no roles are needed, provide an empty array: []]]"
  "requiredRoleNames": [
      "[[String: Name of a required role, e.g., 'Administrator', 'Automation Engineer']]",
  ]
}
  # --- Core Configuration Fields ---
  # These fields are fundamental and are always present in the process definition.
  inventoryManagementType: "[[String: Defines how inventory is managed. Possible values: 'AUTOMATIC', 'ADVANCED']]"
  offlineAgentHandling: "[[String: Specifies the behavior when an agent is offline. Possible values: 'FAIL_BUT_CONTINUE', 'PRE_EXECUTION_CHECK', 'ALLOW_OFFLINE']]"
  description: "[[String: A brief textual description of this process configuration, e.g., 'test-1']]"
  disableSnapshots: "[[Boolean: Set to `true` to disable snapshots for this process; set to `false` to enable them.]]"

  # --- Property Definitions (propDefs) ---
  # This section defines custom properties that can be used within the process.
  # This array can contain 0 or more property definition objects.
  # If no custom properties are needed, simply use an empty array: `propDefs: []`.
  propDefs:
  # Example of a single property definition object. Add more items as needed.
  - index: "[[Integer: A zero-based integer representing the display order of this property, e.g., 0, 1, 2]]"
    name: "[[String: The internal, unique identifier for the property, e.g., 'prop-1', 'text-prop']]"
    type: "[[String: The data type and corresponding UI control for the property. Valid options include: 'TEXT', 'DATETIME', 'TEXTAREA', 'SELECT', 'MULTI_SELECT'.]]"
    inherited: "[[Boolean: Set to `true` if this property's value can be inherited from a higher-level object (e.g., component or application). Set to `false` otherwise.]]"
    isHidden: "[[Boolean: Set to `true` to hide this property from standard UI forms (useful for internal or advanced settings); set to `false` to make it visible.]]"
    required: "[[Boolean: Set to `true` if a value for this property must be provided before process execution; set to `false` if it is optional.]]"
    label: "[[String: The user-friendly label displayed in the UI for this property, e.g., 'Property One', 'Database Port'.]]"
    description: "[[String: A detailed explanation of the property's purpose and expected values, e.g., 'This field takes the database connection string.']]"
    pattern: "[[String: An optional regular expression pattern used for validating the property's value. Use an empty string `''` if no pattern validation is required.]]"
    value: "[[String|Number|Boolean|null: The default value for this property. The data type must match the `type` field. Examples: 'some data', 1744100280000 (for DATETIME), true, null.]]"
  # Add more `- index: ...` blocks here for additional properties.

  # --- Version Presets ---
  # This section defines how component versions are selected for the process.
  # This array typically contains one or more objects, each specifying a component and its version selector.
  versionPresets:
  # Example of a single version preset. Add more items if multiple components are involved.
  - component: "[[String: The name of the component for which the version is being selected, e.g., 'PAC-COMP', 'ZOSCOMP']]"
    selector: "[[String: The strategy for selecting the component version. Examples from samples include:
      'latestWithStatus/[status-name]',
      'version/[[ String: version-name]]',
      'latestVersion/',
      'allWithStatus/[[String: status-name]]',
      'allInEnvironment/[[String: inventory-status]]',
      'reverseAllInEnvironment/[[String: inventory-status]]']]"
    The exact format depends on available version selection methods.]]"
  # Add more `- component: ...` blocks here for additional version presets.

  # --- Required Role Names (requiredRoleNames) ---
  # This array specifies the names of roles that a user must possess to be authorized to execute this process.
  # This array is optional. If present, it can be empty `[]` if no specific role restrictions apply beyond general system permissions.
  # If this field is not present in the YAML, it implies no specific roles are required beyond base access.
  # Uncomment the following lines if `requiredRoleNames` is needed for a specific process configuration.
  # requiredRoleNames:
  #   # Example role names. Add more items as needed.
  #   - "[[String: Name of a required role, e.g., 'Administrator', 'Automation Engineer']]"
  #   - "[[String: Another required role name]]"
  • Below is an example for an application process configuration
  {
    "inventoryManagementType": "ADVANCED",
    "offlineAgentHandling": "ALLOW_OFFLINE",
    "description": "test-1",
    "disableSnapshots": true,
    "propDefs": [
        {
          "index": 0,
          "name": "prop-1",
          "type": "TEXT",
          "inherited": false,
          "isHidden": false,
          "required": false,
          "label": "prop-1",
          "description": "description changed for demo",
          "pattern": "",
          "value": "prop-value"
        },
        {
          "index": 1,
          "name": "MULTI-SELECT",
          "type": "MULTI_SELECT",
          "inherited": false,
          "isHidden": false,
          "required": true,
          "label": "LABEL FOR MULTI SELECT",
          "description": "MULTI-SELECT",
          "pattern": "",
          "allowedValues": [
              {
                  "value": "HARNESS",
                  "label": "HARNESS"
              },
              {
                  "value": "UCD",
                  "label": "UCD"
              },
              {
                  "value": "DD",
                  "label": "DD"
              }
          ],
          "value": "HARNESS"
      }
    ],
    "requiredRoleNames": [
      "Administrator",
      "Automation Engineer"
    ],
    "versionPresets": [
        {
          "component": "ZOSCOMP",
          "selector": "reverseAllInEnvironment\/Active"
        }
    ]
  }
  ---
  inventoryManagementType: "ADVANCED"
  offlineAgentHandling: "ALLOW_OFFLINE"
  description: "test-1"
  disableSnapshots: true
  propDefs:
  - index: 0
    name: "prop-1"
    type: "TEXT"
    inherited: false
    isHidden: false
    required: false
    label: "prop-1"
    description: "description changed for demo"
    pattern: ""
    value: "prop-value"
  - index: 1
    name: "MULTI-SELECT"
    type: "MULTI_SELECT"
    inherited: false
    isHidden: false
    required: true
    label: "LABEL FOR MULTI SELECT"
    description: "MULTI-SELECT"
    pattern: ""
    allowedValues:
    - value: "HARNESS"
      label: "HARNESS"
    - value: "UCD"
      label: "UCD"
    - value: "DD"
      label: "DD"
      value: "HARNESS"
  requiredRoleNames:
  - "Administrator"
  - "Automation Engineer"
  versionPresets:
  - component: "ZOSCOMP"
    selector: "reverseAllInEnvironment/Active"

Process configurations for Generic processes

  • Syntax
  {
      "properties": [
      // It MUST contain a property object with "name": "workingDir".
      // It MAY optionally contain a property object with "name": "defaultResourceId".
      // No other 'name' values are allowed within this 'properties' array.
          {
            "name": "workingDir",
            "value": "[[String: The working directory for the process execution. MANDATORY. Can include placeholders like '${p:resource/work.dir}/${p:process.name}'.]]"
          }
          // --- Optional Property: defaultResourceId ---
          // Uncomment the following block if 'defaultResourceId' is needed.
          /*
          , {
            "name": "defaultResourceId",
            "value": "[[String: The ID of the default resource. OPTIONAL. MUST be a UUID (e.g., '196f310a-45fc-6941-e488-d4a0a87a7f38').]]"
          }
          */
      // No other property objects are allowed in this array.
      ],
      "description": "[[String: A textual description for this configuration. Can be an empty string ' ' or a detailed text.]]",

      // --- Optional Fields ---
      // The following fields might be present or absent depending on the specific configuration.

      "propDefs": [
        // This array defines custom properties that can be configured for this item.
        // This entire 'propDefs' array is OPTIONAL. If not needed, omit it entirely or provide an empty array: [].
          {
            "index": "[[Integer: A zero-based index for display order, e.g., 0, 1, 2.]]",
            "name": "[[String: The internal name of the property, e.g., 'TextProperty', 'select-property', 'checkbox'].]",
            "type": "[[String: The data type and UI control type. Examples: 'TEXT', 'SELECT', 'CHECKBOX', 'DATETIME', 'MULTI_SELECT'.]]",
            "inherited": "[[Boolean: true if inherited, false otherwise.]]",
            "isHidden": "[[Boolean: true if the property should be hidden in the UI, false otherwise.]]",
            "required": "[[Boolean: true if the property is mandatory, false otherwise.]]",
            "label": "[[String: The user-friendly label displayed in the UI, e.g., 'TextProperty-label', 'checkbox property label'.]]",
            "description": "[[String: A detailed description of the property's purpose.]]",
            "pattern": "[[String: An optional regular expression pattern for validation. Can be an empty string '']]",
            "value": "[[String|Boolean|Number|null: The default or current value of the property. The type should match the 'type' field. E.g., 'DEFAULT-VALUE', 'true', 123, null.]]"
            // "allowedValues": "[[Optional Array of Objects: ONLY present if 'type' is 'SELECT']]"
            // If 'type' is "SELECT", this field is required and structured as:
            // "allowedValues": [
            //   { "value": "[[String: The actual value to be stored]]", "label": "[[String: The display label for the value]]" },
            //   { "value": "DD", "label": "DD" },
            //   { "value": "WD", "label": "WD" }
            // ]
          }
        // Add more property definition objects as needed.
      ],

      "webhooks": [
      // This array defines webhooks to be triggered by certain events.
      // This entire 'webhooks' array is OPTIONAL. If not needed, omit it entirely or provide an empty array: [].
          {
            "url": "[[String: The URL to which the webhook request will be sent, e.g., 'http://git.com', 'http://exec.com']]",
            "proxyHost": "[[String: Optional proxy host. Can be a placeholder like '${p?:system/proxyHost}' or an empty string '']]]",
            "proxyPort": "[[String: Optional proxy port. Can be a placeholder like '${p?:system/proxyPort}' or an empty string '']]]",
            "webhookTemplate": {
            "name": "[[String: The name of the webhook template, e.g., 'webhooktemplate']]",
            "description": "[[String: A description for the webhook template. Can be empty '']]",
            "body": "[[String: The body content of the webhook request.]]",
            "type": "[[String: The type of event that triggers the webhook. Example: 'PROCESS_FAILURE'. Other types may exist.]]"
          }
      // Add more webhook objects as needed.
      ],

      "teamMappings": [
        // This array defines mappings to specific teams for permissions or notifications.
        // This entire 'teamMappings' array is OPTIONAL. If not needed, omit it entirely or provide an empty array: [].
        {
          "resourceTypeId": "[[String: The ID of the resource type being mapped, e.g., '20000000000000000000000000000109']]",
          "resourceTypeName": "[[String: The name of the resource type, e.g., 'Process']]",
          "teamId": "[[String: The unique ID of the team, e.g., '18f70a02-67bd-8ac4-7c5a-fcddeecfd8df']]",
          "teamLabel": "[[String: The display label of the team, e.g., 'Deployer-team']]"
        }
      // Add more team mapping objects as needed.
      ]
  }
  # --- Core Configuration Fields ---
  # These fields define fundamental aspects of the process configuration.

  properties:
    # This array contains key-value pairs defining specific properties for the process or resource.
    # It MUST include a property with `name: "workingDir"`.
    # It MAY optionally include a property with `name: "defaultResourceId"`.
    # No other property names are allowed within this array.
    - name: "workingDir"
      value: "[[String: The working directory for the process execution. This field is MANDATORY. Examples: '${p:resource/work.dir}/${p:process.name}', '/opt/app/myproject']]"
    # --- Optional Property: defaultResourceId ---
    # Uncomment the following block if `defaultResourceId` is required for your configuration.
    # If present, its value MUST be a valid UUID.
    # - name: "defaultResourceId"
    #   value: "[[String: MUST be a valid UUID (e.g., '196f310a-45fc-6941-e488-d4a0a87a7f38').]]"

  description: "[[String: A textual description for this configuration. Can be an empty string `''` or a detailed text. Examples: 'some description', 'Process configuration for application deployment.']]"

  # --- Property Definitions (propDefs) ---
  # This section defines custom properties that can be configured and managed for this item.
  # This entire `propDefs` array is OPTIONAL. If no custom properties are needed, omit this section entirely or provide an empty array: `propDefs: []`.
  propDefs:
    # Example of a single property definition object. Add more items as needed.
    - index: "[[Integer: A zero-based index representing the display order of this property in the UI, e.g., 0, 1, 2]]"
      name: "[[String: The internal, unique identifier for the property (e.g., 'TEXT-PROPERTY', 'select-property', 'checkbox').]]"
      type: "[[String: The data type and corresponding UI control for the property. Valid options include: 'TEXT', 'SELECT', 'CHECKBOX', 'DATETIME', 'MULTI_SELECT'.]]"
      inherited: "[[Boolean: Set to `true` if this property's value can be inherited from a higher-level object; set to `false` otherwise.]]"
      isHidden: "[[Boolean: Set to `true` to hide this property from standard UI forms (useful for internal/advanced settings); set to `false` to make it visible.]]"
      required: "[[Boolean: Set to `true` if a value for this property must be provided before process execution; set to `false` if it is optional.]]"
      label: "[[String: The user-friendly label displayed in the UI for this property, e.g., 'TEXT-PROPERTY', 'checkbox property label'.]]"
      description: "[[String: A detailed explanation of the property's purpose and expected values. Can be an empty string `''`.]]"
      pattern: "[[String: An optional regular expression pattern used for validating the property's value. Use an empty string `''` if no pattern validation is required.]]"
      value: "[[String|Boolean|Number|null: The default value for this property. The data type must match the `type` field. Examples: 'some default value', 'true', 123, null.]]"
      # --- Conditional Field for 'SELECT' type properties ---
      # If `type` is "SELECT", this `allowedValues` array is REQUIRED.
      # It defines the list of predefined options for the dropdown.
      # allowedValues:
      #   - value: "[[String: The actual value to be stored when this option is selected, e.g., 'DD']]"
      #     label: "[[String: The display label for this option in the UI, e.g., 'DD']]"
      #   - value: "WD"
      #     label: "WD"
      #   - value: "HARNESS"
      #     label: "HARNESS"
    # Add more `- index: ...` blocks here for additional custom properties.

  # --- Webhooks ---
  # This entire `webhooks` array is OPTIONAL. If not needed, omit this section entirely or provide an empty array: `webhooks: []`.
  webhooks:
    # Example of a single webhook configuration. Add more items if multiple webhooks are needed.
    - url: "[[String: The URL endpoint to which the webhook request will be sent, e.g., '[http://call.com](http://call.com)', '[http://exec.com](http://exec.com)']]"
      proxyHost: "[[String: Optional proxy host. Can be a placeholder like '${p?:system/proxyHost}' or an empty string `''`.]]"
      proxyPort: "[[String: Optional proxy port. Can be a placeholder like '${p?:system/proxyPort}' or an empty string `''`.]]"
      webhookTemplate:
        name: "[[String: The name of the webhook template used, e.g., 'webhooktemplate']]"
        description: "[[String: A description for the webhook template. Can be empty `''`.]]"
        body: "[[String: The raw body content of the webhook request.]]"
        type: "[[String: The type of event that triggers this webhook. Example: 'PROCESS_FAILURE'. Other types may exist depending on system capabilities.]]"
    # Add more `- url: ...` blocks here for additional webhooks.

  # --- Team Mappings ---
  # This entire `teamMappings` array is OPTIONAL. If not needed, omit this section entirely or provide an empty array: `teamMappings: []`.
  teamMappings:
    # Example of a single team mapping. Add more items if multiple team mappings are needed.
    - resourceTypeId: "[[String: The unique ID of the resource type being mapped, e.g., '20000000000000000000000000000109']]"
      resourceTypeName: "[[String: The name of the resource type, e.g., 'Process', 'Component'.]]"
      teamId: "[[String: The unique ID of the team being mapped, e.g., '18f70a02-67bd-8ac4-7c5a-fcddeecfd8df']]"
      teamLabel: "[[String: The display label of the team, e.g., 'Deployer-team', 'Custom_Team'.]]"
    # Add more `- resourceTypeId: ...` blocks here for additional team mappings.
  • Example of a generic process configuration
  {
      "properties": [
          {
              "name": "workingDir",
              "value": "${p:resource\/work.dir}\/${p:process.name}"
          },
          {
              "name": "defaultResourceId",
              "value": "196f310a-45fc-6941-e488-d4a0a87a7f38"
          }
      ],
      "description": "generic porcess",
      "propDefs": [
          {
              "index": 0,
              "name": "TextProperty",
              "type": "TEXT",
              "inherited": false,
              "isHidden": false,
              "required": false,
              "label": "TextProperty-label",
              "description": "prop-description",
              "pattern": "",
              "value": "DEFAULT-VALUE"
          },
          {
              "index": 1,
              "name": "select-property",
              "type": "SELECT",
              "inherited": false,
              "isHidden": false,
              "required": true,
              "label": "sp label",
              "description": "SP",
              "pattern": "",
              "allowedValues": [
                  {
                      "value": "DD",
                      "label": "DD"
                  },
                  {
                      "value": "WD",
                      "label": "WD"
                  },
                  {
                      "value": "HARNESS",
                      "label": "HARNESS"
                  }
              ],
              "value": "WD"
          },
          {
              "index": 2,
              "name": "chekbox",
              "type": "CHECKBOX",
              "inherited": false,
              "isHidden": false,
              "required": false,
              "label": "checkbox properrty label",
              "description": "CHECKBOX PROP",
              "pattern": "",
              "value": "true"
          }
      ],
      "webhooks": [
          {
              "url": "http:\/\/git.com",
              "proxyHost": "${p?:system\/proxyHost}",
              "proxyPort": "${p?:system\/proxyPort}",
              "webhookTemplate": {
                  "name": "webhooktemplate",
                  "description": "",
                  "body": "sdfs",
                  "type": "PROCESS_FAILURE"
              }
          },
          {
              "url": "http:\/\/exec.com",
              "proxyHost": "${p?:system\/proxyHost}",
              "proxyPort": "${p?:system\/proxyPort}",
              "webhookTemplate": {
                  "name": "webhooktemplate",
                  "description": "",
                  "body": "sdfs",
                  "type": "PROCESS_FAILURE"
              }
          }
      ],
      "teamMappings": [
          {
              "resourceTypeId": "20000000000000000000000000000109",
              "resourceTypeName": "Process",
              "teamId": "18f70a02-67bd-8ac4-7c5a-fcddeecfd8df",
              "teamLabel": "Deployer-team"
          },
          {
              "resourceTypeId": "20000000000000000000000000000109",
              "resourceTypeName": "Process",
              "teamId": "19560231-d660-d0fa-a390-5b0431d04946",
              "teamLabel": "custom_team"
          }
  }
  // rest of the process 
  ---
  properties:
  - name: "workingDir"
    value: "${p:resource/work.dir}/${p:process.name}"
    - name: "defaultResourceId"
      value: "19642f2e-59b5-6af5-765b-575fb18de966"
  description: " some description"
  propDefs:
    - index: 0
      name: "TEXT-PROPERTY"
      type: "TEXT"
      inherited: false
      isHidden: false
      required: false
      label: "TEXT-PROPERTY"
      description: ""
      pattern: ""
      value: "some default value"
  webhooks:
    - url: "http://call.com"
      proxyHost: "${p?:system/proxyHost}"
      proxyPort: "${p?:system/proxyPort}"
      webhookTemplate:
      name: "webhooktemplate"
      description: ""
      body: "sdfs"
      type: "PROCESS_FAILURE"
  teamMappings:
    - resourceTypeId: "20000000000000000000000000000109"
      resourceTypeName: "Process"
      teamId: "18f70a02-67bd-8ac4-7c5a-fcddeecfd8df"
      teamLabel: "Deployer-team"

  # rest of the process    

Step Definitions Types with syntax and examples

Most of the process steps are explained in https://www.ibm.com/docs/en/devops-deploy/8.0.1?topic=processes-process-steps-reference

Plugin Step

The most common step and ubiquitously found step type in Devops Deploy processes. It can submit different types of plugin based on the name of the plugin and the command the plugin has in it.

  • Syntax
{
  "<Name of the step>": {
        "type": "plugin",
        "plugin": "<plugin-name>",
        "command": "<plugin-command-name>",
        "postProcessingScript": {
            "name": "<post-processing-script-name>",
            "body": "<scriptFile/post-processing-script-name.txt>"
        },
        "properties": {
            "<plugin-property-1>": "<plugin-property-value-1>",
            "<plugin-property-2>": "<plugin-property-value-2>",
            .
            .
            .
            "<plugin-property-n>": "<plugin-property-n>"
        },
        "on": {
            "success": {
                "start": [
                    "<name of the next step>"
                ]
            },
            "failure": {
                "start" : [
                      "<name of the next step-1>",
                      "<name of the next step-2>",
                ]
            }
        }
    }
}
"<Name of the step>":
  type: "plugin"
  plugin: "<plugin-name>"
  command: "<plugin-command-name>"
  postProcessingScript:
    name: "MyScript"
    body: "<scriptFile/MyScript.txt>"
  properties:
    "<plugin-property-1>": "<plugin-property-value-1>"
    "<plugin-property-2>": "<plugin-property-value-2>"
    # ...
    "<plugin-property-n>": "<plugin-property-n>"
  on:
    success:
      start:
        - "<name of the next step>"
    failure:
      start:
        - "<name of the next step-1>"
        - "<name of the next step-2>"
  • Example
{
  "Download Artifacts for zOS": {
    "type": "plugin",
    "plugin": "UrbanCode Deploy Versioned File Storage",
    "command": "Download Artifacts for zOS",
    "postProcessingScript": {
        "name": "MyScript",
        "body": "scriptFile/MyScript.txt"
    },
    "properties": {
        "directoryOffset": ".",
        "versionId": "${p:version.id}",
        "versionName": "${p:version.name}",
        "serverUrl": "${p:server.url}",
        "compId": "${p:component.id}",
        "repositoryType": "${p?:version\/ucd.repository.type}",
        "resourceId": "${p:resource.id}",
        "maxMemory": "1G"
    },
    "on": {
        "success": {
            "start": [
                "c14c031a12ebca72796dbdca98fec0"
            ]
        }
    }
  } 
}
"Download Artifacts for zOS":
  type: "plugin"
  plugin: "UrbanCode Deploy Versioned File Storage"
  command: "Download Artifacts for zOS"
  postProcessingScript:
    name: "MyScript"
    body: "scriptFile/MyScript.txt"
  properties:
    directoryOffset: "."
    versionId: "${p:version.id}"
    versionName: "${p:version.name}"
    serverUrl: "${p:server.url}"
    compId: "${p:component.id}"
    repositoryType: "${p?:version/ucd.repository.type}"
    resourceId: "${p:resource.id}"
    maxMemory: "1G"
  on:
    success:
      start:
        - "c14c031a12ebca72796dbdca98fec0"

Run Generic Process Step

Step is available in all types of processes and is used to trigger another generic process

  • Structure
  • Syntax
    {
      "<Name of the step>": {
        "type": "run-generic-process",
        "process": "<generic process to execute>",
        "resource-path": "${p:resource.path}",
        "ignore-child-warnings": false,
        "on": {
            "success": {
                "start": [
                    "<name of the next step>"
                ]
            },
            "failure": {
                "start" : [
                      "<name of the next step-1>",
                      "<name of the next step-2>",
                ]
            }
        }
    }
"<Name of the step>":
  type: "run-generic-process"
  process: "<generic process to execute>"
  resource-path: "${p:resource.path}"
  ignore-child-warnings: false
  on:
    success:
      start:
        - "<name of the next step>"
    failure:
      start:
        - "<name of the next step-1>"
        - "<name of the next step-2>"
  • Example
    {
      "RUN-GENERIC-PROCESS": {
        "type": "run-generic-process",
        "process": "REXX",
        "resource-path": "${p:resource.path}",
        "ignore-child-warnings": false,
        "on": {
            "success": {
                "finish": ""
            }
        }
      }
    } 
RUN-GENERIC-PROCESS:
  type: "run-generic-process"
  process: "REXX"
  resource-path: "${p:resource.path}"
  ignore-child-warnings: false
  on:
    success:
      finish: ""  

Run application component step

  • This step is applicable within an application process to trigger another component process.
  • The called component process should be already defined to prevent unexpected behaviour.

  • Syntax

      {
        "<name of the step>": {
            "type": "application-run-component-process",
            "component": "<component-name>",
            "process": "<process name in the component>",
            "select-resources-by-tag": "<resources tag uuid>", // optional
            "select-resources-by-changed-component-list": { // optional
              "components": [   
                "<list of components separated by comma>"   
              ],   
              "select-resources": ["with-changed-component | ALL"]
            },
            "runOnlyOnFirst":false, // optional
            "failFast":false,  // optional 
            "maxIteration":"-1",  // optional
            "isIgnoreChildWarnings":false,  // optional
            "on": {
              "success": {
                  "finish": ""
              }
          }
        }
    }
"<name of the step>":
  type: "application-run-component-process"
  component: "<component-name>"
  process: "<process name in the component>"
  select-resources-by-tag: "<resources tag uuid>"  # optional
  select-resources-by-changed-component-list:  # optional
    components:
      - "<list of components separated by comma>"
    select-resources:
      - "with-changed-component"
      - "ALL"
  runOnlyOnFirst: false  # optional
  failFast: false  # optional
  maxIteration: "-1"  # optional
  isIgnoreChildWarnings: false  # optional
  on:
    success:
      finish: ""
  • Example-1
    { 
      "run-component-PAC-COMP": {
          "type": "application-run-component-process", 
          "component": "PAC-COMP",
          "process": "deploy-war-to-server",
          "runOnlyOnFirst":false,
          "failFast":false,
          "maxIteration":"-1",
          "isIgnoreChildWarnings":false,
          "on": {
              "success": {
                  "finish": ""
              }
          }
      }
  }
run-component-PAC-COMP:
  type: "application-run-component-process"
  component: "PAC-COMP"
  process: "deploy-war-to-server"
  runOnlyOnFirst: false
  failFast: false
  maxIteration: "-1"
  isIgnoreChildWarnings: false
  on:
    success:
      finish: ""
  • Example-2 : with minimal fields
    {  
      "run-component-PAC-COMP": {
        "type": "application-run-component-process", 
        "component": "PAC-COMP",
        "process": "deploy-war-to-server",
        "on": {
              "success": {
                  "finish": ""
            }
        }
      }
    }
run-component-PAC-COMP:
  type: "application-run-component-process"
  component: "PAC-COMP"
  process: "deploy-war-to-server"
  on:
    success:
      finish: ""

Component Run Component Process

  • This step is applicable within a component process to trigger another component process.
  • The callee component process should be already defined to prevent unexpected behaviour.
  • Syntax
    {
        "<name of the step>": {
          "type": "component-run-component-process",
          "process": "<name of the component process>",
          "on": {
              "success": {
                  "finish": ""
              }
          }
      }
    }
"<name of the step>":
  type: "component-run-component-process"
  process: "<name of the component process>"
  on:
    success:
      finish: ""
  • Example
    {
        "run-a-component-process": {
            "type": "component-run-component-process",
            "process": "DEPLOY-ARTIFACT-COMPONENT-PROCESS",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
    }
run-a-component-process:
  type: "component-run-component-process"
  process: "DEPLOY-ARTIFACT-COMPONENT-PROCESS"
  on:
    success:
      finish: ""

Acquire Lock Step

  • This step acquires a lock on a specified string value. You can use locks to prevent concurrent modification of resources.
  • To release the lock, use the Release lock step. Also, locks are released automatically when the process finishes.
  • This step applies to application processes, component processes, and generic processes.
  • Syntax
  {
    "<name of the step>": {
        "type": "acquire-lock",
        "lock": "<lock-expression>",
        "on": {
            "success": {
                "start": [
                    "<next step>"
                ]
            }
        }
    }
  }
"<name of the step>":
  type: "acquire-lock"
  lock: "<lock-expression>"
  on:
    success:
      start:
        - "<next step>"
  • Example
  {
      "acquire-lock-on-component-resource": {
        "type": "acquire-lock",
        "lock": "${p:component.name}-${p:componentProcess.name}-${p:resource.name}",
        "on": {
            "success": {
                "start": ["RUN-DB-UPGRADE-STEP"]
            }
        }
      }
  }
acquire-lock-on-component-resource:
  type: "acquire-lock"
  lock: "${p:component.name}-${p:componentProcess.name}-${p:resource.name}"
  on:
    success:
      start:
        - "RUN-DB-UPGRADE-STEP"

Release Lock Step

  • This step releases a lock on a specified string value.
  • This step applies to application processes, component processes, and generic processes.
  • Syntax
  {
    "<name of the step>": {
        "type": "release-lock",
        "lock": "<lock-expression>",
        "on": {
            "success": {
                "start": [
                    "<next step>"
                ]
            }
        }
    }
  }
"<name of the step>":
  type: "release-lock"
  lock: "<lock-expression>"
  on:
    success:
      start:
        - "<next step>"
  • Example
  {
      "release-lock-on-component-resource": {
        "type": "release-lock",
        "lock": "${p:component.name}-${p:componentProcess.name}-${p:resource.name}",
        "on": {
            "success": {
                "start": [
                    "DEPLOY-JAR-STEP"
                ]
            }
        }
      }
  }
release-lock-on-component-resource:
  type: "release-lock"
  lock: "${p:component.name}-${p:componentProcess.name}-${p:resource.name}"
  on:
    success:
      start:
        - "DEPLOY-JAR-STEP"

Switch Step

  • At least 1 case is required in the switch step
  • Evaluate is a mandatory field that should have a property which will resolve to a case
  • Applications, components, and generic processes share some process steps.
  • Syntax
  {
    "<name of the step>" : {
        "type": "switch",
        "evaluate": "<property that evaluates to a switch case>",
        "case": {
            "<case-1>": {
                "start": [
                    "<next-step>",
                    "<another-step>"
                ]
            },
            "<case-2>": {
                "start": [
                    "<some-other-step>"
                ]
            },
            "DEFAULT": {         // optional    
                "start": ["<default-step>" ]
            }
        }
    }
  }
"<name of the step>":
  type: "switch"
  evaluate: "<property that evaluates to a switch case>"
  case:
    "<case-1>":
      start:
        - "<next-step>"
        - "<another-step>"
    "<case-2>":
      start:
        - "<some-other-step>"
    DEFAULT:  # optional
      start:
        - "<default-step>"
  • Example
  {
    "Run Necessary Shell based on Request property" : {
        "type": "switch",
        "evaluate": "${p:AppProcessRequestProperty}",
        "case": {
            "1": {
                "start": [
                    "Shell-launch-server",
                    "Shell-start-app"
                ]
            },
            "2": {
                "start": [
                    "Shell-start-service"
                ]
            },
            "DEFAULT": {
                "start": [
                    "shell-say-goodbye"
                ]
            }
        }
      }
  }
"Run Necessary Shell based on Request property":
  type: "switch"
  evaluate: "${p:AppProcessRequestProperty}"
  case:
    "1":
      start:
        - "Shell-launch-server"
        - "Shell-start-app"
    "2":
      start:
        - "Shell-start-service"
    DEFAULT:
      start:
        - "shell-say-goodbye"

Add inventory step

  • This step applies only to component processes.
  • The component resource that the process is running against will have an inventory entry created for it with the specified status.
  • Status is mandatory field
  • Syntax
    {
      "<name of the step>" : {
        "type": "add-inventory-status",
        "status": "<desired-inventory-status>",
        "on": {
            "success": {
                "start": [
                    "<next-step>"
                ]
            }
        }
      }
    }
"<name of the step>":
  type: "add-inventory-status"
  status: "<desired-inventory-status>"
  on:
    success:
      start:
        - "<next-step>"
  • Example
  {
    "add-active-status-to-inventory": {
        "type": "add-inventory-status",
        "status": "Active",
        "on": {
            "success": {
                "start": [
                    "shell-step"
                ]
            }
        }
    }
  }
add-active-status-to-inventory:
  type: "add-inventory-status"
  status: "Active"
  on:
    success:
      start:
        - "shell-step"

Remove Inventory Step

  • This step applies only to component processes.
  • The component resource that the process is running against will have an inventory entry removed from it.
  • status is mandatory
  • Syntax
      { 
        "<name of the step>" : {
          "type": "remove-inventory-status",
          "status": "<inventory-status>",
          "on": {
            "success": {
                "start": "<next-step>"
            }
          }
        }
    }
"<name of the step>":
  type: "remove-inventory-status"
  status: "<inventory-status>"
  on:
    success:
      start: "<next-step>"
  • Example
  {
    "Remove version status":{
        "type": "remove-inventory-status",
        "status": "active",
        "on": {
            "success": {
                "start": "shell-step"
            }
        }
      }
    }
Remove version status:
  type: "remove-inventory-status"
  status: "active"
  on:
    success:
      start: "shell-step"

Add warning Step

  • message is mandatory
  • Syntax
    {
    "<name of the step>" : {
        "type": "add-process-warning",
        "message": "Warning message here..",
        "on": {
            "success": {
                "start": [
                    "<next-step>"
                ]
            }
        }
      }
    }
"<name of the step>":
  type: "add-process-warning"
  message: "Warning message here.."
  on:
    success:
      start:
        - "<next-step>"
  • Example
    {
      "warning about some stuff in process": {
        "type": "add-process-warning",
        "message": "Step may not have worked",
        "on": {
            "success": {
                "start": [
                    "install-web-component"
                ]
            }
        }
      }
    }
warning about some stuff in process:
  type: "add-process-warning"
  message: "Step may not have worked"
  on:
    success:
      start:
        - "install-web-component"

Join step

  • The Join step merges a process so that only 1 step runs at a time.
  • If any of the steps that connect to a Join step fail or do not run, the Join step causes the process to fail.
  • This step applies to application processes, component processes, and generic processes.

  • Syntax

      {
        "<name of the step>": {
            "type": "join",
            "on": {
                "finish": ""
            }
        }
    }
"<name of the step>":
  type: "join"
  on:
    finish: ""
  • Example
    {
        "join-step-1": {
            "type": "join",
            "on": {
                "finish": ""
            }
        }
    }
"<name of the step>":
  type: "join"
  on:
    finish: ""

Application Manual task step

  • This step applies to application processes, component processes, and generic processes.
  • When Deploying user or Role Restriction is not defined in JSON, then ANY-USER can approve the task
  • When multiple approvals are given deploying-user takes precedence over 'role-restrictions' and 'any-user' takes last precedence
  • When deployingUserOnly is set to false or not provided and roleRestrictionData is empty or not provided then 'any-user' can approve the task
  • Syntax
    {
        "<name of the step>": {
        "type": "application-manual-task",
        "deployingUserOnly": "true|false",
        "roleRestrictionData": {
            "roleRestrictions": []
        },
        "notification-template": "<an existing template>", 
        "on": {
            "success": {
                "start": [
                    "<next step>"
                ]
            }
        } 
      }
    }
"<name of the step>":
  type: "application-manual-task"
  deployingUserOnly: "true|false"
  roleRestrictionData:
    roleRestrictions: []
  notification-template: "<an existing template>"
  on:
    success:
      start:
        - "<next step>"
  • Example
    {
      "AUTOMATION-ENGINEER-APPROVAL": {
        "type": "application-manual-task",
        "deployingUserOnly": "false",
        "roleRestrictionData": {
            "contextType": "ENVIRONMENT",
            "roleRestrictions": [
                "Automation Engineer"
            ]
        },
        "notification-template": "TaskCreated",
        "on": {
            "success": {
                "start": [
                    "INSTALL-WEB-COMPONENT"
                ]
            }
        }
      }
    }
AUTOMATION-ENGINEER-APPROVAL:
  type: "application-manual-task"
  deployingUserOnly: "false"
  roleRestrictionData:
    contextType: "ENVIRONMENT"
    roleRestrictions:
      - "Automation Engineer"
  notification-template: "TaskCreated"
  on:
    success:
      start:
        - "INSTALL-WEB-COMPONENT"

Run operational process for multiple components

  • This step applies only to application processes, including application processes that are associated with application templates.

  • Syntax

  {
      "<name of the step>": {
          "type": "run-operational-process-for-multiple-components",
          "name": "<name of the step>",
          "process": "<name of the component process>",
          "select-components-by-tag": "<uuid of the component tag>",
          "select-resources-by-tag":  "<uuid of the resource tag>", 
          "fail-fast": false,// boolean
          "ignore-child-warnings": false,// boolean
          "run-on-first-online-resource-only": false, // boolean
          "max-concurrent-processes": "[unlimited | a positive integer]",
          "max-concurrent-components": "[unlimited | a positive integer]",
          "precondition-script": "\"TRUE\"", 
          "on": {
              "success": {
                  "finish": ""
              }
          }
      }
  }
"<name of the step>":
  type: "run-operational-process-for-multiple-components"
  name: "<name of the step>"
  process: "<name of the component process>"
  select-components-by-tag: "<uuid of the component tag>"
  select-resources-by-tag: "<uuid of the resource tag>"
  fail-fast: false
  ignore-child-warnings: false
  run-on-first-online-resource-only: false
  max-concurrent-processes: "[unlimited | a positive integer]"
  max-concurrent-components: "[unlimited | a positive integer]"
  precondition-script: "\"TRUE\""
  on:
    success:
      finish: ""
  • Example-1
  {
      "OPERATIONAL-PROCESS-FOR-COMPONENTS": {
          "type": "run-operational-process-for-multiple-components",
          "name": "OPERATIONAL-PROCESS-FOR-COMPONENTS",
          "process": "DEPLOY",
          "select-components-by-tag": "18f4db6a-3bd2-49eb-e7fb-54bf51ab515e", // tag id 
          "select-resources-by-tag": "18fbe8da-3fd0-8fa3-1487-baa0fc330049", // tag id 
          "fail-fast": true,
          "ignore-child-warnings": true,
          "run-on-first-online-resource-only": false,
          "max-concurrent-processes": "unlimited",
          "max-concurrent-components": "100",
          "precondition-script": "\"TRUE\"",
          "on": {
              "success": {
                  "finish": ""
              }
          }
      }
  }
OPERATIONAL-PROCESS-FOR-COMPONENTS:
  type: "run-operational-process-for-multiple-components"
  name: "OPERATIONAL-PROCESS-FOR-COMPONENTS"
  process: "DEPLOY"
  select-components-by-tag: "18f4db6a-3bd2-49eb-e7fb-54bf51ab515e" # tag id
  select-resources-by-tag: "18fbe8da-3fd0-8fa3-1487-baa0fc330049" # tag id
  fail-fast: true
  ignore-child-warnings: true
  run-on-first-online-resource-only: false
  max-concurrent-processes: "unlimited"
  max-concurrent-components: "100"
  precondition-script: "\"TRUE\""
  on:
    success:
      finish: ""
  • Example-2
  {
      "OPERATIONAL-PROCESS-FOR-COMPONENTS": {
          "type": "run-operational-process-for-multiple-components",
          "process": "DEPLOY",
          "fail-fast": true,
          "ignore-child-warnings": true,
          "run-on-first-online-resource-only": false,
          "max-concurrent-processes": "unlimited",
          "max-concurrent-components": "unlimited",
          "on": {
              "success": {
                  "finish": ""
              }
          }
      }
  }   
OPERATIONAL-PROCESS-FOR-COMPONENTS:
  type: "run-operational-process-for-multiple-components"
  process: "DEPLOY"
  fail-fast: true
  ignore-child-warnings: true
  run-on-first-online-resource-only: false
  max-concurrent-processes: "unlimited"
  max-concurrent-components: "unlimited"
  on:
    success:
      finish: ""

Rollback Multiple Components step

  • Use this step to roll back multiple component versions to versions in a snapshot or to versions that were deployed when the process began. The multiple components are based on component tags or resource tags.
  • This step applies only to application processes, including application processes that are associated with application templates.

  • Syntax

    {
      "<name of the step>": {
        "type": "rollback-multiple-components",
        "process": "<name of the component process>",
        "rollback-type": "[remove-undesired-incremental-versions | replace-with-last-deployed]",
        "select-versions-with-inventory-status": "<a valid version inventory status, usually it is set as ACTIVE>",
        "select-components-by-tag": "<component tag>",
        "fail-fast": "true | false",
        "ignore-child-warnings": "true | false",
        "max-concurrent-processes": "[unlimited | a positive integer]",
        "max-concurrent-components": "[unlimited | a positive integer]",
        "on": {
          "success": {
            "finish": ""
          }
        }
      }
    }
<name of the step>:
  type: "rollback-multiple-components"
  process: "<name of the component process>"
  rollback-type: "[remove-undesired-incremental-versions | replace-with-last-deployed]"
  select-versions-with-inventory-status: "<a valid version inventory status, usually it is set as ACTIVE>"
  select-components-by-tag: "<component tag>"
  fail-fast: "[true | false]"
  ignore-child-warnings: "[true | false]"
  max-concurrent-processes: "[unlimited | a positive integer]"
  max-concurrent-components: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""
  • Example
    {
      "rollback multiple steps": {
        "type": "rollback-multiple-components",
        "process": "ROLLBACK-VERSION",
        "rollback-type": "remove-undesired-incremental-versions",
        "select-versions-with-inventory-status": "Active",
        "select-components-by-tag": "18f4db6a-3bd2-49eb-e7fb-54bf51ab515e", // tag id 
        "fail-fast": false,
        "ignore-child-warnings": false,
        "max-concurrent-processes": "unlimited",
        "max-concurrent-components": "100",
        "on": {
          "success": {
            "finish": ""
          }
        }
      }
  }
rollback multiple steps:
  type: "rollback-multiple-components"
  process: "ROLLBACK-VERSION"
  rollback-type: "remove-undesired-incremental-versions"
  select-versions-with-inventory-status: "Active"
  select-components-by-tag: "18f4db6a-3bd2-49eb-e7fb-54bf51ab515e" # tag id
  fail-fast: false
  ignore-child-warnings: false
  max-concurrent-processes: "unlimited"
  max-concurrent-components: "100"
  on:
    success:
      finish: ""

Rollback Component

This step applies only to application processes. - Syntax

    { 
        "<name of the step>": {
            "type": "rollback-component",
            "component": "<component name>",
            "process": "<component process name>",
            "rollback-type": "[remove-undesired-incremental-versions | replace-with-last-deployed]",
            "select-versions-with-inventory-status": "<a valid version inventory status, usually it is set as ACTIVE>",
            "fail-fast": false,  // boolean
            "ignore-child-warnings": "true | false",
            "max-concurrent-processes": "[unlimited | a positive integer]",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
  } 
<name of the step>:
  type: "rollback-component"
  component: "<component name>"
  process: "<component process name>"
  rollback-type: "[remove-undesired-incremental-versions | replace-with-last-deployed]"
  select-versions-with-inventory-status: "<a valid version inventory status, usually it is set as ACTIVE>"
  fail-fast: false
  ignore-child-warnings: "<true | false>"
  max-concurrent-processes: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""
  • Example
      { 
        "Rollback PAC-COMP": {
            "type": "rollback-component",
            "component": "PAC-COMP",
            "process": "DEPLOY-MYCOMP",
            "rollback-type": "remove-undesired-incremental-versions",
            "select-versions-with-inventory-status": "Active",
            "fail-fast": false,
            "ignore-child-warnings": false,
            "max-concurrent-processes": "unlimited",
            "properties": {
                "allowFailure": "false",
                "isIgnoreChildWarnings": "false",
            },
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
    }
Rollback PAC-COMP:
  type: "rollback-component"
  component: "PAC-COMP"
  process: "DEPLOY-MYCOMP"
  rollback-type: "remove-undesired-incremental-versions"
  select-versions-with-inventory-status: "Active"
  fail-fast: false
  ignore-child-warnings: false
  max-concurrent-processes: "unlimited"
  properties:
    allowFailure: "false"
    isIgnoreChildWarnings: "false"
  on:
    success:
      finish: ""

Uninstall Component

  • Applications, components, and generic processes share some process steps. This step applies only to application processes.

  • Syntax

  {
      "<name of the step>": {
        "type": "uninstall-component",
        "component": "<component name>",
        "process": "<uninstall process name>",
        "select-versions": "[selected-with-process | all-versions]",
        "select-versions-with-inventory-status": "<version status in inventory usually set to ACTIVE>",
        "fail-fast": "true | false",
        "ignore-child-warnings": "true | false",
        "max-concurrent-processes": "[unlimited | a positive integer]",
        "on": {
            "success": {
                "finish": ""
            }
        }
    }
  }
<name of the step>:
  type: "uninstall-component"
  component: "<component name>"
  process: "<uninstall process name>"
  select-versions: "[selected-with-process | all-versions]"
  select-versions-with-inventory-status: "<version status in inventory usually set to ACTIVE>"
  fail-fast: "true | false"
  ignore-child-warnings: "true | false"
  max-concurrent-processes: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""
  • Example
  {
      "Uninstall-PAC-COMP": {
        "type": "uninstall-component",
        "component": "PAC-COMP",
        "process": "ROLLBACK",
        "select-versions": "selected-with-process",
        "select-versions-with-inventory-status": "Active",
        "fail-fast": false,
        "ignore-child-warnings": false,
        "max-concurrent-processes": "unlimited",
        "properties": {
            "allowFailure": "false",
            "isIgnoreChildWarnings": "false",
        },
        "on": {
            "success": {
                "finish": ""
            }
        }
    }
  }
Uninstall-PAC-COMP:
  type: "uninstall-component"
  component: "PAC-COMP"
  process: "ROLLBACK"
  select-versions: "selected-with-process"
  select-versions-with-inventory-status: "Active"
  fail-fast: false
  ignore-child-warnings: false
  max-concurrent-processes: "unlimited"
  properties:
    allowFailure: "false"
    isIgnoreChildWarnings: "false"
  on:
    success:
      finish: ""

Uninstall Multiple Components

  • This step applies only to application processes, including application processes that are associated with application templates

  • Syntax

    { 
        "<name of the step>": {
            "type": "uninstall-multiple-components",
            "process": "<component process name>",
            "select-versions": "[selected-with-process | all-versions]",
            "select-versions-with-inventory-status": "<version status in inventory usually set to ACTIVE>",
            "select-components-by-tag": "<uuid of the component tag>",
            "select-resources-by-tag": "<uuid of the resources tag>",
            "fail-fast": "true | false",
            "ignore-child-warnings": "true | false",
            "max-concurrent-processes": "[unlimited | a positive integer]",
            "max-concurrent-components": "[unlimited | a positive integer]",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
    }
<name of the step>:
  type: "uninstall-multiple-components"
  process: "<component process name>"
  select-versions: "[selected-with-process | all-versions]"
  select-versions-with-inventory-status: "<version status in inventory usually set to ACTIVE>"
  select-components-by-tag: "<uuid of the component tag>"
  select-resources-by-tag: "<uuid of the resources tag>"
  fail-fast: "true | false"
  ignore-child-warnings: "true | false"
  max-concurrent-processes: "[unlimited | a positive integer]"
  max-concurrent-components: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""
  • Example
{ 
    "uninstall-multiple-components": {
        "type": "uninstall-multiple-components",
        "process": "REMOVE-VERSION",
        "select-versions": "selected-with-process",
        "select-versions-with-inventory-status": "Active",
        "select-components-by-tag": "18f4db6a-3bd2-49eb-e7fb-54bf51ab515e", //tag id 
        "select-resources-by-tag": "18fbe8da-3fd0-8fa3-1487-baa0fc330049", // tag id 
        "fail-fast": false,
        "ignore-child-warnings": false,
        "max-concurrent-processes": "[unlimited | a positive integer]",
        "max-concurrent-components": "[unlimited | a positive integer]",
        "on": {
            "success": {
                "finish": ""
            }
        }
    }
}
uninstall-multiple-components:
  type: "uninstall-multiple-components"
  process: "REMOVE-VERSION"
  select-versions: "selected-with-process"
  select-versions-with-inventory-status: "Active"
  select-components-by-tag: "18f4db6a-3bd2-49eb-e7fb-54bf51ab515e" # tag id
  select-resources-by-tag: "18fbe8da-3fd0-8fa3-1487-baa0fc330049" # tag id
  fail-fast: false
  ignore-child-warnings: false
  max-concurrent-processes: "[unlimited | a positive integer]"
  max-concurrent-components: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""

Install Component

  • This step applies only to application processes.

  • Syntax

{
   "<name of the step>" : {
    "type": "install-component",
    "component": "<component name>",
    "process": "<component process name>",
    "select-versions-without-inventory-status": "<version status in inventory usually set to ACTIVE>",
    "select-resources-by-tag": "<uuid of the resource tag>",
    "fail-fast": false,  // boolean
    "ignore-child-warnings": false, // boolean 
    "max-concurrent-processes": "[unlimited | a positive integer]",
    "on": {
        "success": {
            "finish": ""
        }
    }
  }
}
<name of the step>:
  type: "install-component"
  component: "<component name>"
  process: "<component process name>"
  select-versions-without-inventory-status: "<version status in inventory usually set to ACTIVE>"
  select-resources-by-tag: "<uuid of the resource tag>"
  fail-fast: false  # boolean
  ignore-child-warnings: false  # boolean
  max-concurrent-processes: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""
  • Example
      {
          "Install PAC-COMP": {
            "type": "install-component",
            "component": "PAC-COMP",
            "process": "DEPLOY-MYCOMP",
            "select-versions-without-inventory-status": "Active",
            "select-resources-by-tag": "18fbe8da-3fd0-8fa3-1487-baa0fc330049",
            "fail-fast": false,
            "ignore-child-warnings": true,
            "max-concurrent-processes": "unlimited",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
      }
<name of the step>:
  type: "install-component"
  component: "<component name>"
  process: "<component process name>"
  select-versions-without-inventory-status: "<version status in inventory usually set to ACTIVE>"
  select-resources-by-tag: "<uuid of the resource tag>"
  fail-fast: false  # boolean
  ignore-child-warnings: false  # boolean
  max-concurrent-processes: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""

Install Multiple Components

  • his step applies only to application processes, including application processes that are associated with application templates.

  • Syntax

      { 
          "<name of the step>": {
            "type": "install-multiple-components",
            "process": "<component process>",
            "select-versions-without-inventory-status": "<version status in inventory usually set to ACTIVE>",
            "select-components-by-tag": "<uuid of the component tag>", // optional
            "select-resources-by-tag": "<uuid of the resource tag>", // optional
            "fail-fast": "true | false",
            "ignore-child-warnings": "true | false",
            "max-concurrent-processes": "[unlimited | a positive integer]",
            "max-concurrent-components": "[unlimited | a positive integer]",
            "on": {
                "success": {
                    "finish": ""
                }
            }
          }
      }
<name of the step>:
  type: "install-multiple-components"
  process: "<component process>"
  select-versions-without-inventory-status: "<version status in inventory usually set to ACTIVE>"
  select-components-by-tag: "<uuid of the component tag>" # optional
  select-resources-by-tag: "<uuid of the resource tag>" # optional
  fail-fast: "<true | false>"
  ignore-child-warnings: "<true | false>"
  max-concurrent-processes: "<unlimited | a positive integer>"
  max-concurrent-components: "<unlimited | a positive integer>"
  on:
    success:
      finish: ""
  • Example
      { 
          "install-multiple components": {
            "type": "install-multiple-components",
            "process": "install-version",
            "select-versions-without-inventory-status": "Active",
            "select-components-by-tag": "18f4db6a-3bd2-49eb-e7fb-54bf51ab515e", // tag id 
            "select-resources-by-tag": "18fbe8da-3fd0-8fa3-1487-baa0fc330049", // tag id 
            "fail-fast": false,
            "ignore-child-warnings": false,
            "max-concurrent-processes": "unlimited",
            "max-concurrent-components": "100",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
      }
install-multiple components:
  type: "install-multiple-components"
  process: "install-version"
  select-versions-without-inventory-status: "Active"
  select-components-by-tag: "18f4db6a-3bd2-49eb-e7fb-54bf51ab515e" # tag id
  select-resources-by-tag: "18fbe8da-3fd0-8fa3-1487-baa0fc330049" # tag id
  fail-fast: false
  ignore-child-warnings: false
  max-concurrent-processes: "unlimited"
  max-concurrent-components: "100"
  on:
    success:
      finish: ""

Run process for each version

  • This step applies only to application processes, including application processes that are associated with application templates.

  • Syntax

    {
        "<name o the step>": {
            "type": "run-process-for-each-version",
            "component": "<component name>",
            "process": "<process name>",
            "fail-fast": "true | false",
            "ignore-child-warnings": "true | false",
            "run-on-first-online-resource-only": false ,// boolean
            "max-concurrent-processes": "[unlimited | a positive integer]",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
    }
<name of the step>:
  type: "run-process-for-each-version"
  component: "<component name>"
  process: "<process name>"
  fail-fast: "true | false"
  ignore-child-warnings: "true | false"
  run-on-first-online-resource-only: false # boolean
  max-concurrent-processes: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""
  • Example
    {
        "Run process for each version": {
            "type": "run-process-for-each-version",
            "component": "PAC-COMP",
            "process": "DEPLOY-MYCOMP",
            "fail-fast": false,
            "ignore-child-warnings": false,
            "run-on-first-online-resource-only": false,
            "max-concurrent-processes": "unlimited",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
    }
Run process for each version:
  type: "run-process-for-each-version"
  component: "PAC-COMP"
  process: "DEPLOY-MYCOMP"
  fail-fast: false
  ignore-child-warnings: false
  run-on-first-online-resource-only: false
  max-concurrent-processes: "unlimited"
  on:
    success:
      finish: ""

Run process for each agent

  • This step applies only to application processes, including application processes that are associated with application templates.
  • A whole process is contained within this step which has its own start and finish steps.

  • Syntax

    {
        "<name of the step>": {
            "type": "for-each-agent",
            "child-process": "<process json that has to run on each agent>",
            "tag": [], // zero or more tag ids within quotes separated by comma
            "max-concurrent-agents": "[unlimited | a positive integer]",
            "on": {
                "success": {
                    "start": [
                        "step-1"
                    ]
                }
            }
        }
    }
<name of the step>:
  type: "for-each-agent"
  child-process: "<process json that has to run on each agent>"
  tag: []  # zero or more tag ids within quotes separated by comma
  max-concurrent-agents: "[unlimited | a positive integer]"
  on:
    success:
      start:
        - "step-1"
  • Example
    {
        "APPLY-CONFIG-TOAGENT": {
            "type": "for-each-agent",
            "child-process": {
                "start": {
                    "type": "start",
                    "start": [
                        "APPLY CONFIG TO AGENT"
                    ]
                },
                "APPLY CONFIG TO AGENT": {
                    "type": "apply-configuration",
                    "component": "PAC-COMP",
                    "process": "LESS-COMPREHENSIVE-PROCESS",
                    "fail-fast": false,
                    "ignore-child-warnings": false,
                    "max-concurrent-processes": "unlimited",
                    "properties": {
                        "allowFailure": "false",
                        "activity.componentProcess.id": "19125c59-269d-43dd-4010-d6d0abc3ebad",
                        "isIgnoreChildWarnings": "false",
                        "activity.component.id": "19125ba9-b2b6-6b45-d6f7-9a97f4adb386"
                    },
                    "on": {
                        "success": {
                            "finish": ""
                        }
                    }
                }
            },
            "tag": [],
            "max-concurrent-agents": "unlimited",
            "on": {
                "success": {
                    "start": [
                        "step-1"
                    ]
                }
            }
        }
    }
APPLY-CONFIG-TOAGENT:
  type: "for-each-agent"
  child-process:
    start:
      type: "start"
      start:
        - "APPLY CONFIG TO AGENT"
    APPLY CONFIG TO AGENT:
      type: "apply-configuration"
      component: "PAC-COMP"
      process: "LESS-COMPREHENSIVE-PROCESS"
      fail-fast: false
      ignore-child-warnings: false
      max-concurrent-processes: "unlimited"
      properties:
        allowFailure: "false"
        activity.componentProcess.id: "19125c59-269d-43dd-4010-d6d0abc3ebad"
        isIgnoreChildWarnings: "false"
        activity.component.id: "19125ba9-b2b6-6b45-d6f7-9a97f4adb386"
      on:
        success:
          finish: ""
  tag: []
  max-concurrent-agents: "unlimited"
  on:
    success:
      start:
        - "step-1"

Run process for each resource

  • Syntax
    {
        "RESOURCE-TAG": {
            "type": "for-each-resource-tag",
            "child-process": "<process json for child process>",
            "tag": [
                "<tag>"
            ],
            "max-concurrent-tags": "1",
            "on": {
                "success": {
                    "start": [
                        "<another step>"
                    ]
                }
            }
        }
  }
RESOURCE-TAG:
  type: "for-each-resource-tag"
  child-process: "<process json for child process>"
  tag:
    - "<tag>"
  max-concurrent-tags: "1"
  on:
    success:
      start:
        - "<another step>"
  • Example
    {
        "RESOURCE-TAG": {
            "type": "for-each-resource-tag",
            "child-process": {
                "start": {
                    "type": "start",
                    "start": [
                        "APPLY CONFIG TO RESOURCE"
                    ]
                },
                "APPLY CONFIG TO RESOURCE": {
                    "type": "apply-configuration",
                    "component": "PAC-COMP",
                    "process": "LESS-COMPREHENSIVE-PROCESS",
                    "fail-fast": false,
                    "ignore-child-warnings": false,
                    "max-concurrent-processes": "unlimited",
                    "on": {
                        "success": {
                            "finish": ""
                        }
                    }
                }
            },
            "tag": [
                "18fbe8da-3fd0-8fa3-1487-baa0fc330049" // tag ids
            ],
            "max-concurrent-tags": "1",
            "on": {
                "success": {
                    "start": [
                        "adac686c3f11c4a23984edf190bb0f"
                    ]
                }
            }
        }
    }
RESOURCE-TAG:
  type: "for-each-resource-tag"
  child-process:
    start:
      type: "start"
      start:
        - "APPLY CONFIG TO RESOURCE"
    APPLY CONFIG TO RESOURCE:
      type: "apply-configuration"
      component: "PAC-COMP"
      process: "LESS-COMPREHENSIVE-PROCESS"
      fail-fast: false
      ignore-child-warnings: false
      max-concurrent-processes: "unlimited"
      on:
        success:
          finish: ""
  tag:
    - "18fbe8da-3fd0-8fa3-1487-baa0fc330049" # tag ids
  max-concurrent-tags: "1"
  on:
    success:
      start:
        - "adac686c3f11c4a23984edf190bb0f"

Apply Configuration step

  • This step applies only to application processes.
  • This step runs a component process of the type Operational (No Version Needed) or Configuration Deployment.
  • Syntax
    { 
        "<name of the step>": {
            "type": "apply-configuration",
            "component": "<component name>",
            "process": "<component process name>",
            "fail-fast": false, // boolean value
            "ignore-child-warnings": false, // boolean value 
            "max-concurrent-processes": "[unlimited | a positive integer]",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
    }
<name of the step>:
  type: "apply-configuration"
  component: "<component name>"
  process: "<component process name>"
  fail-fast: false  # boolean value
  ignore-child-warnings: false  # boolean value
  max-concurrent-processes: "[unlimited | a positive integer]"
  on:
    success:
      finish: ""
  • Example
    { 
        "Apply-config-operation": {
            "type": "apply-configuration",
            "component": "PAC-COMP",
            "process": "LESS-COMPREHENSIVE-PROCESS",
            "fail-fast": false,
            "ignore-child-warnings": false,
            "max-concurrent-processes": "unlimited",
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
    }
Apply-config-operation:
  type: "apply-configuration"
  component: "PAC-COMP"
  process: "LESS-COMPREHENSIVE-PROCESS"
  fail-fast: false
  ignore-child-warnings: false
  max-concurrent-processes: "unlimited"
  on:
    success:
      finish: ""

Generic Manual step

  • Syntax
    { 
    "<name of the step>": {
          "type": "generic-manual-task",
          "restrict-approval-to": {
              "[ deploying-user | identities ]": {  "users": [ "<user-1>", "<user-n>"], "groups": ["<group-1>"] }
          },
          "notification-template": "TaskCreated",
          "comment-required": false,
          "on": {
              "success": {
                  "finish": ""
              }
          }
      }
    }
<name of the step>:
  type: "generic-manual-task"
  restrict-approval-to:
    "[ deploying-user | identities ]":
      users:
        - "<user-1>"
        - "<user-n>"
      groups:
        - "<group-1>"
  notification-template: "TaskCreated"
  comment-required: false
  on:
    success:
      finish: ""
  • When the approval restriction is set to "deploying-user" not value is required for that field
  • Apart from setting approval to "deploying-user", one may also choose selected users or groups of a combination of both
  • Example-1 with approval restricted to 'deploying user'
    { 
      "MANUAL-TASKS": {
          "type": "generic-manual-task",
          "restrict-approval-to": {
              "deploying-user": ""
          },
          "notification-template": "TaskCreated",
          "comment-required": false,
          "on": {
              "success": {
                  "finish": ""
              }
          }
      }
    }  
MANUAL-TASKS:
  type: "generic-manual-task"
  restrict-approval-to:
    deploying-user: ""
  notification-template: "TaskCreated"
  comment-required: false
  on:
    success:
      finish: ""
  • Example-2 with approval restricted to identities
  • In this example the restriction is set to users 'deploy', 'admin' and group 'Administrators'.
      { 
        "MANUAL-TASKS": {
            "type": "generic-manual-task",
            "restrict-approval-to": {
                "identities": {
                    "users": [
                        "deploy",
                        "admin"
                    ],
                    "groups": [
                        "Administrators"
                    ]
                }
            }
        }  
      }
MANUAL-TASKS:
  type: "generic-manual-task"
  restrict-approval-to:
    identities:
      users:
        - "deploy"
        - "admin"
      groups:
        - "Administrators"
  • Example-3 with property definitions
        { 
          "MANUAL-TASKS": {
            "type": "generic-manual-task",
            "restrict-approval-to": {
                "identities": {
                    "users": [
                        "deploy",
                        "admin"
                    ],
                    "groups": [
                        "Administrators"
                    ]
                }
            },
            "notification-template": "TaskCreated",
            "comment-required": true,
            "comment-prompt": "HEY,APPROVE THIS",
            "property-definition": [
                {
                    "property-name": "TEXT-PROPERTY",
                    "property-type": "text",
                    "label": "DUMMY-LABEL",
                    "description": "DUMMY-DESCRIPTION",
                    "default": "TEXT-VALUE"
                },
                {
                    "property-name": "TEXT-AREA-PROPERTY",
                    "property-type": "text-area",
                    "label": "TEXT-AREA-LABEL",
                    "description": "TEXT-AREA-DESCRIPTION",
                    "required": true,
                    "default": "HEY-HEY"
                },
                {
                    "property-name": "CHECKBOX-PROPERTY",
                    "property-type": "checkbox",
                    "label": "CHECKBOX-LABEL",
                    "description": "CHECKBOX-DESCRIPTION",
                    "default": true
                },
                {
                    "property-name": "SELECT-PROPERTY",
                    "property-type": "select",
                    "values": [
                        {
                            "label": "TRUE",
                            "selected": true,
                            "value": "TRUE"
                        },
                        {
                            "label": "FALSE",
                            "value": "FALSE"
                        }
                    ],
                    "label": "SELECT-LABEL",
                    "description": "SELECT-DESCRIPTION"
                },
                {
                    "property-name": "MULTI-SELECT",
                    "property-type": "multi-select",
                    "values": [
                        {
                            "label": "START",
                            "selected": true,
                            "value": "START"
                        },
                        {
                            "label": "FINISH",
                            "value": "FINISH"
                        },
                        {
                            "label": "COMPLETE",
                            "value": "COMPLETE"
                        }
                    ],
                    "label": "MULTI-SELECT-LABEL",
                    "description": "MULTI-SELECT-DESCRIPTION"
                },
                {
                    "property-name": "SECURE-PROPERTY",  // secure properties is unsupported as there is no way to handle encrypt/decrypt secure values
                    "property-type": "secure",
                    "label": "SECURE-LABEL",
                    "description": "SECURE-DESCRIPTION",
                    "default": "****"
                },
                {
                    "property-name": "DATE-TIME-PROPERTY",
                    "property-type": "date-time",
                    "label": "DATE-TIME-PROPERTY-LABEL",
                    "description": "DATE-TIME-PROPERTY-DESCRIPTION",
                    "default": "30/08/2024 19:22"   // date time has to be in this format
                }
            ],
            "on": {
                "success": {
                    "finish": ""
                }
            }
        }
      }
MANUAL-TASKS:
  type: "generic-manual-task"
  restrict-approval-to:
    identities:
      users:
        - "deploy"
        - "admin"
      groups:
        - "Administrators"
  notification-template: "TaskCreated"
  comment-required: true
  comment-prompt: "HEY,APPROVE THIS"
  property-definition:
    - property-name: "TEXT-PROPERTY"
      property-type: "text"
      label: "DUMMY-LABEL"
      description: "DUMMY-DESCRIPTION"
      default: "TEXT-VALUE"
    - property-name: "TEXT-AREA-PROPERTY"
      property-type: "text-area"
      label: "TEXT-AREA-LABEL"
      description: "TEXT-AREA-DESCRIPTION"
      required: true
      default: "HEY-HEY"
    - property-name: "CHECKBOX-PROPERTY"
      property-type: "checkbox"
      label: "CHECKBOX-LABEL"
      description: "CHECKBOX-DESCRIPTION"
      default: true
    - property-name: "SELECT-PROPERTY"
      property-type: "select"
      values:
        - label: "TRUE"
          selected: true
          value: "TRUE"
        - label: "FALSE"
          value: "FALSE"
      label: "SELECT-LABEL"
      description: "SELECT-DESCRIPTION"
    - property-name: "MULTI-SELECT"
      property-type: "multi-select"
      values:
        - label: "START"
          selected: true
          value: "START"
        - label: "FINISH"
          value: "FINISH"
        - label: "COMPLETE"
          value: "COMPLETE"
      label: "MULTI-SELECT-LABEL"
      description: "MULTI-SELECT-DESCRIPTION"
    - property-name: "SECURE-PROPERTY"
      property-type: "secure"
      label: "SECURE-LABEL"
      description: "SECURE-DESCRIPTION"
      default: "****"
    - property-name: "DATE-TIME-PROPERTY"
      property-type: "date-time"
      label: "DATE-TIME-PROPERTY-LABEL"
      description: "DATE-TIME-PROPERTY-DESCRIPTION"
      default: "30/08/2024 19:22"
  on:
    success:
      finish: ""