Workflow configuration
This document covers how to configure the workflow service through its Helm Chart.
Application configuration
Everything in this section goes into the chart’s workflowConfig value, which
becomes the workflow service’s entire configuration file.
The chart ships a
populated workflowConfig.
If you leave a setting unchanged, the workflow service runs with each setting’s.
If you delete a key from that block, the service runs with no value, except service.hostname,
which is derived from
the pod’s hostname.
To override individual keys, use the environment
variable listed with each setting, supplied through the chart’s envVars,
extraEnvVars, or additionalSecrets.
http
| Value | Description |
|---|---|
http.port |
|
libreDataStoreGraphQl
The BAAS GraphQL endpoint, and the CA certificate used to reach that endpoint over TLS.
| Value | Description |
|---|---|
libreDataStoreGraphQl.serverUrl[Required] |
|
libreDataStoreGraphQl.caFile |
|
logging
| Value | Description |
|---|---|
logging.level |
|
logging.type |
|
oidc
| Value | Description |
|---|---|
oidc.serverUrl[Required] |
|
oidc.realm[Required when oidc.enableGenericOidc is false] |
|
oidc.clientId[Required] |
|
oidc.clientSecret[Required] |
|
oidc.enableGenericOidc |
|
oidc.customRolesKey[Required when oidc.enableGenericOidc is true] |
|
oidc.customAudienceKey |
|
oidc.credentialsScope |
|
openTelemetry
| Value | Description |
|---|---|
openTelemetry.serverUrl |
|
secret
| Value | Description |
|---|---|
secret.key[Required when a workflow reads a stored secret] |
|
kafka
| Value | Description |
|---|---|
kafka.serverName[Required when a workflow uses a Kafka write task] |
|
kafka.serverPort[Required when a workflow uses a Kafka write task] |
|
typescript
Where the expressions in JSONata, GraphQL, REST, and rule evaluation tasks are
evaluated: inside the workflow service, or by typescript-host-service.
| Value | Description |
|---|---|
typescript.mode |
|
typescript.poolSize |
|
typescript.serverName[Required when typescript.mode is grpc] |
|
typescript.serverPort[Required when typescript.mode is grpc] |
|
restate
| Value | Description |
|---|---|
restate.adminUrl[Required] |
|
restate.serverUrl[Required] |
|
service
| Value | Description |
|---|---|
service.hostname[Required] |
|
jsonSchema
| Value | Description |
|---|---|
jsonSchema.registry[Required when a workflow uses a JSON Schema task] |
|
Helm chart values
Values shared by every chart are documented in shared-helm-values.md.
Only values specific to this chart are listed here.
Note that this chart deploys a StatefulSet, not a Deployment, and creates a headless Service alongside the normal one.
| Value | Description |
|---|---|
workflowConfig[Required] |
|
envVars |
|
extraEnvVars |
|
additionalSecrets |
|
podManagementPolicy |
|
updateStrategy |
|
graphqlCA |
|
A log level set directly, two credentials taken from Secrets, and one variable
taken from a Secret through extraEnvVars:
envVars:
RHIZE_WORKFLOW_LOGGING_LEVEL: info
additionalSecrets:
- name: RHIZE_WORKFLOW_OIDC_CLIENTSECRET
secretName: libre-secrets
secretKey: libreBPMN
- name: RHIZE_WORKFLOW_SECRET_KEY
secretName: libre-secrets
secretKey: workflowSecret
extraEnvVars:
- name: EXTERNAL_DB_PASSWORD
valueFrom:
secretKeyRef:
name: libre-secrets
key: externalDbPasswordbrokers
Add a broker here for each MQTT or AMQP broker whose messages should start or resume a workflow, or that a message throw event publishes to. A message arriving on one of its topics starts a workflow with a matching message start event and resumes a workflow waiting at a matching message catch event.
brokers is a map whose keys are broker ids you choose, so each setting is
written brokers.<id>.<field>. The id is meaningful: a BPMN message named
<id>.<topic> binds to <topic> on that broker.
These are the only chart values that reach the pod as environment variables and
nothing else, with no ConfigMap involved. The id and the field name both become part of the
variable name, so brokers.test_mqtt.protocol arrives as
RHIZE_WORKFLOW_BROKERS_TEST_MQTT_PROTOCOL. Every field accepts either a scalar,
which becomes a literal value, or a map naming an existing Kubernetes Secret and
the entry within it — {secretName: …, secretKey: …} — so that the value never
appears in the manifest.
| Value | Description |
|---|---|
brokers.<id>.protocol[Required when the broker entry is defined] |
|
brokers.<id>.connectionString[Required when the broker entry is defined] |
|
brokers.<id>.username |
|
brokers.<id>.password |
|
brokers.<id>.certificate |
|
defaultBroker |
|
Two brokers, with the MQTT password taken from a Secret:
defaultBroker: test_mqtt
brokers:
test_mqtt:
protocol: MQTT
connectionString: "mqtt://mqtt:1883"
password:
secretName: libre-secrets
secretKey: mqttPassword
test_amqp:
protocol: AMQP
connectionString: "amqp://amqp-broker:5672"
username: svcA workflow uses a broker through the Message section of an event’s properties
in the BPMN editor. Choose a Global message reference, or create one, and give
it a Name made of the broker id, a ., and the topic. With the brokers above:
- On a message start event, the Name
test_mqtt.ordersstarts the workflow each time a message arrives on theorderstopic oftest_mqtt. - On a message intermediate throw event, the Name
test_amqp.order-acceptedpublishes to theorder-acceptedtopic oftest_amqpwhen the workflow reaches that event.