This is an automated email from the ASF dual-hosted git repository.
kaxil 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 90b8ee44d78 Fix Google Links for TPC (Trusted Partner Cloud) (#69805)
90b8ee44d78 is described below
commit 90b8ee44d78ab32d61f9f036569eeba0f959f4f1
Author: M. Olcay Tercanlı <[email protected]>
AuthorDate: Mon Jul 13 22:08:22 2026 +0200
Fix Google Links for TPC (Trusted Partner Cloud) (#69805)
Co-authored-by: Maksim Yermakou <[email protected]>
---
providers/google/src/airflow/providers/google/cloud/links/base.py | 3 ++-
.../src/airflow/providers/google/cloud/links/cloud_functions.py | 4 ++--
.../providers/google/cloud/links/cloud_storage_transfer.py | 4 ++--
.../google/src/airflow/providers/google/cloud/links/compute.py | 4 ++--
.../airflow/providers/google/cloud/links/data_loss_prevention.py | 4 +---
.../google/src/airflow/providers/google/cloud/links/datafusion.py | 8 +++++---
.../airflow/providers/google/cloud/operators/cloud_composer.py | 4 ++--
.../providers/google/cloud/operators/dataproc_metastore.py | 3 +--
.../src/airflow/providers/google/common/hooks/base_google.py | 7 ++++++-
.../google/src/airflow/providers/google/common/links/storage.py | 3 +--
10 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/providers/google/src/airflow/providers/google/cloud/links/base.py
b/providers/google/src/airflow/providers/google/cloud/links/base.py
index 2d540ad40ee..d6accd33e39 100644
--- a/providers/google/src/airflow/providers/google/cloud/links/base.py
+++ b/providers/google/src/airflow/providers/google/cloud/links/base.py
@@ -21,13 +21,14 @@ from typing import TYPE_CHECKING, ClassVar
from urllib.parse import urlparse
from airflow.providers.common.compat.sdk import BaseOperatorLink,
BaseSensorOperator, XCom
+from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS,
BaseOperator
if TYPE_CHECKING:
from airflow.providers.common.compat.sdk import Context, TaskInstanceKey
from airflow.providers.google.cloud.operators.cloud_base import
GoogleCloudBaseOperator
-BASE_LINK = "https://console.cloud.google.com"
+BASE_LINK =
f"https://console.cloud.{GoogleBaseHook.get_high_value_cookie_domain()}"
class BaseGoogleLink(BaseOperatorLink):
diff --git
a/providers/google/src/airflow/providers/google/cloud/links/cloud_functions.py
b/providers/google/src/airflow/providers/google/cloud/links/cloud_functions.py
index a0e5373bedc..9621fc19b65 100644
---
a/providers/google/src/airflow/providers/google/cloud/links/cloud_functions.py
+++
b/providers/google/src/airflow/providers/google/cloud/links/cloud_functions.py
@@ -19,9 +19,9 @@
from __future__ import annotations
-from airflow.providers.google.cloud.links.base import BaseGoogleLink
+from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
-CLOUD_FUNCTIONS_BASE_LINK = "https://console.cloud.google.com/functions"
+CLOUD_FUNCTIONS_BASE_LINK = BASE_LINK + "/functions"
CLOUD_FUNCTIONS_DETAILS_LINK = (
CLOUD_FUNCTIONS_BASE_LINK +
"/details/{location}/{function_name}?project={project_id}"
diff --git
a/providers/google/src/airflow/providers/google/cloud/links/cloud_storage_transfer.py
b/providers/google/src/airflow/providers/google/cloud/links/cloud_storage_transfer.py
index e8ccffe7b1c..45f9842e93c 100644
---
a/providers/google/src/airflow/providers/google/cloud/links/cloud_storage_transfer.py
+++
b/providers/google/src/airflow/providers/google/cloud/links/cloud_storage_transfer.py
@@ -21,12 +21,12 @@ from __future__ import annotations
from typing import TYPE_CHECKING
-from airflow.providers.google.cloud.links.base import BaseGoogleLink
+from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
if TYPE_CHECKING:
from airflow.providers.common.compat.sdk import Context
-CLOUD_STORAGE_TRANSFER_BASE_LINK = "https://console.cloud.google.com/transfer"
+CLOUD_STORAGE_TRANSFER_BASE_LINK = BASE_LINK + "/transfer"
CLOUD_STORAGE_TRANSFER_LIST_LINK = CLOUD_STORAGE_TRANSFER_BASE_LINK +
"/jobs?project={project_id}"
diff --git
a/providers/google/src/airflow/providers/google/cloud/links/compute.py
b/providers/google/src/airflow/providers/google/cloud/links/compute.py
index 6989bc44f77..363dc00b387 100644
--- a/providers/google/src/airflow/providers/google/cloud/links/compute.py
+++ b/providers/google/src/airflow/providers/google/cloud/links/compute.py
@@ -19,9 +19,9 @@
from __future__ import annotations
-from airflow.providers.google.cloud.links.base import BaseGoogleLink
+from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
-COMPUTE_BASE_LINK = "https://console.cloud.google.com/compute"
+COMPUTE_BASE_LINK = BASE_LINK + "/compute"
COMPUTE_LINK = (
COMPUTE_BASE_LINK +
"/instancesDetail/zones/{location_id}/instances/{resource_id}?project={project_id}"
)
diff --git
a/providers/google/src/airflow/providers/google/cloud/links/data_loss_prevention.py
b/providers/google/src/airflow/providers/google/cloud/links/data_loss_prevention.py
index 1ea6bef696a..be04d2f7f5e 100644
---
a/providers/google/src/airflow/providers/google/cloud/links/data_loss_prevention.py
+++
b/providers/google/src/airflow/providers/google/cloud/links/data_loss_prevention.py
@@ -17,9 +17,7 @@
from __future__ import annotations
-from airflow.providers.google.cloud.links.base import BaseGoogleLink
-
-BASE_LINK = "https://console.cloud.google.com"
+from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
DLP_BASE_LINK = BASE_LINK + "/security/dlp"
diff --git
a/providers/google/src/airflow/providers/google/cloud/links/datafusion.py
b/providers/google/src/airflow/providers/google/cloud/links/datafusion.py
index f6e996434fc..80988269fd6 100644
--- a/providers/google/src/airflow/providers/google/cloud/links/datafusion.py
+++ b/providers/google/src/airflow/providers/google/cloud/links/datafusion.py
@@ -19,10 +19,12 @@
from __future__ import annotations
-from airflow.providers.google.cloud.links.base import BaseGoogleLink
+from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
-BASE_LINK = "https://console.cloud.google.com/data-fusion"
-DATAFUSION_INSTANCE_LINK = BASE_LINK +
"/locations/{region}/instances/{instance_name}?project={project_id}"
+DATAFUSION_BASE_LINK = BASE_LINK + "/data-fusion"
+DATAFUSION_INSTANCE_LINK = (
+ DATAFUSION_BASE_LINK +
"/locations/{region}/instances/{instance_name}?project={project_id}"
+)
DATAFUSION_PIPELINES_LINK = "{uri}/cdap/ns/{namespace}/pipelines"
DATAFUSION_PIPELINE_LINK =
"{uri}/pipelines/ns/{namespace}/view/{pipeline_name}"
diff --git
a/providers/google/src/airflow/providers/google/cloud/operators/cloud_composer.py
b/providers/google/src/airflow/providers/google/cloud/operators/cloud_composer.py
index 43372c30905..d05e3022ab3 100644
---
a/providers/google/src/airflow/providers/google/cloud/operators/cloud_composer.py
+++
b/providers/google/src/airflow/providers/google/cloud/operators/cloud_composer.py
@@ -28,7 +28,7 @@ from google.cloud.orchestration.airflow.service_v1.types
import Environment, Exe
from airflow.providers.common.compat.sdk import AirflowException, conf
from airflow.providers.google.cloud.hooks.cloud_composer import
CloudComposerHook
-from airflow.providers.google.cloud.links.base import BaseGoogleLink
+from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
from airflow.providers.google.cloud.operators.cloud_base import
GoogleCloudBaseOperator
from airflow.providers.google.cloud.triggers.cloud_composer import (
CloudComposerAirflowCLICommandTrigger,
@@ -42,7 +42,7 @@ if TYPE_CHECKING:
from airflow.providers.common.compat.sdk import Context
-CLOUD_COMPOSER_BASE_LINK =
"https://console.cloud.google.com/composer/environments"
+CLOUD_COMPOSER_BASE_LINK = BASE_LINK + "/composer/environments"
CLOUD_COMPOSER_DETAILS_LINK = (
CLOUD_COMPOSER_BASE_LINK +
"/detail/{region}/{environment_id}/monitoring?project={project_id}"
)
diff --git
a/providers/google/src/airflow/providers/google/cloud/operators/dataproc_metastore.py
b/providers/google/src/airflow/providers/google/cloud/operators/dataproc_metastore.py
index 5381588710d..f4bf20f8ed1 100644
---
a/providers/google/src/airflow/providers/google/cloud/operators/dataproc_metastore.py
+++
b/providers/google/src/airflow/providers/google/cloud/operators/dataproc_metastore.py
@@ -32,7 +32,7 @@ from google.cloud.metastore_v1.types.metastore import
DatabaseDumpSpec, Restore
from airflow.providers.common.compat.sdk import AirflowException
from airflow.providers.google.cloud.hooks.dataproc_metastore import
DataprocMetastoreHook
-from airflow.providers.google.cloud.links.base import BaseGoogleLink
+from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
from airflow.providers.google.cloud.operators.cloud_base import
GoogleCloudBaseOperator
from airflow.providers.google.common.links.storage import StorageLink
@@ -42,7 +42,6 @@ if TYPE_CHECKING:
from airflow.providers.common.compat.sdk import Context, TaskInstanceKey
from airflow.providers.google.version_compat import BaseOperator
-BASE_LINK = "https://console.cloud.google.com"
METASTORE_BASE_LINK = BASE_LINK +
"/dataproc/metastore/services/{region}/{service_id}"
METASTORE_BACKUP_LINK = METASTORE_BASE_LINK +
"/backups/{resource}?project={project_id}"
METASTORE_BACKUPS_LINK = METASTORE_BASE_LINK +
"/backuprestore?project={project_id}"
diff --git
a/providers/google/src/airflow/providers/google/common/hooks/base_google.py
b/providers/google/src/airflow/providers/google/common/hooks/base_google.py
index 7ffef424bf8..64990197169 100644
--- a/providers/google/src/airflow/providers/google/common/hooks/base_google.py
+++ b/providers/google/src/airflow/providers/google/common/hooks/base_google.py
@@ -427,12 +427,17 @@ class GoogleBaseHook(BaseHook):
"and can contain only lowercase letters, digits, and hyphens."
)
- def is_default_universe(self) -> bool:
+ @staticmethod
+ def is_default_universe() -> bool:
global_universe_domain = os.getenv("GOOGLE_CLOUD_UNIVERSE_DOMAIN",
None)
if global_universe_domain in ("googleapis.com", "", None):
return True
return False
+ @staticmethod
+ def get_high_value_cookie_domain() -> str:
+ return os.getenv("GOOGLE_CLOUD_HIGH_VALUE_COOKIE_DOMAIN", "google.com")
+
def get_client_options(
self,
api_endpoint_override: str | None = None,
diff --git
a/providers/google/src/airflow/providers/google/common/links/storage.py
b/providers/google/src/airflow/providers/google/common/links/storage.py
index 8041ae3a265..5f1e7e24372 100644
--- a/providers/google/src/airflow/providers/google/common/links/storage.py
+++ b/providers/google/src/airflow/providers/google/common/links/storage.py
@@ -18,9 +18,8 @@
from __future__ import annotations
-from airflow.providers.google.cloud.links.base import BaseGoogleLink
+from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
-BASE_LINK = "https://console.cloud.google.com"
GCS_STORAGE_LINK = BASE_LINK +
"/storage/browser/{uri};tab=objects?project={project_id}"
GCS_FILE_DETAILS_LINK = BASE_LINK +
"/storage/browser/_details/{uri};tab=live_object?project={project_id}"