Control-M for Event-Driven Workflows

Control-M for Event-Driven Workflows captures events from third-party message brokers to automatically trigger Control-M workflows in real time. An Event Handler connects to external queues in the message brokers. It then consumes the messages from the queues and triggers one or more of the following Control-M actions:

  • Runs an existing folder

  • Creates and runs folders or jobs dynamically

  • Creates a Control-M event

The integration is OpenTelemetry-ready to enable third-party monitoring solutions to collect and export metrics, logs, and traces.

Control-M for Event-Driven Workflows Architecture

The following diagram shows Control-M for Event-Driven Workflows architecture.

A third-party application sends a message to one or more of the following message brokers:

  • Kafka

  • Amazon SQS

  • RabbitMQ

  • Azure Service Bus

Control-M for Event-Driven Workflows contains an Event Handler, which uses a listener to detect and consume messages from the queues defined in a configuration file. The configuration file in the Event Handler defines the connection details to the relevant services and their queues, as well as the action that is triggered in Control-M. The action triggered in Control-M is defined in a template file that is referenced in the queue configuration file.

Installing Control-M for Event-Driven Workflows

This procedure describes how to install a single deployment. If you have multiple deployments, repeat this procedure for each deployment.

Working knowledge of Kubernetes is required to perform this procedure.

Before You Begin

  • Verify that you have a Kubernetes cluster configured.

  • Verify that you have access to a local host where the kubectl cli and Helm are configured.

  • Verify that Control-M Automation API 9.0.22.050 is installed, as described in Setting Up the API.

  • Verify that Control-M 9.0.22 or higher is installed.

  • Verify that one or more of the following messaging solutions are accessible from the Event Handler:

    • Kafka

    • Amazon SQS

    • RabbitMQ

    • Azure Service Bus

Begin

  1. From your Kubernetes cluster, allocate an existing namespace or create a new one.

    Type the following to create a new namespace:

    kubectl create ns <namespace>

    Where:

    <namespace> is a Kubernetes mechanism to isolate groups of resources that contain the configuration, templates, secrets, pods and deployments related to the Event Handler.

  2. (Optional) Type the following command to set the kubectl context with the access parameters that kubectl utilizes to connect to the Kubernetes cluster:

    kubectl config set-context --current --namespace=<namespace name>

    Where:

    <namespace> is a Kubernetes mechanism to isolate groups of resources that contain the configuration, templates, secrets, pods and deployments related to the Event Handler.

  3. Create a queue configuration file named queues.yml on the local host, as described in Queue Configuration File.

  4. Create Kubernetes Secrets and ensure that the queue configuration file references the keys stored in the Kubernetes Secrets, as described in Secrets.

    Credentials must be provided in the queue configuration file as Kubernetes Secrets in key-value format.

  5. Run the following command in the Kubernetes cluster to create a ConfigMap from the queue configuration file:

    kubectl create configmap <ConfigMap name> --from-file=<queue configuration filename> --namespace=<namespace name>

    Where:

    • <ConfigMap name> is the ConfigMap created from the queue configuration file.

    • <queue configuration filename> is the full path and name of the configuration file.

    • <namespace> is a Kubernetes mechanism to isolate groups of resources that contain the configuration, templates, secrets, pods and deployments related to the Event Handler.

    Copy
    kubectl create configmap your-Event-Handler-config --from-file=pathtofile/queues.yml --namespace your-namespace
  6. Create template files in a templates directory on the same local host, as described in Template Files.

    The template filename must be in the following format:

    <queue_name>_body.json

  7. Run the following command in the Kubernetes cluster to create a ConfigMap from the template files in the template directory:

    kubectl create configmap <ConfigMap name> --from-file=<template directory> --namespace=<namespace name>

    Where:

    • <ConfigMap name> is the ConfigMap created from the template files in the template directory.

    • <template directory> is the full path and name of the template directory.

    • <namespace> is a Kubernetes mechanism to isolate groups of resources that contain the configuration, templates, secrets, pods and deployments related to the Event Handler.

    Copy
    kubectl create configmap your-Event-Handler-templates --from-file=pathtodirectory/templates --namespace your-namespace
  8. (mTLS only) Place your mTLS certificates and keys in a secrets directory on the same local host.

  9. (mTLS only) Run the following command in the Kubernetes cluster to create a Secret from the files in the secrets directory:

    kubectl create secret generic event-handler-certificates --from-file=<secrets directory> --namespace=<namespace name>

    Where:

    • <secrets directory> is the directory that contains files with the secrets.

    • <namespace> is a Kubernetes mechanism to isolate groups of resources that contain the configuration, templates, secrets, pods and deployments related to the Event Handler.

  10. Deploy the image in the Kubernetes cluster with a Helm chart, as described in Deploying the Event Handler Image with a Helm Chart.

Queue Configuration File

The queue configuration file contains the queue connection information and the actions to trigger in Control-M.

The file consists of the following sections:

The following example shows a queue configuration file for RabbitMQ, Kafka, Amazon SQS, and Azure Service Bus.

Copy
event_queues:
  - name: rmqueue1
    type: rabbitmq
    format: text
    connection:
      server: dba-tlv-ab2cd.bmc.com
      port: 5672
      vhost: vhost1
      credentials: RMQ_USER1                          
    action:
      type: setevent
      path_server: dba-tlv-w4zyz
  - name: k-events
    type: kafka
    format: yaml
    connection:
      bootstrap.servers: dba-tlv-ab2cdf.bmc.com
      group.id: dba
      auto.offset.reset: earliest
      security.protocol: SSL
      ssl.ca.location: secrets/ca.crt
      ssl.certificate.location: secrets/client.crt
      ssl.key.location: secrets/client.key
    action:
      type: runorder
  - name: sqs-orders
    type: sqs
    format: yaml
    connection:
      region: us-east-1
      queue_url: https://sqs.<region>.amazonaws.com/<account_id>/<queue_name>
      max_retries: 5
      base_delay: 10
    retries:
      profile: [30, 60, 120]
      termination: dlx
    action:
      type: ondemand
  - name: azure-orders
    type: servicebus
    format: yaml
    connection:
      queue_name: azure-function
      max_retries: 5
      base_delay: 10
      credentials: AZURE_SB_CONNECTION_STRING
    retries:
      profile: [ 30, 60, 120 ]
      termination: dlx
    action:
      type: runorder
logging:
  level: INFO
controlm:
  aapi: https://dba-tlv-a4bcde.bmc.com:8443/automation-api
  token: CONTROLM_TOKEN

RabbitMQ Parameters

The following example shows the RabbitMQ parameters as they appear in the queue configuration file:

Copy
name: rmqueue1
type: rabbitmq
format: text
connection:
   server: dba-tlv-ab2cdf.bmc.com
   port: 5672
   vhost: vhost1
   credentials: RMQ_USER1                         
action:
   type: setevent
   path_server: dba-tlv-w4xyz

The following table describes the RabbitMQ parameters.

Parameter

Description

name

Defines the name of the queue that connects to the Message Handler.

type (queue)

Determines the type of messaging queue.

Value: rabbitmq

format

Determines one of the following message types that the Message Handler consumes:

  • text: Consumes a message in text format. The entire message must be one string.

  • yaml: Consumes a message in YAML or JSON format.

server

Defines the RabbitMQ server in the following format:

<hostname>.com

port

Determines the port number that enables you to access the RabbitMQ server.

vhost

Defines the virtual hostname that connects to RabbitMQ.

Virtual hosts do not share exchanges or queues between them.

credentials

Defines the credentials for authentication.

The credentials are the values of the Kubernetes Secret key prefix.

credentials: RABBITMQ1

type (action)

Determines one of the following actions to trigger in Control-M when the message is received in the queue:

  • runorder: Orders a job from the queue.

  • setevent: Creates an event in Control-M.

  • ondemand: Runs a job in Control-M.

The action is performed according to the template files described in Template Files.

path_server

(setevent action) Defines the path to the Control-M/Server when you create an event.

This parameter is required only when the action type value is setevent.

If you want the path_server value to be set to a dynamic value defined in a setevent template file, type the following:

'{{ message.server }}'

Kafka Parameters

The following example shows the Kafka parameters as they appear in the queue configuration file:

Copy
name: k-events
type: kafka
format: yaml
connection:
   bootstrap.servers: dba-tlv-ab2cdf.bmc.com
   group.id: dba
   auto.offset.reset: earliest
   security.protocol: SSL
   ssl.ca.location: secrets/ca.crt
   ssl.certificate.location: secrets/client.crt
   ssl.key.location: secrets/client.key
action:
   type: runorder

The following table describes the Kafka parameters.

Parameter

Description

name

Defines the name of the queue that connects to the Message Handler.

type (queue)

Determines the type of messaging queue.

Value: kafka

format

Determines one of the following message types that the Message Handler consumes:

  • text: Consumes a message in text format. The entire message must be one string.

  • yaml: Consumes a message in YAML or JSON format.

bootstrap.servers

Defines the Kafka broker address in following format:

<host>[:<port>]

group.id

Defines a unique ID for a consumer group that consumes messages from one or more topics.

auto.offset.reset

(Optional) Defines a unique ID assigned to each message in a partition of a topic.

Default: earliest

security.protocol

(Mandatory only for mTLS) Determines the security protocol to enforce two-way authentication where the client and broker verify their digital certificates.

Valid Value: SSL

ssl.ca.location

(Mandatory only for mTLS) Defines the path of the Certificate Authority certificate to verify the broker certificate.

The location of the certificate is secrets/<filename>. The filename must be the same as the file you placed in the secrets directory, as described in Installing Control-M for Event-Driven Workflows.

ssl.certificate.location

(Mandatory only for mTLS) Defines the path to a client certificate file in PEM format.

The location of the certificate is secrets/<filename>. The filename must be the same as the file you placed in the secrets directory, as described in Installing Control-M for Event-Driven Workflows.

ssl.key.location

(Mandatory only for mTLS) Defines the location of the private key file for the certificate specified in ssl.certificate.location.

The location of the key is secrets/<filename>. The filename must be the same as the file you placed in the secrets directory, as described in Installing Control-M for Event-Driven Workflows.

type (action)

Determines one of the following actions to trigger in Control-M when the message is received in the queue:

  • runorder: Orders a job from the queue.

  • setevent: Creates an event in Control-M.

  • ondemand: Runs a job in Control-M.

The action is performed according to the template files described in Template Files.

path_server

(setevent action) Defines the path to the Control-M/Server when you create an event.

This parameter is required only when the action type value is setevent.

If you want the path_server value to be set to a dynamic value defined in a setevent template file, type the following:

'{{ message.server }}'

Amazon SQS Parameters

The following example shows the Amazon SQS parameters as they appear in the queue configuration file:

Copy
name: sqs-orders
type: sqs
format: yaml
connection:
   region: us-east-1
   queue_url: https://sqs.<region>.amazonaws.com/<account_id>/<queue_name>
   max_retries: 5
   base_delay: 10
   retries:
      profile: [30, 60, 120]
      termination: dlx
action:
   type: ondemand

The following table describes the Amazon SQS parameters.

Parameter

Description

name

Defines the name of the queue that connects to the Message Handler.

type (queue)

Determines the type of messaging queue.

Value: sqs

format

Determines one of the following message types that the Message Handler consumes:

  • text: Consumes a message in text format. The entire message must be one string.

  • yaml: Consumes a message in YAML or JSON format.

region

Determines the AWS region where the queue is located.

us-east-2

queue_url

Defines the unique SQS queue URL that is used to send, receive, and delete messages.

https://sqs.eu-west-2.amazonaws.com/123123123/TestQueue.fifo

max_retries

(Optional) Defines the maximum numbers of times to try to reconnect to the queue if the connection fails.

base_delay

(Optional) Defines the delay between the attempts to reconnect to the queue if the connection fails.

profile

(Optional) Defines the connection retry intervals in seconds.

If the profile parameter value is [30, 60, 120], the Message Handler first retries to connect after 30 seconds, then after 60 seconds, and then after every 120 seconds.

termination

(Optional) Determines how to terminate the connection retry, as follows:

  • dlx: Terminates the connection based on dead-letter queue configuration.

  • discard: Deletes the message deleted when end of profile is reached.

type (action)

Determines one of the following actions to trigger in Control-M when the message is received in the queue:

  • runorder: Orders a job from the queue.

  • setevent: Creates an event in Control-M.

  • ondemand: Runs a job in Control-M.

The action is performed according to the template files described in Template Files.

path_server

(setevent action) Defines the path to the Control-M/Server when you create an event.

This parameter is required only when the action type value is setevent.

If you want the path_server value to be set to a dynamic value defined in a setevent template file, type the following:

'{{ message.server }}'

Azure Service Bus Parameters

The following example shows the Azure Service Bus parameters as they appear in the queue configuration file:

Copy
name: azure-orders
type: servicebus
format: yaml
connection:
   queue_name: azure-function
   credentials: AZURE_SB_CONNECTION_STRING
   max_retries: 5
   base_delay: 10 
retries:
   profile: [30, 60, 120]
   termination: dlx
action:
   type: runorder

The following table describes the Azure Service Bus parameters.

Parameter

Description

name

Defines the name of the queue that connects to the Message Handler.

type (queue)

Determines the type of messaging queue.

Value: servicebus

format

Determines one of the following message types that the Message Handler consumes:

  • text: Consumes a message in text format. The entire message must be one string.

  • yaml: Consumes a message in YAML or JSON format.

queue_name

(Optional) Defines the actual name of the queue in Azure Service Bus.

The name might be different from the name parameter that is listed in the queue configuration file.

max_retries

(Optional) Defines the maximum numbers of times to try to reconnect to the queue if the connection fails.

base_delay

(Optional) Defines the delay between the attempts to reconnect to the queue if the connection fails.

credentials

Defines the credentials for authentication.

The credentials are the values of the Kubernetes Secret key prefix.

credentials: AZURE_SB_CONNECTION_STRING

profile

(Optional) Defines the connection retry intervals in seconds.

If the profile parameter value is [30, 60, 120], the Message Handler first retries to connect after 30 seconds, then after 60 seconds, and then after every 120 seconds.

termination

(Optional) Determines how to terminate the connection retry, as follows:

  • dlx: Terminates the connection based on dead-letter queue configuration.

  • discard: Deletes the message deleted when end of profile is reached.

type (action)

Determines one of the following actions to trigger in Control-M when the message is received in the queue:

  • runorder: Orders a job from the queue.

  • setevent: Creates an event in Control-M.

  • ondemand: Runs a job in Control-M.

The action is performed according to the template files described in Template Files.

path_server

(setevent action) Defines the path to the Control-M/Server when you create an event.

This parameter is required only when the action type value is setevent.

If you want the path_server value to be set to a dynamic value defined in a setevent template file, type the following:

'{{ message.server }}'

Log Parameters

The following example shows the log parameters as they appear in the queue configuration file:

Copy
logging:
  level: INFO

The following table describes general configuration file parameters.

Parameter

Description

level

Determines one of the following log levels from most to least detailed:

  • DEBUG

  • INFO

  • WARNING

  • ERROR

Control-M Parameters

The following example shows the Control-M parameters as they appear in the queue configuration file:

Copy
controlm:
  aapi: https://dba-tlv-a4bcde.bmc.com:8443/automation-api
  token: CONTROLM_TOKEN

The following table describes general configuration file parameters.

Parameter

Description

aapi

Defines the Control-M endpoint to connect to Control-M.

token

Defines the API token set in a Secret.

Secrets

Secrets are the credentials provided as Kubernetes Secrets in key-value format that give you access to the queues and Control-M. The queue configuration file references the keys stored in the Kubernetes Secrets or an external vault.

The following example shows the commands to create a Kubernetes Secret for the different queues:

  • RabbitMQ

    Copy
    kubectl create secret generic rabbitmq1-credentials \
    --from-literal=RABBITMQ1_USER='queue_user' \
    --from-literal=RABBITMQ1_PASS='queue_secret'
  • Kafka

    Copy
    kubectl create secret generic event-handler-certificates --from-file=<secrets directory>
  • Amazon SQS

    Control-M for Event-Driven Workflows supports AWS Default Credential Provider Chain. If you run Control-M Event-Driven Workflows in AWS and the Amazon Pod Identity is set for the Event Handler pods, you do not need to create a secret.

    Copy
    kubectl create secret generic sqs-credentials \
    --from-literal=AWS_ACCESS_KEY_ID='<access key ID>' \
    --from-literal=AWS_SECRET_ACCESS_KEY='<secret>'
  • Azure Service Bus

    Copy
    kubectl create secret generic asb-credentials \
    --from-literal=AZURE_SB_CONNECTION_STRING='Endpoint=sb://<namespace>.servicebus.windows.net/;SharedAccessKeyName=<keyname>;SharedAccessKey=<secret>;EntityPath=<azure-function>'

The following example shows the command to create a Kubernetes Secret for Control-M:

Copy
kubectl create secret generic ctm-credentials --from-literal=CONTROLM_TOKEN='<AAPI token>'

Template Files

The template files are written in Jinja and contain the detailed information in REST API syntax required to perform the Control-M actions defined in the queue configuration file. For information about the various Jinja commands, see the Jinja documentation.

The template files are located in a dedicated template directory.

Each template filename must have the following format:

<filename>_body.json

Where:

<filename> is the queue name that appears in the queue configuration file.

The following examples show template files for the different Control-M actions:

  • runorder: Orders an existing folder with the run order API command, as described in run order.

    Copy
    {
      "ctm": "{{message.server}}",
      "folder": "{{message.folder_name}}",
      "hold": "false",
      "ignoreCriteria": "true",
      "independentFlow": "true",
      "variables": [
        { "var1": "{{ message.var1 }}"},
        {# Line below demonstrates how to make field "sender" optional - processing would otherwise fail if it was missing #}
        {"origin": "external kafka agent {{ message.sender | default ("unknown") }}"}
      ]
    }
  • setevent: Creates a Control-M event with the run event::add API command, as described in .

    Copy
    {
        "name": "{{ message }}",
        "date": "{{ "ODAT" }}"
    }
  • ondemand: Runs folders or jobs with the run API command, as described in run ondemand.

    Copy
    {
      "Kubernetes_manualSelector" : {
        "Type" : "Folder",
        "Variables" : [ {
          "EXTERNAL_ID" : "{{ message.correlation_id }}"
        } ],
        "ControlmServer" : "{{ message.server }}",
        "Description" : "Manual selector",
        "OrderMethod" : "Manual",
        "SubApplication" : "KBN Plugin",
        "CreatedBy" : "emuser",
        "Application" : "IFRobotTesting",
        "DaysKeepActiveIfNotOk" : "1",
        "When" : {
          "RuleBasedCalendars" : {
            "Included" : [ "EVERYDAY" ],
            "EVERYDAY" : {
              "Type" : "Calendar:RuleBased",
              "When" : {
                "DaysRelation" : "OR",
                "WeekDays" : [ "NONE" ],
                "MonthDays" : [ "ALL" ]
              }
            }
          }
        },
        "Manual_Selector" : {
          "Type" : "Job:Kubernetes",
    {# block below from %raw to %endraw is content we don't want Jinja to interpret (because of double curly-braces) #}
    {% raw %}
          "Job Spec Yaml" : "apiVersion: batch/v1\nkind: Job\nmetadata:\n  name: selectorjob-{{job_yaml_file_params:orderid}}\n  labels:\n    bmc.controlm.orderid: \"{{job_yaml_file_params:orderid}}\"\n    bmc.controlm.runno: \"{{job_yaml_file_params:runno}}\"\nspec:\n  manualSelector: true\n  completions: 1\n  parallelism: 1\n  selector:\n    matchLabels:\n      bmc.controlm.orderid: \"{{job_yaml_file_params:orderid}}\"\n      bmc.controlm.runno: \"{{job_yaml_file_params:runno}}\"\n  template:\n    metadata:\n      labels:\n        bmc.controlm.orderid: \"{{job_yaml_file_params:orderid}}\"\n        bmc.controlm.runno: \"{{job_yaml_file_params:runno}}\"\n    spec:\n      nodeSelector:\n        kubernetes.io/os: linux\n      imagePullSecrets:\n        - name: dockerhub-ctmb2b-cred\n      containers:\n      - name: demo-job\n        image: perl\n        command: [\"perl\",  \"-E\", 'STDOUT->autoflush(1); $str = \"The quick brown fox jumps over the lazy dog   -50-\"; for ($i = 1; $i <= 3; $i++) { printf \"%04d $str \\n\", $i; sleep(5) }']\n        imagePullPolicy: IfNotPresent\n        securityContext:\n          capabilities:\n            drop:\n              - ALL\n          allowPrivilegeEscalation: false\n      restartPolicy: Never\n      securityContext:\n        seccompProfile:\n          type: RuntimeDefault\n  backoffLimit: 4\n",
          "ConnectionProfile" : "CP-OPENSHIFT-ARBITRARY",
          "Job Spec Type" : "Local file",
          "Job Spec Parameters" : "{%4E\"orderid\":\"%%ORDERID\",%4E\"runno\":\"%%RUNCOUNT\"%4E}",
    {% endraw %}
          "Get Pod Logs" : "Get Logs",
          "OS Exit Code" : "No print",
          "Job Cleanup" : "Delete Job",
          "SubApplication" : "KBN Plugin",
          "Host" : "openshift-arbitrary",
          "CreatedBy" : "oci-user",
          "Description" : "Kubernetes Job with a custom matchSelector",
          "RunAs" : "oci-user",
          "Application" : "IFRobotTesting",
          "DocumentationFile" : {
            "Path" : "/home/controlm",
            "FileName" : "installed-versions.txt"
          },
          "When" : {
            "WeekDays" : [ "NONE" ],
            "Months" : [ "NONE" ],
            "MonthDays" : [ "NONE" ],
            "DaysRelation" : "OR"
          },
          "eventsToWaitFor" : {
            "Type" : "WaitForEvents",
            "Events" : [ {
              "Event" : "COKE_FLOW_{{ message.correlation_id }}"
            } ]
          },
          "eventsToDelete" : {
            "Type" : "DeleteEvents",
            "Events" : [ {
              "Event" : "COKE_FLOW_{{ message.correlation_id }}"
            } ]
          }
        }
      }
    }

Deploying the Event Handler Image with a Helm Chart

This procedure describes how to deploy the Event Handler image in a Kubernetes cluster. You must first add the BMC-provided Helm chart repository for the Event Handler to your Kubernetes environment and then install the Helm chart.

Working knowledge of Kubernetes is required to perform this procedure.

Begin

  1. From your Kubernetes command line, run the following command to add a repository named controlm:

    helm repo add controlm-events https://controlm-charts.s3.us-west-2.amazonaws.com/event-driven/

    If you do not have Internet access from the machine where you plan to run the Helm installation, do the following:

    1. On a machine with Internet access, use the following URL to obtain a compressed TGZ file of the Helm chart:

      https://controlm-charts.s3.us-west-2.amazonaws.com/controlm-event-handler.tgz

    2. Copy the TGZ file to the machine where you plan to run the Helm installation.

    3. Skip to the helm install command step. In this command, specify the pathname of the controlm-event-handler.tgz file instead of controlm/controlm-event-handler (the path to the chart in the repository).

  2. Run the following command to ensure that the controlm repository is listed as one of your repositories:

    helm repo list

  3. Run the following command to list the charts within the new controlm repository:

    helm search repo controlm

    The chart for the Event Handler installation is named controlm-event-handler.

  4. Do one of the following:

    • Run the helm install command with the parameter values that you want to set, as described in Helm Control-M Event Handler Parameters.

      Copy
      helm install controlm-events controlm-event-handler 
      --set queuesConfig=<name of ConfigMap created for the queue configuration file> 
      --set controlmTemplates=<name of ConfigMap for queue templates) 
      --set credentialSecrets="{list of secrets}"
      --set secretVolumes="{event-handler-certificates}" 
    • Run the helm install command with a reference to a user values file:

      helm install controlm-events events/control-event-handler -f ./params.yml

      The following is an example of a user values file:

      Copy
      controlmTemplates: eventhandler-templates
      credentialSecrets:
      - eventhandler-creds
      - eventhandler-sqs
      secretVolumes:
      - event-handler-certificates
      image:
        pullPolicy: Always
        repo: "private-repo/event-handler"
        tag: "latest"
        pullSecrets:
          - name: "dockerhub-secret"
      queuesConfig: eventhandler-config
      replicas: 1

    Deployment might take several minutes. To monitor the status of the rollout, run the following command:

    kubectl rollout status deployment/<releaseName> -n event-handler

Helm Control-M Event Handler Parameters

The following table lists the parameters that you set when you deploy the Event Handler image of the Helm chart in Kubernetes.

  • For an online list of the parameters that you can set during Helm chart installation, run the following command:

    helm show values controlm/controlm-event-handler

  • For more information about Kubernetes resources that are the basis of certain parameters, use the kubectl explain command, such as the following:

    kubectl explain statefulset.spec.template.spec.affinity

  • Object-type and array-type values must be defined in JSON format (with the --set-json switch). If you obtain them in YAML format, convert them to JSON. You can use the JQ command on Linux for this conversion.

Parameter

Description

controlmTemplates

Defines the ConfigMap created from the template directory during the installation procedure.

Type: String

credentialSecrets

Defines a list of secrets with credentials to access the queues and Control-M Automation API.

Type: Array

secretVolumes

Defines a list of secrets with certificates and TLS keys.

Type: Array

image.pullPolicy

(Optional) Determines whether to update the image by pulling a new version of the image when the kubelet launches a container.

Values:

  • Always

  • Never

  • IfNotPresent

Default: IfNotPresent

Kubernetes resource: statefulset.spec.template.spec.containers.imagePullPolicy

Type: String

image.repo

(Optional) Defines the path to the container image repository in the following format:

<registry hostname>/<account name>/<repository name>

If you do not define a registry hostname, Kubernetes assumes the Docker public registry (in the Docker Hub).

Kubernetes resource: statefulset.spec.template.spec.containers.image

Type: String

image.tag

(Optional) Defines the tag associated with the image.

Tags enable you to identify different versions of the same series of images.

Kubernetes resource: statefulset.spec.template.spec.containers.image

Type: String

image.pullSecrets

(Optional) Defines a secret (password) to access a private registry.

--set image.pullSecrets"[0]".name=<secret_name>

Define a secret if you created your own non-default container image, as described in Docker Container Image. If so, you might need a secret in your cluster. To create the secret, see the Kubernetes documentation.

Kubernetes resource: statefulset.spec.template.spec.imagePullSecrets

Type: Array

queuesConfig

Defines the ConfigMap created from the queue configuration file located in the configuration folder during the installation procedure.

Type: String

replicas

Determines the number of pods to run.

Default: 2

Kubernetes resource: statefulset.spec.replicas

Type: Integer

pod.nodeSelector

(Optional) Defines node labels for the NodeSelector to ensure that the pod is scheduled on the nodes.

Default labels:

  • kubernetes.io/os: linux

  • kubernetes.io/arch: amd64

Kubernetes resource: statefulset.spec.template.spec.nodeSelector

Type: Array