Skip to content
Open
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,6 +8,7 @@
([#862]).
- Support for configuring which reverse proxies the webserver trusts `X-Forwarded-*` headers from,
via `spec.webservers.roleConfig.trustedProxies` ([#835]).
- Added airflow `3.3.1` ([#865]).

### Changed

Expand Down Expand Up @@ -42,6 +43,7 @@
variables set by the operator. In particular, `CONTAINERDEBUG_LOG_DIRECTORY` can now be
overridden, whereas previously the operator's value always took precedence ([#838]).
- Make operations infallible where appropriate ([#852], [#860]).
- Deprecated airflow `3.2.2` ([#865]).

### Fixed

Expand All @@ -54,6 +56,10 @@
- The operator now watches all resources that it creates and early-exits the reconcile action when the
cluster is marked for deletion ([#849]).

### Removed

- Removed airflow `3.1.6` ([#865]).

[#814]: https://github.com/stackabletech/airflow-operator/pull/814
[#821]: https://github.com/stackabletech/airflow-operator/pull/821
[#827]: https://github.com/stackabletech/airflow-operator/pull/827
Expand All @@ -69,6 +75,7 @@
[#852]: https://github.com/stackabletech/airflow-operator/pull/852
[#860]: https://github.com/stackabletech/airflow-operator/pull/860
[#862]: https://github.com/stackabletech/airflow-operator/pull/862
[#865]: https://github.com/stackabletech/airflow-operator/pull/865

## [26.7.0] - 2026-07-21

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: airflow-dag-bundles
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
loadExamples: false
exposeConfig: false
Expand All @@ -24,7 +24,7 @@ spec:
"classpath": "airflow.providers.git.bundles.git.GitDagBundle",
"kwargs": {
"git_conn_id": "repo1",
"tracking_ref": "3.1.6",
"tracking_ref": "3.3.1",
"subdir": "airflow-core/src/airflow/example_dags"
}
},
Expand All @@ -33,7 +33,7 @@ spec:
"classpath": "airflow.providers.git.bundles.git.GitDagBundle",
"kwargs": {
"git_conn_id": "repo2",
"tracking_ref": "3.1.6",
"tracking_ref": "3.3.1",
"subdir": "airflow-core/src/airflow/example_dags"
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
credentialsSecretName: airflow-admin-credentials
metadataDatabase:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
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: 3.1.6
productVersion: 3.3.1
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: 3.1.6
productVersion: 3.3.1
clusterConfig: {}
webservers:
roleConfig:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig: {}
webservers:
roleConfig:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: airflow
spec:
image:
productVersion: 3.2.2
productVersion: 3.3.1
pullPolicy: IfNotPresent
clusterConfig:
loadExamples: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ The {airflow-prerequisites}[Airflow documentation] specifies:

Fully supported for production usage:

* PostgreSQL: 13, 14, 15, 16, 17
* PostgreSQL: 14, 15, 16, 17, 18

NOTE: The SDP Airflow images do not bundle the MySQL provider for Airflow.
If you need MySQL or MariaDB as an Airflow back-end, you will need to create a custom image to include this provider.
Expand Down
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: 3.1.6
productVersion: 3.3.1
clusterConfig:
authentication:
- authenticationClass: ldap # <1>
Expand Down Expand Up @@ -77,7 +77,7 @@ metadata:
name: airflow-with-oidc
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
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.2.2
- 3.1.6 (deprecated)
- 3.3.1
- 3.2.2 (deprecated)
- 3.0.6 (LTS)
- 2.9.3 (deprecated)
4 changes: 2 additions & 2 deletions rust/operator-binary/src/controller/build/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ pub(crate) mod test_support {
uid: e6ac237d-a6d4-43a1-8135-f36506110912
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
loadExamples: false
exposeConfig: false
Expand Down Expand Up @@ -557,7 +557,7 @@ mod tests {
"airflow.stackable.tech_airflowcluster",
),
("app.kubernetes.io/name", "airflow"),
("app.kubernetes.io/version", &app_version_label("3.1.6")),
("app.kubernetes.io/version", &app_version_label("3.3.1")),
("stackable.tech/vendor", "Stackable"),
]
.map(|(key, value)| (key.to_string(), value.to_string())),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,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.6");
let authorization_env_vars = authorization_env_vars(&authorization_config, "3.3.1");
let authorization_env_vars = authorization_env_vars
.into_iter()
.map(|env| (env.name, env.value.expect("env var value must be present")))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ mod tests {
create_airflow_stdlib_config(
&log_config,
"/stackable/log/airflow",
&resolved_image("3.0.6"),
&resolved_image("3.3.1"),
),
create_airflow_structlog_config(&log_config, "/stackable/log/airflow"),
] {
Expand All @@ -333,6 +333,8 @@ mod tests {
fn test_logging_variant_selection() {
// The stdlib config copies Airflow's default logging config, the structlog one
// defines its own `mask_secrets_core` filter.
// N.B. This test assumes either Airflow 2.* or 3.0.* for stdlib_content as the
// code branches at this point.
let log_config =
ValidatedContainerLogConfigChoice::Automatic(AutomaticContainerLogConfig::default());
let stdlib_content = create_airflow_config(
Expand All @@ -344,7 +346,7 @@ mod tests {
let structlog_content = create_airflow_config(
&log_config,
"/stackable/log/airflow",
&resolved_image("3.1.6"),
&resolved_image("3.3.1"),
)
.expect("automatic log config produces content");
assert!(stdlib_content.contains("deepcopy(airflow_local_settings.DEFAULT_LOGGING_CONFIG)"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ mod tests {
authorization::{AirflowAuthorizationResolved, OpaConfigResolved},
};

const TEST_AIRFLOW_VERSION: &str = "3.0.6";
const TEST_AIRFLOW_VERSION: &str = "3.3.1";

#[test]
fn test_auth_db_config() {
Expand Down
12 changes: 6 additions & 6 deletions rust/operator-binary/src/controller/validate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -370,9 +370,9 @@ mod tests {
fn test_resolved_product_image()
-> stackable_operator::commons::product_image_selection::ResolvedProductImage {
stackable_operator::commons::product_image_selection::ResolvedProductImage {
product_version: "3.0.6".to_string(),
app_version_label_value: "3.0.6".parse().expect("valid label value"),
image: "oci.example.org/sdp/airflow:3.0.6-stackable0.0.0-dev".to_string(),
product_version: "3.3.1".to_string(),
app_version_label_value: "3.3.1".parse().expect("valid label value"),
image: "oci.example.org/sdp/airflow:3.3.1-stackable0.0.0-dev".to_string(),
image_pull_policy: "IfNotPresent".to_string(),
pull_secrets: None,
}
Expand All @@ -386,7 +386,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
loadExamples: false
exposeConfig: false
Expand Down Expand Up @@ -486,7 +486,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
loadExamples: false
exposeConfig: false
Expand Down Expand Up @@ -567,7 +567,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
loadExamples: false
exposeConfig: false
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 @@ -73,7 +73,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
credentialsSecretName: airflow-admin-credentials
metadataDatabase:
Expand Down Expand Up @@ -191,7 +191,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
credentialsSecretName: airflow-admin-credentials
metadataDatabase:
Expand Down
6 changes: 3 additions & 3 deletions rust/operator-binary/src/crd/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1094,7 +1094,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 3.1.6
productVersion: 3.3.1
clusterConfig:
loadExamples: true
exposeConfig: true
Expand Down Expand Up @@ -1132,7 +1132,7 @@ mod tests {
)
.expect("test: resolved product image is always valid");

assert_eq!("3.1.6", &resolved_airflow_image.product_version);
assert_eq!("3.3.1", &resolved_airflow_image.product_version);

assert_eq!(
"KubernetesExecutor",
Expand Down Expand Up @@ -1179,7 +1179,7 @@ mod tests {
name: airflow
spec:
image:
productVersion: 3.2.2
productVersion: 3.3.1
clusterConfig:
credentialsSecretName: airflow-admin-credentials
metadataDatabase:
Expand Down
2 changes: 1 addition & 1 deletion tests/templates/kuttl/commons/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def assert_metric(role, role_group, metric):

# Check if dag run state is "success", "queued", or "running"
# TODO: in future, we could wait on it.
# See: https://airflow.apache.org/docs/apache-airflow/3.1.6/stable-rest-api-ref.html#operation/wait_dag_run_until_finished
# See: https://airflow.apache.org/docs/apache-airflow/3.3.1/stable-rest-api-ref.html
def assert_dag_started(rest_url, headers, dag_id, dag_run_id):
dag_run_response = requests.get(
f"{rest_url}/dags/{dag_id}/dagRuns/{dag_run_id}", headers=headers
Expand Down
2 changes: 1 addition & 1 deletion tests/templates/kuttl/triggerer/triggerer_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def assert_metric(role, role_group, metric):

# Check if dag run state is "success", "queued", or "running"
# TODO: in future, we could wait on it.
# See: https://airflow.apache.org/docs/apache-airflow/3.1.6/stable-rest-api-ref.html#operation/wait_dag_run_until_finished
# See: https://airflow.apache.org/docs/apache-airflow/3.3.1/stable-rest-api-ref.html
def assert_dag_started(rest_url, headers, dag_id, dag_run_id):
dag_run_response = requests.get(
f"{rest_url}/dags/{dag_id}/dagRuns/{dag_run_id}", headers=headers
Expand Down
4 changes: 2 additions & 2 deletions tests/test-definition.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ dimensions:
values:
- 2.9.3
- 3.0.6
- 3.1.6
- 3.2.2
- 3.3.1
# To use a custom image, add a comma and the full name after the product version
# - x.x.x,oci.stackable.tech/sandbox/airflow:x.x.x-stackable0.0.0-dev
- name: airflow-latest
values:
- 3.2.2
- 3.3.1
# To use a custom image, add a comma and the full name after the product version
# - x.x.x,oci.stackable.tech/sandbox/airflow:x.x.x-stackable0.0.0-dev
- name: opa-latest
Expand Down
Loading