From 4007f0a0619512c70a0c6f880a8851101d800044 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Thu, 25 Sep 2025 16:37:55 +0200 Subject: [PATCH 1/5] initial version updates --- .../airflow/examples/example-airflow-dags-configmap.yaml | 2 +- .../airflow/examples/example-airflow-gitsync.yaml | 2 +- .../airflow/examples/example-airflow-incluster.yaml | 2 +- .../example-airflow-kubernetes-executor-s3-logging.yaml | 3 ++- .../example-airflow-kubernetes-executor-s3-xcom.yaml | 3 ++- .../airflow/examples/getting_started/code/airflow.yaml | 2 +- docs/modules/airflow/pages/usage-guide/security.adoc | 4 ++-- docs/modules/airflow/partials/supported-versions.adoc | 4 ++-- examples/simple-airflow-cluster-dags-cmap.yaml | 2 +- examples/simple-airflow-cluster-ldap-insecure-tls.yaml | 2 +- examples/simple-airflow-cluster-ldap.yaml | 2 +- examples/simple-airflow-cluster.yaml | 2 +- rust/operator-binary/src/config.rs | 2 +- rust/operator-binary/src/crd/affinity.rs | 4 ++-- rust/operator-binary/src/crd/mod.rs | 4 ++-- rust/operator-binary/src/env_vars.rs | 4 ++-- tests/test-definition.yaml | 9 +++++---- 17 files changed, 28 insertions(+), 25 deletions(-) diff --git a/docs/modules/airflow/examples/example-airflow-dags-configmap.yaml b/docs/modules/airflow/examples/example-airflow-dags-configmap.yaml index 685d5e53..0a43c989 100644 --- a/docs/modules/airflow/examples/example-airflow-dags-configmap.yaml +++ b/docs/modules/airflow/examples/example-airflow-dags-configmap.yaml @@ -5,7 +5,7 @@ metadata: name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: loadExamples: false exposeConfig: false diff --git a/docs/modules/airflow/examples/example-airflow-gitsync.yaml b/docs/modules/airflow/examples/example-airflow-gitsync.yaml index 1e60e2a0..6a4b5e46 100644 --- a/docs/modules/airflow/examples/example-airflow-gitsync.yaml +++ b/docs/modules/airflow/examples/example-airflow-gitsync.yaml @@ -5,7 +5,7 @@ metadata: name: airflow spec: image: - productVersion: "2.10.5" + productVersion: 3.0.6 clusterConfig: loadExamples: false exposeConfig: false diff --git a/docs/modules/airflow/examples/example-airflow-incluster.yaml b/docs/modules/airflow/examples/example-airflow-incluster.yaml index 67b1ac96..8c7be074 100644 --- a/docs/modules/airflow/examples/example-airflow-incluster.yaml +++ b/docs/modules/airflow/examples/example-airflow-incluster.yaml @@ -5,7 +5,7 @@ metadata: name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: loadExamples: false exposeConfig: false diff --git a/docs/modules/airflow/examples/example-airflow-kubernetes-executor-s3-logging.yaml b/docs/modules/airflow/examples/example-airflow-kubernetes-executor-s3-logging.yaml index c4201e38..d171fbd2 100644 --- a/docs/modules/airflow/examples/example-airflow-kubernetes-executor-s3-logging.yaml +++ b/docs/modules/airflow/examples/example-airflow-kubernetes-executor-s3-logging.yaml @@ -1,10 +1,11 @@ +--- apiVersion: airflow.stackable.tech/v1alpha1 kind: AirflowCluster metadata: name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: {} webservers: roleConfig: diff --git a/docs/modules/airflow/examples/example-airflow-kubernetes-executor-s3-xcom.yaml b/docs/modules/airflow/examples/example-airflow-kubernetes-executor-s3-xcom.yaml index 8d0a07e3..14838ef8 100644 --- a/docs/modules/airflow/examples/example-airflow-kubernetes-executor-s3-xcom.yaml +++ b/docs/modules/airflow/examples/example-airflow-kubernetes-executor-s3-xcom.yaml @@ -1,10 +1,11 @@ +--- apiVersion: airflow.stackable.tech/v1alpha1 kind: AirflowCluster metadata: name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: {} webservers: roleConfig: diff --git a/docs/modules/airflow/examples/getting_started/code/airflow.yaml b/docs/modules/airflow/examples/getting_started/code/airflow.yaml index 5039134c..7ac69b34 100644 --- a/docs/modules/airflow/examples/getting_started/code/airflow.yaml +++ b/docs/modules/airflow/examples/getting_started/code/airflow.yaml @@ -5,7 +5,7 @@ metadata: name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: loadExamples: true exposeConfig: false diff --git a/docs/modules/airflow/pages/usage-guide/security.adoc b/docs/modules/airflow/pages/usage-guide/security.adoc index f04a58be..b6bf6dda 100644 --- a/docs/modules/airflow/pages/usage-guide/security.adoc +++ b/docs/modules/airflow/pages/usage-guide/security.adoc @@ -37,7 +37,7 @@ metadata: name: airflow-with-ldap spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: authentication: - authenticationClass: ldap # <1> @@ -71,7 +71,7 @@ metadata: name: airflow-with-oidc spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: authentication: - authenticationClass: keycloak # <1> diff --git a/docs/modules/airflow/partials/supported-versions.adoc b/docs/modules/airflow/partials/supported-versions.adoc index 99d4fd03..666b8572 100644 --- a/docs/modules/airflow/partials/supported-versions.adoc +++ b/docs/modules/airflow/partials/supported-versions.adoc @@ -2,7 +2,7 @@ // This is a separate file, since it is used by both the direct Airflow-Operator documentation, and the overarching // Stackable Platform documentation. +- 3.0.6 (LTS) - 3.0.1 (experimental) -- 2.10.5 -- 2.10.4 (deprecated) +- 2.10.5 (deprecated) - 2.9.3 (deprecated) diff --git a/examples/simple-airflow-cluster-dags-cmap.yaml b/examples/simple-airflow-cluster-dags-cmap.yaml index 8899293a..2dd5e883 100644 --- a/examples/simple-airflow-cluster-dags-cmap.yaml +++ b/examples/simple-airflow-cluster-dags-cmap.yaml @@ -81,7 +81,7 @@ metadata: name: airflow-dags-cmap spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: loadExamples: false exposeConfig: false diff --git a/examples/simple-airflow-cluster-ldap-insecure-tls.yaml b/examples/simple-airflow-cluster-ldap-insecure-tls.yaml index 334c4c70..06c307b8 100644 --- a/examples/simple-airflow-cluster-ldap-insecure-tls.yaml +++ b/examples/simple-airflow-cluster-ldap-insecure-tls.yaml @@ -149,7 +149,7 @@ metadata: name: airflow-insecure-tls spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: loadExamples: true exposeConfig: true diff --git a/examples/simple-airflow-cluster-ldap.yaml b/examples/simple-airflow-cluster-ldap.yaml index a0e17a4e..0704048e 100644 --- a/examples/simple-airflow-cluster-ldap.yaml +++ b/examples/simple-airflow-cluster-ldap.yaml @@ -147,7 +147,7 @@ metadata: name: airflow-with-ldap-server-veri-tls spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: loadExamples: true exposeConfig: true diff --git a/examples/simple-airflow-cluster.yaml b/examples/simple-airflow-cluster.yaml index 54b66d4c..330b951b 100644 --- a/examples/simple-airflow-cluster.yaml +++ b/examples/simple-airflow-cluster.yaml @@ -21,7 +21,7 @@ metadata: name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: loadExamples: true exposeConfig: false diff --git a/rust/operator-binary/src/config.rs b/rust/operator-binary/src/config.rs index b5971905..ff86ab71 100644 --- a/rust/operator-binary/src/config.rs +++ b/rust/operator-binary/src/config.rs @@ -324,7 +324,7 @@ mod tests { }, }; - const TEST_AIRFLOW_VERSION: &str = "3.0.1"; + const TEST_AIRFLOW_VERSION: &str = "3.0.6"; #[test] fn test_auth_db_config() { diff --git a/rust/operator-binary/src/crd/affinity.rs b/rust/operator-binary/src/crd/affinity.rs index 19123586..53f303b9 100644 --- a/rust/operator-binary/src/crd/affinity.rs +++ b/rust/operator-binary/src/crd/affinity.rs @@ -69,7 +69,7 @@ mod tests { name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: credentialsSecret: airflow-credentials webservers: @@ -163,7 +163,7 @@ mod tests { name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: credentialsSecret: airflow-credentials webservers: diff --git a/rust/operator-binary/src/crd/mod.rs b/rust/operator-binary/src/crd/mod.rs index 8311ad22..e710bc06 100644 --- a/rust/operator-binary/src/crd/mod.rs +++ b/rust/operator-binary/src/crd/mod.rs @@ -1093,7 +1093,7 @@ mod tests { name: airflow spec: image: - productVersion: 2.10.5 + productVersion: 3.0.6 clusterConfig: loadExamples: true exposeConfig: true @@ -1120,7 +1120,7 @@ mod tests { .resolve("airflow", "0.0.0-dev") .expect("test: resolved product image is always valid"); - assert_eq!("2.10.5", &resolved_airflow_image.product_version); + assert_eq!("3.0.6", &resolved_airflow_image.product_version); assert_eq!("KubernetesExecutor", cluster.spec.executor.to_string()); assert!(cluster.spec.cluster_config.load_examples); diff --git a/rust/operator-binary/src/env_vars.rs b/rust/operator-binary/src/env_vars.rs index 439fa705..109cb055 100644 --- a/rust/operator-binary/src/env_vars.rs +++ b/rust/operator-binary/src/env_vars.rs @@ -479,7 +479,7 @@ fn add_version_specific_env_vars( }, ); // As of 3.x a JWT key is required. - // See https://airflow.apache.org/docs/apache-airflow/3.0.1/configurations-ref.html#jwt-secret + // See https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#jwt-secret // This should be random, but must also be consistent across // api-services and replicas/roles for a given // cluster, but should also be cluster-specific. @@ -672,7 +672,7 @@ mod tests { #[test] fn test_airflow_3_authorization_env_vars() { let authorization_config = get_test_authorization_config(); - let authorization_env_vars = authorization_env_vars(&authorization_config, "3.0.1"); + let authorization_env_vars = authorization_env_vars(&authorization_config, "3.0.6"); let authorization_env_vars = authorization_env_vars .into_iter() .map(|env| (env.name, env.value.expect("env var value must be present"))) diff --git a/tests/test-definition.yaml b/tests/test-definition.yaml index a4010651..4fc72c88 100644 --- a/tests/test-definition.yaml +++ b/tests/test-definition.yaml @@ -7,16 +7,17 @@ dimensions: - name: airflow values: - - 2.10.4 + - 2.9.3 - 2.10.5 - 3.0.1 + - 3.0.6 # To use a custom image, add a comma and the full name after the product version - # - 3.0.1,oci.stackable.tech/sandbox/airflow:3.0.1-stackable0.0.0-dev + # - 3.0.6,oci.stackable.tech/sandbox/airflow:3.0.6-stackable0.0.0-dev - name: airflow-latest values: - - 3.0.1 + - 3.0.6 # To use a custom image, add a comma and the full name after the product version - # - 3.0.1,oci.stackable.tech/sandbox/airflow:3.0.1-stackable0.0.0-dev + # - 3.0.6,oci.stackable.tech/sandbox/airflow:3.0.6-stackable0.0.0-dev - name: opa-latest values: - 1.4.2 From cab57741e0e76be5b9b09f483e841f7ae8ca2158 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Thu, 25 Sep 2025 16:56:07 +0200 Subject: [PATCH 2/5] changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3750f3a0..4edb4121 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,12 +8,14 @@ - Add new roles for dag-processor and triggerer processes ([#679]). - Added a note on webserver workers to the trouble-shooting section ([#685]). - Helm: Allow Pod `priorityClassName` to be configured ([#687]). +- Added airflow `3.0.6` ([#692]). ### Changed - Use internal secrets for secret- and jwt-keys ([#686]). - Update uvicorn version and revert to default number of API workers ([#690]). - Deprecate airflow `2.9.3` ([#691]). +- Deprecate airflow `2.10.5` ([#692]). ### Fixed @@ -24,6 +26,10 @@ Thus when deploying multiple Airflow instances in the same namespace, there would be a conflict over the contents of that ConfigMap ([#678]). - For versions >= 3 custom logging initializes the RemoteLogIO handler to fix remote logging ([#683]). +### Removed + +- Removed airflow `2.10.4` ([#692]). + [#667]: https://github.com/stackabletech/airflow-operator/pull/667 [#668]: https://github.com/stackabletech/airflow-operator/pull/668 [#669]: https://github.com/stackabletech/airflow-operator/pull/669 @@ -35,6 +41,7 @@ [#687]: https://github.com/stackabletech/airflow-operator/pull/687 [#690]: https://github.com/stackabletech/airflow-operator/pull/690 [#691]: https://github.com/stackabletech/airflow-operator/pull/691 +[#692]: https://github.com/stackabletech/airflow-operator/pull/692 ## [25.7.0] - 2025-07-23 From 0062561564b60717356bac97b36a7fc5f3bc590e Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Fri, 26 Sep 2025 11:00:13 +0200 Subject: [PATCH 3/5] updated getting-started script --- .../getting_started/code/getting_started.sh | 51 ++++++++++++++----- .../code/getting_started.sh.j2 | 51 ++++++++++++++----- 2 files changed, 76 insertions(+), 26 deletions(-) diff --git a/docs/modules/airflow/examples/getting_started/code/getting_started.sh b/docs/modules/airflow/examples/getting_started/code/getting_started.sh index 4bed0189..d27cbaba 100755 --- a/docs/modules/airflow/examples/getting_started/code/getting_started.sh +++ b/docs/modules/airflow/examples/getting_started/code/getting_started.sh @@ -115,7 +115,7 @@ sleep 5 server_health() { # tag::server-health[] - curl -s -XGET http://localhost:8080/api/v1/health + curl -s -XGET http://localhost:8080/api/v2/monitor/health # end::server-health[] } @@ -130,22 +130,39 @@ fi enable_dag() { # tag::enable-dag[] - curl -s --user airflow:airflow -H 'Content-Type:application/json' \ - -XPATCH http://localhost:8080/api/v1/dags/example_trigger_target_dag \ - -d '{"is_paused": false}' + ACCESS_TOKEN=$( + curl -s -XPOST http://localhost:8080/auth/token \ + -H 'Content-Type: application/json' \ + -d '{ + "username": "airflow", + "password": "airflow" + }' | jq '.access_token' | tr -d '"' + ) + curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -XPATCH http://localhost:8080/api/v2/dags/example_trigger_target_dag \ + -d '{"is_paused": false}' | jq '.is_paused' # end::enable-dag[] } -SLEEP_SECONDS=120 +SLEEP_SECONDS=10 echo "Sleeping for $SLEEP_SECONDS seconds to wait for the DAG to be registered" sleep "$SLEEP_SECONDS" echo "Triggering a DAG run. Enable DAG..." -enable_dag +paused=$(enable_dag) +echo "DAG paused: $paused" run_dag() { # tag::run-dag[] - curl -s --user airflow:airflow -H 'Content-Type:application/json' \ - -XPOST http://localhost:8080/api/v1/dags/example_trigger_target_dag/dagRuns \ - -d '{}' | jq -r '.dag_run_id' + ACCESS_TOKEN=$( + curl -s -XPOST http://localhost:8080/auth/token \ + -H 'Content-Type: application/json' \ + -d '{ + "username": "airflow", + "password": "airflow" + }' | jq '.access_token' | tr -d '"' + ) + curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -XPOST http://localhost:8080/api/v2/dags/example_trigger_target_dag/dagRuns \ + -d '{"logical_date": null,"conf": {"message": "Hello World"}}' | jq -r '.dag_run_id' # end::run-dag[] } @@ -153,8 +170,16 @@ dag_id=$(run_dag) request_dag_status() { # tag::check-dag[] - curl -s --user airflow:airflow -H 'Content-Type:application/json' \ - -XGET http://localhost:8080/api/v1/dags/example_trigger_target_dag/dagRuns/"$dag_id" | jq -r '.state' + ACCESS_TOKEN=$( + curl -s -XPOST http://localhost:8080/auth/token \ + -H 'Content-Type: application/json' \ + -d '{ + "username": "airflow", + "password": "airflow" + }' | jq '.access_token' | tr -d '"' + ) + curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type:application/json' \ + -XGET http://localhost:8080/api/v2/dags/example_trigger_target_dag/dagRuns/"$dag_id" | jq -r '.state' # end::check-dag[] } @@ -168,8 +193,8 @@ done echo "Checking DAG result ..." if [ "$dag_state" == "success" ]; then - echo "DAG run successful for ID: " "$dag_id" + echo "DAG run successful for ID: $dag_id" else - echo "The DAG was not successful. State: " "$dag_state" + echo "The DAG was not successful. State: $dag_state" exit 1 fi diff --git a/docs/modules/airflow/examples/getting_started/code/getting_started.sh.j2 b/docs/modules/airflow/examples/getting_started/code/getting_started.sh.j2 index beaab225..85f0f540 100755 --- a/docs/modules/airflow/examples/getting_started/code/getting_started.sh.j2 +++ b/docs/modules/airflow/examples/getting_started/code/getting_started.sh.j2 @@ -115,7 +115,7 @@ sleep 5 server_health() { # tag::server-health[] - curl -s -XGET http://localhost:8080/api/v1/health + curl -s -XGET http://localhost:8080/api/v2/monitor/health # end::server-health[] } @@ -130,22 +130,39 @@ fi enable_dag() { # tag::enable-dag[] - curl -s --user airflow:airflow -H 'Content-Type:application/json' \ - -XPATCH http://localhost:8080/api/v1/dags/example_trigger_target_dag \ - -d '{"is_paused": false}' + ACCESS_TOKEN=$( + curl -s -XPOST http://localhost:8080/auth/token \ + -H 'Content-Type: application/json' \ + -d '{ + "username": "airflow", + "password": "airflow" + }' | jq '.access_token' | tr -d '"' + ) + curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -XPATCH http://localhost:8080/api/v2/dags/example_trigger_target_dag \ + -d '{"is_paused": false}' | jq '.is_paused' # end::enable-dag[] } -SLEEP_SECONDS=120 +SLEEP_SECONDS=10 echo "Sleeping for $SLEEP_SECONDS seconds to wait for the DAG to be registered" sleep "$SLEEP_SECONDS" echo "Triggering a DAG run. Enable DAG..." -enable_dag +paused=$(enable_dag) +echo "DAG paused: $paused" run_dag() { # tag::run-dag[] - curl -s --user airflow:airflow -H 'Content-Type:application/json' \ - -XPOST http://localhost:8080/api/v1/dags/example_trigger_target_dag/dagRuns \ - -d '{}' | jq -r '.dag_run_id' + ACCESS_TOKEN=$( + curl -s -XPOST http://localhost:8080/auth/token \ + -H 'Content-Type: application/json' \ + -d '{ + "username": "airflow", + "password": "airflow" + }' | jq '.access_token' | tr -d '"' + ) + curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -XPOST http://localhost:8080/api/v2/dags/example_trigger_target_dag/dagRuns \ + -d '{"logical_date": null,"conf": {"message": "Hello World"}}' | jq -r '.dag_run_id' # end::run-dag[] } @@ -153,8 +170,16 @@ dag_id=$(run_dag) request_dag_status() { # tag::check-dag[] - curl -s --user airflow:airflow -H 'Content-Type:application/json' \ - -XGET http://localhost:8080/api/v1/dags/example_trigger_target_dag/dagRuns/"$dag_id" | jq -r '.state' + ACCESS_TOKEN=$( + curl -s -XPOST http://localhost:8080/auth/token \ + -H 'Content-Type: application/json' \ + -d '{ + "username": "airflow", + "password": "airflow" + }' | jq '.access_token' | tr -d '"' + ) + curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type:application/json' \ + -XGET http://localhost:8080/api/v2/dags/example_trigger_target_dag/dagRuns/"$dag_id" | jq -r '.state' # end::check-dag[] } @@ -168,8 +193,8 @@ done echo "Checking DAG result ..." if [ "$dag_state" == "success" ]; then - echo "DAG run successful for ID: " "$dag_id" + echo "DAG run successful for ID: $dag_id" else - echo "The DAG was not successful. State: " "$dag_state" + echo "The DAG was not successful. State: $dag_state" exit 1 fi From e532354d006afa89aec9649430ae0a811bfb252f Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Fri, 26 Sep 2025 13:33:07 +0200 Subject: [PATCH 4/5] reduce workers for logging tests --- docs/modules/airflow/examples/getting_started/code/airflow.yaml | 1 + docs/modules/airflow/pages/troubleshooting/index.adoc | 2 +- .../templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/modules/airflow/examples/getting_started/code/airflow.yaml b/docs/modules/airflow/examples/getting_started/code/airflow.yaml index 7ac69b34..1ddee8d4 100644 --- a/docs/modules/airflow/examples/getting_started/code/airflow.yaml +++ b/docs/modules/airflow/examples/getting_started/code/airflow.yaml @@ -6,6 +6,7 @@ metadata: spec: image: productVersion: 3.0.6 + pullPolicy: IfNotPresent clusterConfig: loadExamples: true exposeConfig: false diff --git a/docs/modules/airflow/pages/troubleshooting/index.adoc b/docs/modules/airflow/pages/troubleshooting/index.adoc index 526487e0..b8c7b4f2 100644 --- a/docs/modules/airflow/pages/troubleshooting/index.adoc +++ b/docs/modules/airflow/pages/troubleshooting/index.adoc @@ -46,7 +46,7 @@ or change the environment variable using `envOverrides`: ---- webservers: envOverrides: - AIRFLOW__API__WORKERS: 6 # something other than the default + AIRFLOW__API__WORKERS: "6" # something other than the default ---- TIP: Our strong recommendation is to increase the webserver replicas, with each webserver running a single worker, as this removes the risk of running into timeouts or memory issues. diff --git a/tests/templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 b/tests/templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 index 498f6db0..39624b71 100644 --- a/tests/templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 +++ b/tests/templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 @@ -84,6 +84,8 @@ spec: max: 2000m memory: limit: 3Gi + envOverrides: + AIRFLOW__API__WORKERS: "1" roleGroups: automatic-log-config: replicas: 1 From b849673a45ba461298662346deed7e245a6582a9 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Fri, 26 Sep 2025 14:25:55 +0200 Subject: [PATCH 5/5] added comment --- .../templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 b/tests/templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 index 39624b71..40e027aa 100644 --- a/tests/templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 +++ b/tests/templates/kuttl/logging/41-install-airflow-cluster.yaml.j2 @@ -85,6 +85,9 @@ spec: memory: limit: 3Gi envOverrides: + # logging tests use two webservers and if two tests should run in + # parallel then the CPU usage can be high if the default number of + # workers (4) is used AIRFLOW__API__WORKERS: "1" roleGroups: automatic-log-config: