Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand All @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: airflow
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
loadExamples: false
exposeConfig: false
Expand Down
2 changes: 1 addition & 1 deletion docs/modules/airflow/examples/example-airflow-gitsync.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: airflow
spec:
image:
productVersion: "2.10.5"
productVersion: 3.0.6
clusterConfig:
loadExamples: false
exposeConfig: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: airflow
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
loadExamples: false
exposeConfig: false
Expand Down
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ metadata:
name: airflow
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
pullPolicy: IfNotPresent
clusterConfig:
loadExamples: true
exposeConfig: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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[]
}

Expand All @@ -130,31 +130,56 @@ 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[]
}

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[]
}

Expand All @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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[]
}

Expand All @@ -130,31 +130,56 @@ 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[]
}

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[]
}

Expand All @@ -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
2 changes: 1 addition & 1 deletion docs/modules/airflow/pages/troubleshooting/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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.
4 changes: 2 additions & 2 deletions docs/modules/airflow/pages/usage-guide/security.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ metadata:
name: airflow-with-ldap
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
authentication:
- authenticationClass: ldap # <1>
Expand Down Expand Up @@ -71,7 +71,7 @@ metadata:
name: airflow-with-oidc
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
authentication:
- authenticationClass: keycloak # <1>
Expand Down
4 changes: 2 additions & 2 deletions docs/modules/airflow/partials/supported-versions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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)
2 changes: 1 addition & 1 deletion examples/simple-airflow-cluster-dags-cmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ metadata:
name: airflow-dags-cmap
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
loadExamples: false
exposeConfig: false
Expand Down
2 changes: 1 addition & 1 deletion examples/simple-airflow-cluster-ldap-insecure-tls.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ metadata:
name: airflow-insecure-tls
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
loadExamples: true
exposeConfig: true
Expand Down
2 changes: 1 addition & 1 deletion examples/simple-airflow-cluster-ldap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion examples/simple-airflow-cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ metadata:
name: airflow
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
loadExamples: true
exposeConfig: false
Expand Down
2 changes: 1 addition & 1 deletion rust/operator-binary/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
4 changes: 2 additions & 2 deletions rust/operator-binary/src/crd/affinity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
credentialsSecret: airflow-credentials
webservers:
Expand Down Expand Up @@ -163,7 +163,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
credentialsSecret: airflow-credentials
webservers:
Expand Down
4 changes: 2 additions & 2 deletions rust/operator-binary/src/crd/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1093,7 +1093,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 2.10.5
productVersion: 3.0.6
clusterConfig:
loadExamples: true
exposeConfig: true
Expand All @@ -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);
Expand Down
Loading