Skip to content

Using Json Structure

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 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 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

  • 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 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 an Application Process
    Syntax:
    upload-application-process <username> <password> <server-url> <input-file>
    Example:
    upload-application-process myuser mypassword https://url:8443 myApplicationProcess.json

  • 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 Process file

  • A process file has below a structure
  {
    "[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 ...>"
      }
  }     
  • 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.."
      }
    } 

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 3 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"]
      }
    }
  }
  1. Examples of events calling the finish step
  2. Example-1
  {
  "on" : {
    "success" : {
        "finish" : ""
      }
   }
  }
  • Example-2
  {
     "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.

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>",
        "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",
     "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>",
                ]
            }
        }
    }
  • Example
     {
       "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": ""
              }
          }
        }
     }

  • 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": ""
              }
          }
       }
   }
  • 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": ""
             }
        }
      }
    }

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": ""
              }
          }
      }
    }
  • Example
    {
        "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>"
                ]
            }
        }
     }
   }
  • 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"]
            }
        }
      }
   }

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>"
                ]
            }
        }
    }
  }
  • 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"
                ]
            }
        }
      }
  }

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>" ]
            }
        }
     }
   }
  • 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"
                ]
            }
        }
      }
   }

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>"
                ]
            }
        }
      }
    }
  • example
   {
    "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>"
            }
          }
        }
     }
  • Example
   {
    "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>"
                ]
            }
        }
      }
    }
  • Example
    {
      "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": ""
            }
        }
     }

  • Example
     {
        "join-step-1": {
            "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>"
                ]
            }
        } 
      }
    }
  • 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"
                ]
            }
        }
      }
    }

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": ""
               }
           }
       }
   }
  • 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": ""
               }
           }
       }
   }
  • 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": ""
               }
           }
       }
   }   

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": ""
          }
        }
      }
    }
  • 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 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": ""
                }
            }
        }
   } 
  • 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": ""
                }
            }
        }
     }

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

  • 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 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": ""
                }
            }
        }
    }
  • 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": ""
                }
            }
        }
    }

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": ""
            }
        }
      }
    }
  • 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": ""
                }
            }
        }
      }

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": ""
                }
            }
          }
       }
  • 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": ""
                }
            }
         }
       }

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": ""
                }
            }
        }
     }
  • 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 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"
                    ]
                }
            }
        }
    }
  • 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"
                    ]
                }
            }
        }
    }

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

  • 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"
                    ]
                }
            }
        }
     }

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": ""
                }
            }
        }
     }
  • 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": ""
                }
            }
        }
     }

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": ""
              }
          }
       }
    }
  • 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": ""
               }
           }
       }
     }  
  • 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"
                    ]
                }
            }
         }  
      }
  • 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": ""
                }
            }
         }
      }