This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new bd3dca49c15 fix(providers/google): support sovereign console links
(#70001)
bd3dca49c15 is described below
commit bd3dca49c15e71558313616a50315181c1bb2078
Author: auyua9 <[email protected]>
AuthorDate: Wed Aug 19 03:20:15 2026 +0800
fix(providers/google): support sovereign console links (#70001)
---
.../google/src/airflow/providers/google/cloud/bundles/gcs.py | 2 +-
.../providers/google/cloud/log/stackdriver_task_handler.py | 6 ++++--
providers/google/tests/unit/google/cloud/bundles/test_gcs.py | 11 +++++++++++
.../unit/google/cloud/log/test_stackdriver_task_handler.py | 5 +++--
4 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/providers/google/src/airflow/providers/google/cloud/bundles/gcs.py
b/providers/google/src/airflow/providers/google/cloud/bundles/gcs.py
index e9806276a82..adb394ea103 100644
--- a/providers/google/src/airflow/providers/google/cloud/bundles/gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/bundles/gcs.py
@@ -154,7 +154,7 @@ class GCSDagBundle(BaseDagBundle):
# _view_url_template attribute. Should be removed when we drop
support for Airflow 3.0
return self._view_url_template
#
https://console.cloud.google.com/storage/browser/<bucket-name>/<prefix>
- url =
f"https://console.cloud.google.com/storage/browser/{self.bucket_name}"
+ url =
f"https://console.cloud.{GoogleBaseHook.get_high_value_cookie_domain()}/storage/browser/{self.bucket_name}"
if self.prefix:
url += f"/{self.prefix}"
diff --git
a/providers/google/src/airflow/providers/google/cloud/log/stackdriver_task_handler.py
b/providers/google/src/airflow/providers/google/cloud/log/stackdriver_task_handler.py
index 6c1772a8849..e6cb6c7e2c2 100644
---
a/providers/google/src/airflow/providers/google/cloud/log/stackdriver_task_handler.py
+++
b/providers/google/src/airflow/providers/google/cloud/log/stackdriver_task_handler.py
@@ -45,6 +45,7 @@ from airflow.exceptions import
AirflowProviderDeprecationWarning
from airflow.providers.common.compat.sdk import conf
from airflow.providers.google.cloud.utils.credentials_provider import
get_credentials_and_project_id
from airflow.providers.google.common.consts import CLIENT_INFO
+from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
from airflow.utils.log.file_task_handler import FileTaskHandler
from airflow.utils.log.logging_mixin import LoggingMixin
@@ -362,7 +363,7 @@ class StackdriverTaskHandler(logging.Handler):
LABEL_DAG_ID = LABEL_DAG_ID
LABEL_LOGICAL_DATE = LABEL_LOGICAL_DATE
LABEL_TRY_NUMBER = LABEL_TRY_NUMBER
- LOG_VIEWER_BASE_URL = "https://console.cloud.google.com/logs/viewer"
+ LOG_VIEWER_BASE_URL = "https://console.cloud.{domain}/logs/viewer"
LOG_NAME = "Google Stackdriver"
trigger_supported = True
@@ -545,7 +546,8 @@ class StackdriverTaskHandler(logging.Handler):
"advancedFilter": log_filter,
}
- url = f"{self.LOG_VIEWER_BASE_URL}?{urlencode(url_query_string)}"
+ log_viewer_url =
self.LOG_VIEWER_BASE_URL.format(domain=GoogleBaseHook.get_high_value_cookie_domain())
+ url = f"{log_viewer_url}?{urlencode(url_query_string)}"
return url
def close(self) -> None:
diff --git a/providers/google/tests/unit/google/cloud/bundles/test_gcs.py
b/providers/google/tests/unit/google/cloud/bundles/test_gcs.py
index 12a9b1ca549..07b46265923 100644
--- a/providers/google/tests/unit/google/cloud/bundles/test_gcs.py
+++ b/providers/google/tests/unit/google/cloud/bundles/test_gcs.py
@@ -70,6 +70,17 @@ class TestGCSDagBundle:
url ==
f"https://console.cloud.google.com/storage/browser/{GCS_BUCKET_NAME}/{GCS_BUCKET_PREFIX}"
)
+ def test_view_url_template_uses_high_value_cookie_domain(self,
monkeypatch):
+ monkeypatch.setenv("GOOGLE_CLOUD_HIGH_VALUE_COOKIE_DOMAIN",
"googleapis.cn")
+ bundle = GCSDagBundle(
+ name="test", gcp_conn_id=GCP_CONN_ID, prefix=GCS_BUCKET_PREFIX,
bucket_name=GCS_BUCKET_NAME
+ )
+
+ assert (
+ bundle.view_url_template()
+ ==
f"https://console.cloud.googleapis.cn/storage/browser/{GCS_BUCKET_NAME}/{GCS_BUCKET_PREFIX}"
+ )
+
def test_supports_versioning(self):
bundle = GCSDagBundle(
name="test", gcp_conn_id=GCP_CONN_ID, prefix=GCS_BUCKET_PREFIX,
bucket_name=GCS_BUCKET_NAME
diff --git
a/providers/google/tests/unit/google/cloud/log/test_stackdriver_task_handler.py
b/providers/google/tests/unit/google/cloud/log/test_stackdriver_task_handler.py
index c66ff24421b..d93030bfcaf 100644
---
a/providers/google/tests/unit/google/cloud/log/test_stackdriver_task_handler.py
+++
b/providers/google/tests/unit/google/cloud/log/test_stackdriver_task_handler.py
@@ -755,8 +755,9 @@ class TestStackdriverLoggingHandlerTask:
@mock.patch("airflow.providers.google.cloud.log.stackdriver_task_handler.get_credentials_and_project_id")
@mock.patch("airflow.providers.google.cloud.log.stackdriver_task_handler.LoggingServiceV2Client")
- def test_should_return_valid_external_url(self, mock_client,
mock_get_creds_and_project_id):
+ def test_should_return_valid_external_url(self, mock_client,
mock_get_creds_and_project_id, monkeypatch):
mock_get_creds_and_project_id.return_value = ("creds", "project_id")
+ monkeypatch.setenv("GOOGLE_CLOUD_HIGH_VALUE_COOKIE_DOMAIN",
"googleapis.cn")
stackdriver_task_handler =
StackdriverTaskHandler(gcp_key_path="KEY_PATH")
url = stackdriver_task_handler.get_external_log_url(self.ti,
self.ti.try_number)
@@ -764,7 +765,7 @@ class TestStackdriverLoggingHandlerTask:
parsed_url = urlsplit(url)
parsed_qs = parse_qs(parsed_url.query)
assert parsed_url.scheme == "https"
- assert parsed_url.netloc == "console.cloud.google.com"
+ assert parsed_url.netloc == "console.cloud.googleapis.cn"
assert parsed_url.path == "/logs/viewer"
assert {"project", "interval", "resource", "advancedFilter"} ==
set(parsed_qs.keys())
assert "global" in parsed_qs["resource"]