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