### Schedule Start and End Time Example
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Example of setting a schedule to start and end at specific times. The interval is inclusive.
```text
2024-05-13T00:00:00Z
```
--------------------------------
### Apply Example Manifests
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/contributing/local-development.md
Apply the provided example manifests to deploy resources like PostgreSQL and a Temporal cluster. Ensure you port forward services if you need to access the Temporal Web UI or gRPC.
```bash
# example
make artifacts
kubectl apply -f examples/cluster-postgres/00-namespace.yaml
kubectl apply -f examples/cluster-postgres/01-postgresql.yaml
kubectl apply -f examples/cluster-postgres/02-temporal-cluster.yaml
kubectl apply -f examples/cluster-postgres/03-temporal-namespace.yaml
```
--------------------------------
### Time Zone Name Example
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Example of specifying a time zone for schedule matching. Defaults to UTC.
```text
US/Pacific
```
--------------------------------
### Install Temporal Operator via Helm
Source: https://context7.com/alexandrevilain/temporal-operator/llms.txt
Install the Temporal Operator using Helm for more customization options. This involves adding the operator's Helm repository and performing an installation.
```bash
# Add the helm repository
helm repo add temporal-operator https://alexandrevilain.github.io/temporal-operator
# Install the operator
helm install temporal-operator temporal-operator/temporal-operator \
--namespace temporal-system \
--create-namespace
```
--------------------------------
### Install cert-manager
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/getting-started.md
Install cert-manager on your cluster, which is required for the operator's admission webhooks. Use the provided kubectl command.
```bash
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.1/cert-manager.yaml
```
--------------------------------
### Example Cron Expression
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
An example of a cron expression for scheduling every Monday, Tuesday, Wednesday, and Friday at noon.
```text
0 12 * * MON-WED,FRI
```
--------------------------------
### Apply Manifests for Temporal Cluster Setup
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/examples/cluster-postgres-es/README.md
Apply the Kubernetes manifests to set up the namespace, PostgreSQL, Elasticsearch, and the Temporal cluster. These commands assume the manifests are available in the current directory.
```bash
kubectl apply -f 00-namespace.yaml
kubectl apply -f 01-postgresql.yaml
kubectl apply -f 02-elasticsearch.yaml
kubectl apply -f 03-temporal-cluster.yaml
```
--------------------------------
### Enable Temporal UI and Set Version
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/temporal-ui.md
Configure the Temporal cluster to enable the web UI and specify a version. This is the basic setup for accessing the UI.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.24.3
numHistoryShards: 1
# [...]
ui:
enabled: true
# You can specify ui version if needed.
# Check available tag you can check by link below
# https://hub.docker.com/r/temporalio/ui/tags
version: 2.25.0
```
--------------------------------
### Install Temporal Operator Helm Chart
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/charts/temporal-operator/README.md
Install the Temporal Operator chart into your Kubernetes cluster. Replace [RELEASE_NAME] with your desired release name.
```bash
helm install [RELEASE_NAME] temporal-operator/temporal-operator
```
--------------------------------
### Install Prometheus Operator using Helm
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/monitoring/prometheus-operator.md
Install the Prometheus Operator stack using Helm. Ensure the Prometheus instance is configured to select ServiceMonitors from the desired namespaces.
```bash
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus-operator prometheus-community/kube-prometheus-stack --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false --set=prometheusOperator.namespaces.additional={demo,default,}
```
--------------------------------
### Mount Extra Volume to All Pods
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/overrides.md
Example of mounting an additional volume to all Temporal service pods. Ensure the volume is defined in the `volumes` section.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
spec:
services:
overrides:
deployment:
spec:
template:
spec:
containers:
- name: service
volumeMounts:
- name: extra-volume
mountPath: /etc/extra
volumes:
- name: extra-volume
configMap:
name: extra-config
```
--------------------------------
### Install ECK Operator with Helm
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/examples/cluster-postgres-es/README.md
Install the Elastic Cloud on Kubernetes (ECK) operator using Helm. Ensure you are using version v2.8.0 and wait for the installation to complete.
```bash
helm repo add elastic https://helm.elastic.co
helm repo update
helm install elastic-operator elastic/eck-operator -n elastic-system --create-namespace --version v2.8.0 --wait
```
--------------------------------
### Install Temporal Operator via kubectl
Source: https://context7.com/alexandrevilain/temporal-operator/llms.txt
Install the Temporal Operator and its dependencies using kubectl. This includes cert-manager for admission webhooks and the operator's CRDs and deployment.
```bash
# Install cert-manager (required for admission webhooks)
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.1/cert-manager.yaml
# Install Temporal Operator CRDs
kubectl apply --server-side -f https://github.com/alexandrevilain/temporal-operator/releases/latest/download/temporal-operator.crds.yaml
# Install the operator
kubectl apply -f https://github.com/alexandrevilain/temporal-operator/releases/latest/download/temporal-operator.yaml
```
--------------------------------
### Add Init Container to All Pods
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/overrides.md
Example of adding an init container to all Temporal service pods. Init containers run before the main application containers.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
# [...]
services:
overrides:
deployment:
spec:
template:
spec:
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "echo My example init container"]
```
--------------------------------
### Install Temporal Operator
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/getting-started.md
Deploy the Temporal Operator to your cluster using kubectl. This command applies the operator's deployment configuration.
```bash
kubectl apply -f https://github.com/alexandrevilain/temporal-operator/releases/latest/download/temporal-operator.yaml
```
--------------------------------
### Replace Default Liveness Probe for Frontend Pod
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/overrides.md
Replace the default liveness probe configuration for the frontend pod. This example demonstrates how to switch to a gRPC-based probe with specific port and service details.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
spec:
# [...]
services:
frontend:
overrides:
deployment:
spec:
template:
spec:
containers:
- name: service
livenessProbe:
$patch: replace
tcpSocket: null
grpc:
port: 7233
service: frontend.temporal.temporal.svc.cluster.local
```
--------------------------------
### ScheduleMonthRange
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Defines a range of months for scheduling. If end is less than start, end is interpreted as equal to start. This allows for a single value to be represented by setting start and leaving end/step unset.
```APIDOC
## ScheduleMonthRange
### Description
Defines a range of months for scheduling. If end is less than start, end is interpreted as equal to start. This allows for a single value to be represented by setting start and leaving end/step unset.
### Fields
#### start (int32) - Optional
Start of the range (inclusive). Defaults to 1.
#### end (int32) - Optional
End of the range (inclusive). Defaults to start.
#### step (int32) - Optional
Step to be taken between each value. Defaults to 1.
```
--------------------------------
### DatastoreStatus
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Represents the current status of a datastore, including creation and setup states.
```APIDOC
## DatastoreStatus
### Description
DatastoreStatus contains the current status of a datastore.
### Fields
- **created** (bool) - Indicates if the database or keyspace has been created.
- **setup** (bool) - Indicates if tables have been set up.
- **type** (DatastoreType) - Optional - Indicates the datastore type.
- **schemaVersion** (github.com/alexandrevilain/temporal-operator/pkg/version.Version) - Optional - Reports the current schema version.
```
--------------------------------
### Schedule Second Minute Range
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Defines a range for seconds or minutes within a schedule. If end is less than start, it's interpreted as equal to start, allowing for single-value ranges.
```go
type ScheduleSecondMinuteRange struct {
// Start of the range (inclusive).
// Defaults to 0.
Start int32 `json:"start,omitempty"`
// End of the range (inclusive).
// Defaults to start.
End int32 `json:"end,omitempty"`
// Step to be take between each value.
// Defaults to 1.
Step int32 `json:"step,omitempty"`
}
```
--------------------------------
### Add Datadog Annotations to Frontend Pod
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/overrides.md
Example of adding Datadog specific annotations to the frontend service's pod metadata for logging and checks.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
spec:
# [...]
services:
frontend:
overrides:
deployment:
spec:
template:
metadata:
annotations:
ad.datadoghq.com/.logs: '[{ "source": "golang", "service": "" }]'
ad.datadoghq.com/.checks: |
{
"": {
"init_config": ,
"instances": []
}
}
```
--------------------------------
### Create Namespace and PostgreSQL Server
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/getting-started.md
Set up the 'demo' namespace and a sample PostgreSQL server for Temporal's persistence. Apply the provided YAML files using kubectl.
```bash
kubectl apply -f https://raw.githubusercontent.com/alexandrevilain/temporal-operator/main/examples/cluster-postgres/00-namespace.yaml
```
```bash
kubectl apply -f https://raw.githubusercontent.com/alexandrevilain/temporal-operator/main/examples/cluster-postgres/01-postgresql.yaml
```
--------------------------------
### Create Local Kubernetes Cluster
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/contributing/local-development.md
Use this command to set up a local Kubernetes cluster for development. Tilt will automatically redeploy code changes.
```bash
make deploy-dev
```
--------------------------------
### ScheduleHourRange
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Defines a range of hours for scheduling. If end is less than start, end is interpreted as equal to start. This allows for a single value to be represented by setting start and leaving end/step unset.
```APIDOC
## ScheduleHourRange
### Description
Defines a range of hours for scheduling. If end is less than start, end is interpreted as equal to start. This allows for a single value to be represented by setting start and leaving end/step unset.
### Fields
#### start (int32) - Optional
Start of the range (inclusive). Defaults to 0.
#### end (int32) - Optional
End of the range (inclusive). Defaults to start.
#### step (int32) - Optional
Step to be taken between each value. Defaults to 1.
```
--------------------------------
### Run Tests
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/contributing/local-development.md
Execute the test suite with coverage reports using this command.
```bash
make test
```
--------------------------------
### Dynamic Configuration with Constraints
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Configuration for dynamic settings with optional constraints.
```APIDOC
## ConstrainedValue
### Description
ConstrainedValue is an alias for temporal’s dynamicconfig.ConstrainedValue.
### Parameters
#### Request Body
- **constraints** (Constraints) - Optional - Constraints describe under what conditions a ConstrainedValue should be used.
- **value** (k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON) - Required - Value is the value for the configuration key. The type of the Value field depends on the key. Acceptable types will be one of: int, float64, bool, string, map[string]any, time.Duration
```
```APIDOC
## Constraints
### Description
Constraints is an alias for temporal’s dynamicconfig.Constraints. It describes under what conditions a ConstrainedValue should be used.
### Parameters
#### Request Body
- **namespace** (string) - Optional
- **namespaceId** (string) - Optional
- **taskQueueName** (string) - Optional
- **taskQueueType** (string) - Optional
- **shardId** (int32) - Optional
- **taskType** (string) - Optional
```
--------------------------------
### Prepare Release Branch and Pull Request
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/contributing/publish-release.md
Create a new release branch, commit changes, and submit a pull request for review. This prepares the release by setting up the necessary branch and PR.
```bash
VERSION="v$(cat VERSION)"
git checkout -b release/$VERSION
git commit -am "Prepare release $VERSION"
git push origin release/$VERSION
gh pr create --title "Prepare release $VERSION" --base main --head release/$VERSION
```
--------------------------------
### Run End-to-End Tests on Development Computer
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/contributing/local-development.md
Run end-to-end tests locally using `kind` for the Kubernetes cluster.
```bash
make test-e2e-dev
```
--------------------------------
### Deploy Temporal Cluster with Cassandra
Source: https://context7.com/alexandrevilain/temporal-operator/llms.txt
Sets up a Temporal cluster with Apache Cassandra as the persistence backend. Includes configuration for version, Cassandra hosts, port, user, keyspace, datacenter, and enables UI, admin tools, and Prometheus metrics.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.24.3
numHistoryShards: 1
jobTtlSecondsAfterFinished: 300
persistence:
defaultStore:
cassandra:
hosts:
- "cassandra.demo"
port: 9042
user: cassandra
keyspace: temporal
datacenter: datacenter1
disableInitialHostLookup: false
passwordSecretRef:
name: cassandra-password
key: PASSWORD
visibilityStore:
cassandra:
hosts:
- "cassandra.demo"
port: 9042
user: cassandra
keyspace: temporal_visibility
datacenter: datacenter1
disableInitialHostLookup: false
passwordSecretRef:
name: cassandra-password
key: PASSWORD
ui:
enabled: true
admintools:
enabled: true
metrics:
enabled: true
prometheus:
listenPort: 9090
```
--------------------------------
### Install Temporal Operator CRDs
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/getting-started.md
Apply the Custom Resource Definitions (CRDs) for the Temporal Operator to your cluster using kubectl. The --server-side flag is recommended for CRD installations.
```bash
kubectl apply --server-side -f https://github.com/alexandrevilain/temporal-operator/releases/latest/download/temporal-operator.crds.yaml
```
--------------------------------
### Set UI Replicas and Resources
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/temporal-ui.md
Configure the number of replicas and resource requests/limits for the Temporal UI deployment. This helps manage performance and stability.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.24.3
numHistoryShards: 1
# [...]
ui:
enabled: true
version: 2.25.0
replicas: 1
resources:
limits:
cpu: 10m
memory: 20Mi
requests:
cpu: 10m
memory: 20Mi
```
--------------------------------
### Deploy Temporal Cluster with PostgreSQL
Source: https://context7.com/alexandrevilain/temporal-operator/llms.txt
Defines a complete Temporal cluster deployment using PostgreSQL as the default datastore. Includes configuration for version, persistence, logging, UI, admin tools, and dynamic configuration.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.24.3
numHistoryShards: 1
persistence:
defaultStore:
sql:
user: temporal
pluginName: postgres12
databaseName: temporal
connectAddr: postgres.demo.svc.cluster.local:5432
connectProtocol: tcp
passwordSecretRef:
name: postgres-password
key: PASSWORD
visibilityStore:
sql:
user: temporal
pluginName: postgres12
databaseName: temporal_visibility
connectAddr: postgres.demo.svc.cluster.local:5432
connectProtocol: tcp
passwordSecretRef:
name: postgres-password
key: PASSWORD
log:
level: debug
ui:
enabled: true
admintools:
enabled: true
dynamicConfig:
pollInterval: 10s
values:
matching.numTaskqueueReadPartitions:
- value: 5
constraints: {}
matching.numTaskqueueWritePartitions:
- value: 5
constraints: {}
```
--------------------------------
### Original Duration Format in Temporal Operator CRD
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/operations/argocd.md
Example of duration formats in the mTLS spec of a Temporal Operator CRD that may cause issues with ArgoCD.
```yaml
mTLS:
provider: cert-manager
internode:
enabled: true
frontend:
enabled: true
certificatesDuration:
clientCertificates: 1h
frontendCertificate: 1h
intermediateCAsCertificates: 1h30m
internodeCertificate: 1h
rootCACertificate: 2h
renewBefore: 55m
```
--------------------------------
### Datastore Configuration
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Details on configuring datastore settings, including server name and type.
```APIDOC
## Datastore Configuration
### Description
Configuration for datastore settings.
### Fields
- **serverName** (string) - Optional - ServerName the datastore should present.
- **DatastoreType** (string alias) - Type of the datastore.
```
--------------------------------
### Add Metric Relabeling to ServiceMonitor
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/monitoring/prometheus-operator.md
Configure metric relabeling for Prometheus ServiceMonitors to modify metric names before they are scraped. This example prefixes all Temporal metrics with 'temporal_'.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
# [...]
metrics:
enabled: true
prometheus:
listenPort: 9090
scrapeConfig:
serviceMonitor:
enabled: true
metricRelabelings:
- sourceLabels: [__name__]
targetLabel: __name__
replacement: temporal_$1
```
--------------------------------
### Check Temporal Resources
Source: https://context7.com/alexandrevilain/temporal-operator/llms.txt
Use this command to list all Temporal-related resources across all namespaces in your Kubernetes cluster.
```bash
kubectl get temporalclusters,temporalnamespaces,temporalschedules -A
```
--------------------------------
### Create Ingress for Temporal UI
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/temporal-ui.md
Configure ingress for the Temporal UI to make it accessible via a hostname. If ingress is not configured, the UI is only available via ClusterIP service.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.24.3
numHistoryShards: 1
# [...]
ui:
enabled: true
version: 2.25.0
ingress:
hosts:
- example.com
annotations:
```
--------------------------------
### Generate CRD and Docs
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/contributing/local-development.md
Run this command after modifying the API to generate necessary CRDs and documentation.
```bash
make generate
```
--------------------------------
### ScheduleWorkflowAction
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Describes a workflow to launch.
```APIDOC
## ScheduleWorkflowAction
### Description
ScheduleWorkflowAction describes a workflow to launch.
### Fields
#### id (string) - Optional
WorkflowID represents the business identifier of the workflow execution. The WorkflowID of the started workflow may not match this exactly, it may have a timestamp appended for uniqueness. Defaults to a uuid.
#### type (string) - Required
WorkflowType represents the identifier used by a workflow author to define the workflow Workflow type name.
#### taskQueue (string) - Required
TaskQueue represents a workflow task queue. This is also the name of the activity task queue on which activities are scheduled.
#### inputs (k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON) - Optional
Workflow inputs.
```
--------------------------------
### Deploy Temporal Cluster with MySQL
Source: https://context7.com/alexandrevilain/temporal-operator/llms.txt
Configures a Temporal cluster deployment utilizing MySQL as the persistence backend with the mysql8 plugin. Enables the web UI and admin tools.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.24.3
numHistoryShards: 1
persistence:
defaultStore:
sql:
user: temporal
pluginName: mysql8
databaseName: temporal
connectAddr: mysql.demo.svc.cluster.local:3306
connectProtocol: tcp
passwordSecretRef:
name: mysql-password
key: PASSWORD
visibilityStore:
sql:
user: temporal
pluginName: mysql8
databaseName: temporal_visibility
connectAddr: mysql.demo.svc.cluster.local:3306
connectProtocol: tcp
passwordSecretRef:
name: mysql-password
key: PASSWORD
ui:
enabled: true
admintools:
enabled: true
```
--------------------------------
### SQL Datastore Configuration
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Configuration for SQL datastores, including connection details and pool settings.
```APIDOC
## SQL Datastore Configuration
### Description
Configuration for SQL datastores, including connection details and pool settings.
### Fields
#### `user` (string) - Required
User is the username to be used for the connection.
#### `pluginName` (string) - Required
PluginName is the name of SQL plugin.
#### `databaseName` (string) - Required
DatabaseName is the name of SQL database to connect to.
#### `connectAddr` (string) - Required
ConnectAddr is the remote addr of the database.
#### `connectProtocol` (string) - Optional
ConnectProtocol is the protocol that goes with the ConnectAddr.
#### `connectAttributes` (map[string]string) - Optional
ConnectAttributes is a set of key-value attributes to be sent as part of connect data_source_name url.
#### `maxConns` (int) - Optional
MaxConns the max number of connections to this datastore.
#### `maxIdleConns` (int) - Optional
MaxIdleConns is the max number of idle connections to this datastore.
#### `maxConnLifetime` (Kubernetes meta/v1.Duration) - Optional
MaxConnLifetime is the maximum time a connection can be alive.
#### `taskScanPartitions` (int) - Optional
TaskScanPartitions is the number of partitions to sequentially scan during ListTaskQueue operations.
#### `gcpServiceAccount` (string) - Optional
GCPServiceAccount is the service account to use to authenticate with GCP CloudSQL.
```
--------------------------------
### Deploy Temporal Cluster with PostgreSQL
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/README.md
This manifest deploys a Temporal cluster using PostgreSQL for both default and visibility stores. It specifies the Temporal version, number of history shards, and database connection details, including a reference to a Kubernetes secret for the database password.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.24.3
numHistoryShards: 1
persistence:
defaultStore:
sql:
user: temporal
pluginName: postgres
databaseName: temporal
connectAddr: postgres.demo.svc.cluster.local:5432
connectProtocol: tcp
passwordSecretRef:
name: postgres-password
key: PASSWORD
visibilityStore:
sql:
user: temporal
pluginName: postgres
databaseName: temporal_visibility
connectAddr: postgres.demo.svc.cluster.local:5432
connectProtocol: tcp
passwordSecretRef:
name: postgres-password
key: PASSWORD
```
--------------------------------
### Enable Prometheus Metrics Annotations
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/monitoring/prometheus.md
Configure the TemporalCluster resource to enable metrics exposition and Prometheus annotations. Ensure `metrics.enabled` is true and `metrics.prometheus.scrapeConfig.annotations` is set to true.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.24.3
numHistoryShards: 1
# [...]
metrics:
enabled: true
prometheus:
listenPort: 9090
scrapeConfig:
annotations: true
```
--------------------------------
### General Overrides for All Services
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/overrides.md
Use this to apply general overrides to the deployment metadata for all Temporal services.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
spec:
# [...]
services:
overrides:
deployment:
metadata:
labels: {}
annotations: {}
spec:
template:
spec:
containers:
- name: service
# anything you want
```
--------------------------------
### Schedule Configuration
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Configuration for Temporal Schedules, encompassing actions and specifications.
```APIDOC
## Schedule Configuration
### Description
Configuration for Temporal Schedules, encompassing actions and specifications.
### Fields
#### `action` (ScheduleAction) - Required
#### `spec` (ScheduleSpec) - Required
```
--------------------------------
### Update Version File
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/contributing/publish-release.md
Update the VERSION file with the desired release version before proceeding with the release process.
```bash
0.13.0
```
--------------------------------
### TemporalUIIngressSpec
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Contains configuration options for the Temporal UI ingress.
```APIDOC
## TemporalUIIngressSpec
### Description
Contains all configurations options for the UI ingress.
### Fields
#### annotations (map[string]string)
Allows custom annotations on the ingress resource.
#### ingressClassName (string)
Is the name of the IngressClass the deployed ingress resource should use.
#### hosts ([]string)
Is the list of host the ingress should use.
#### tls ([]Kubernetes networking/v1.IngressTLS)
TLS configuration.
```
--------------------------------
### Service Configuration
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Configuration options for Temporal services, including custom ports for gRPC and membership.
```APIDOC
## Service Configuration
### Description
Configuration options for Temporal services, allowing customization of gRPC and membership ports.
### Parameters
#### Request Body
- **port** (int32) - Optional - Port defines a custom gRPC port for the service. Default values are: 7233 for Frontend service, 7234 for History service, 7235 for Matching service, 7239 for Worker service.
- **membershipPort** (int32) - Optional - MembershipPort defines a custom membership port for the service. Default values are: 6933 for Frontend service, 6934 for History service, 6935 for Matching service, 6939 for Worker service.
- **httpPort** (int32) - Optional - HTTPPort defines a custom HTTP port for the service. Default values are: 7123 for Frontend service, 7124 for History service, 7125 for Matching service, 7129 for Worker service.
### Request Example
```json
{
"port": 7233,
"membershipPort": 6933,
"httpPort": 7123
}
```
### Response
#### Success Response (200)
- **status** (string) - Indicates the status of the operation.
#### Response Example
```json
{
"status": "Service configuration updated"
}
```
```
--------------------------------
### TemporalCluster with Filestore Archival
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/features/archival.md
Enable and configure Filestore archival for Temporal clusters. This requires setting up volume mounts via service overrides to provide the archival path.
```yaml
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
spec:
version: 1.24.3
numHistoryShards: 1
# [...]
services:
overrides:
deployment:
spec:
template:
spec:
containers:
- name: service
volumeMounts:
- name: archival-data
mountPath: /etc/archival
volumes:
- name: archival-data
emptyDir: {}
archival:
enabled: true
provider:
filestore: {}
history:
enabled: true
enableRead: true
path: "/etc/archival/history"
paused: false
visibility:
enabled: true
enableRead: true
path: "/etc/archival/visibility"
paused: false
```
--------------------------------
### Schedule Interval Specification
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Defines an interval-based schedule with a specified duration and optional catch-up window. Use for recurring tasks at fixed intervals.
```go
type ScheduleIntervalSpec struct {
// Interval is the duration between actions.
Interval *v1.Duration `json:"interval,omitempty"`
// FollowRuns controls whether to follow the previous run's start time or the schedule's.
// If true, the next run will start after the previous run finishes.
// If false, the next run will start at the scheduled time.
FollowRuns bool `json:"followRuns,omitempty"`
// MaxInterval is the maximum interval between actions.
// If the interval is smaller than MaxInterval, the schedule will be adjusted.
MaxInterval *v1.Duration `json:"maxInterval,omitempty"`
// MaxSpans is the maximum number of spans to generate.
// If set, the schedule will stop after MaxSpans.
MaxSpans *int64 `json:"maxSpans,omitempty"`
// SnapToCadence determines if the schedule should snap to the nearest cadence.
// If true, the schedule will snap to the nearest interval.
SnapToCadence bool `json:"snapToCadence,omitempty"`
}
```
--------------------------------
### Cron Expression Shorthands and Options
Source: https://github.com/alexandrevilain/temporal-operator/blob/main/docs/api/v1beta1.md
Supports shorthand expressions like @every [/] which compile to IntervalSpec. Time zone and comments can also be specified.
```text
- @every [/] is accepted and gets compiled into an
IntervalSpec instead. and should be a decimal integer
with a unit suffix s, m, h, or d.
- Optionally, the string can be preceded by CRON_TZ=