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 6f78320a8c4 Sync connection UI metadata in provider.yaml with hook 
definitions (#72087)
6f78320a8c4 is described below

commit 6f78320a8c411f0b835a8895fce422d3fb3fa3bb
Author: Yuseok Jo <[email protected]>
AuthorDate: Thu Aug 27 19:52:55 2026 +0900

    Sync connection UI metadata in provider.yaml with hook definitions (#72087)
---
 providers/airbyte/provider.yaml                    |  4 ++--
 .../airflow/providers/airbyte/get_provider_info.py |  4 ++--
 .../providers/alibaba/cloud/hooks/base_alibaba.py  |  5 -----
 providers/apache/arrow/provider.yaml               |  7 +++++++
 .../providers/apache/arrow/get_provider_info.py    |  5 +++++
 .../airflow/providers/arangodb/hooks/arangodb.py   |  2 +-
 providers/common/ai/provider.yaml                  | 14 +++++++++++---
 .../providers/common/ai/get_provider_info.py       | 21 ++++++++++++++++-----
 .../providers/common/ai/hooks/pydantic_ai.py       |  2 +-
 providers/git/provider.yaml                        |  5 ++++-
 .../src/airflow/providers/git/get_provider_info.py |  2 +-
 providers/google/provider.yaml                     | 22 ++++++++++++++++++++++
 .../airflow/providers/google/get_provider_info.py  | 14 ++++++++++++++
 providers/microsoft/azure/provider.yaml            |  6 +++---
 .../providers/microsoft/azure/get_provider_info.py |  3 ++-
 .../airflow/providers/microsoft/azure/hooks/asb.py |  2 +-
 providers/snowflake/provider.yaml                  |  5 +++--
 .../providers/snowflake/get_provider_info.py       |  3 ++-
 .../airflow/providers/telegram/hooks/telegram.py   |  2 +-
 19 files changed, 98 insertions(+), 30 deletions(-)

diff --git a/providers/airbyte/provider.yaml b/providers/airbyte/provider.yaml
index 9050bcdfd75..da8491cd550 100644
--- a/providers/airbyte/provider.yaml
+++ b/providers/airbyte/provider.yaml
@@ -113,7 +113,7 @@ connection-types:
         - port
       relabeling:
         host: Server URL
-        login: Client ID
-        password: Client Secret
+        login: Client ID (optional)
+        password: Client Secret (optional)
         schema: Token URL
       placeholders: {}
diff --git 
a/providers/airbyte/src/airflow/providers/airbyte/get_provider_info.py 
b/providers/airbyte/src/airflow/providers/airbyte/get_provider_info.py
index 6ca1af004d5..16dce510b16 100644
--- a/providers/airbyte/src/airflow/providers/airbyte/get_provider_info.py
+++ b/providers/airbyte/src/airflow/providers/airbyte/get_provider_info.py
@@ -56,8 +56,8 @@ def get_provider_info():
                     "hidden-fields": ["extra", "port"],
                     "relabeling": {
                         "host": "Server URL",
-                        "login": "Client ID",
-                        "password": "Client Secret",
+                        "login": "Client ID (optional)",
+                        "password": "Client Secret (optional)",
                         "schema": "Token URL",
                     },
                     "placeholders": {},
diff --git 
a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/base_alibaba.py 
b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/base_alibaba.py
index 61525a02d4e..7334a040dcc 100644
--- 
a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/base_alibaba.py
+++ 
b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/base_alibaba.py
@@ -72,11 +72,6 @@ class AlibabaBaseHook(BaseHook):
             ),
         }
 
-    @classmethod
-    def get_ui_field_behaviour(cls) -> dict[str, Any]:
-        """Return custom field behaviour."""
-        return super().get_ui_field_behaviour()
-
     def _get_field(self, field_name: str, default: Any = None) -> Any:
         """Fetch a field from extras, and returns it."""
         value = self.extras.get(field_name)
diff --git a/providers/apache/arrow/provider.yaml 
b/providers/apache/arrow/provider.yaml
index d9c9f16fed0..d3cd9517ca5 100644
--- a/providers/apache/arrow/provider.yaml
+++ b/providers/apache/arrow/provider.yaml
@@ -50,4 +50,11 @@ hooks:
 
 connection-types:
   - hook-class-name: airflow.providers.apache.arrow.hooks.adbc.AdbcHook
+    hook-name: "ADBC Connection"
     connection-type: adbc
+    ui-field-behaviour:
+      hidden-fields:
+        - port
+        - schema
+      relabeling:
+        host: Connection URL
diff --git 
a/providers/apache/arrow/src/airflow/providers/apache/arrow/get_provider_info.py
 
b/providers/apache/arrow/src/airflow/providers/apache/arrow/get_provider_info.py
index 7182b937241..1fe6cc5632c 100644
--- 
a/providers/apache/arrow/src/airflow/providers/apache/arrow/get_provider_info.py
+++ 
b/providers/apache/arrow/src/airflow/providers/apache/arrow/get_provider_info.py
@@ -44,7 +44,12 @@ def get_provider_info():
         "connection-types": [
             {
                 "hook-class-name": 
"airflow.providers.apache.arrow.hooks.adbc.AdbcHook",
+                "hook-name": "ADBC Connection",
                 "connection-type": "adbc",
+                "ui-field-behaviour": {
+                    "hidden-fields": ["port", "schema"],
+                    "relabeling": {"host": "Connection URL"},
+                },
             }
         ],
     }
diff --git 
a/providers/arangodb/src/airflow/providers/arangodb/hooks/arangodb.py 
b/providers/arangodb/src/airflow/providers/arangodb/hooks/arangodb.py
index 49ffde88584..0b8e2f09980 100644
--- a/providers/arangodb/src/airflow/providers/arangodb/hooks/arangodb.py
+++ b/providers/arangodb/src/airflow/providers/arangodb/hooks/arangodb.py
@@ -193,7 +193,7 @@ class ArangoDBHook(BaseHook):
         return {
             "hidden_fields": ["port", "extra"],
             "relabeling": {
-                "host": "ArangoDB Host URL or  comma separated list of URLs 
(coordinators in a cluster)",
+                "host": "ArangoDB Host URL or comma separated list of URLs 
(coordinators in a cluster)",
                 "schema": "ArangoDB Database",
                 "login": "ArangoDB Username",
                 "password": "ArangoDB Password",
diff --git a/providers/common/ai/provider.yaml 
b/providers/common/ai/provider.yaml
index 27d6dfac910..c221691f835 100644
--- a/providers/common/ai/provider.yaml
+++ b/providers/common/ai/provider.yaml
@@ -169,7 +169,8 @@ connection-types:
       relabeling:
         password: API Key
       placeholders:
-        host: "https://api.openai.com/v1 (optional, for custom endpoints)"
+        host: "https://api.openai.com/v1 (optional, for custom endpoints / 
Ollama)"
+        extra: '{"model": "openai:gpt-5.6-sol"}'
     conn-fields:
       model:
         label: Model
@@ -193,6 +194,7 @@ connection-types:
         host: Azure Endpoint
       placeholders:
         host: "https://<resource>.openai.azure.com"
+        extra: '{"model": "azure:gpt-4o", "api_version": "2024-07-01-preview"}'
     conn-fields:
       model:
         label: Model
@@ -221,7 +223,9 @@ connection-types:
         - host
         - password
       relabeling: {}
-      placeholders: {}
+      placeholders:
+        extra: '{"model": "bedrock:us.anthropic.claude-opus-4-5", 
"region_name": "us-east-1"}  — leave
+          aws_access_key_id empty for IAM role / env-var auth'
     conn-fields:
       model:
         label: Model
@@ -306,7 +310,10 @@ connection-types:
         - host
         - password
       relabeling: {}
-      placeholders: {}
+      placeholders:
+        extra: '{"model": "google-cloud:gemini-2.0-flash", "project": 
"my-project", "location":
+          "us-central1"}  — add service_account_info (object) for SA auth; 
omit both to use Application
+          Default Credentials'
     conn-fields:
       model:
         label: Model
@@ -411,6 +418,7 @@ connection-types:
         password: API Key
       placeholders:
         host: "https://api.openai.com/v1 (optional, for custom endpoints / 
Ollama)"
+        extra: '{"model": "openai:gpt-4o", "embed_model": 
"openai:text-embedding-3-small"}'
     conn-fields:
       model:
         label: Chat Model
diff --git 
a/providers/common/ai/src/airflow/providers/common/ai/get_provider_info.py 
b/providers/common/ai/src/airflow/providers/common/ai/get_provider_info.py
index 97ff10b5b41..46441b2bf66 100644
--- a/providers/common/ai/src/airflow/providers/common/ai/get_provider_info.py
+++ b/providers/common/ai/src/airflow/providers/common/ai/get_provider_info.py
@@ -139,7 +139,10 @@ def get_provider_info():
                 "ui-field-behaviour": {
                     "hidden-fields": ["schema", "port", "login"],
                     "relabeling": {"password": "API Key"},
-                    "placeholders": {"host": "https://api.openai.com/v1 
(optional, for custom endpoints)"},
+                    "placeholders": {
+                        "host": "https://api.openai.com/v1 (optional, for 
custom endpoints / Ollama)",
+                        "extra": '{"model": "openai:gpt-5.6-sol"}',
+                    },
                 },
                 "conn-fields": {
                     "model": {
@@ -157,7 +160,10 @@ def get_provider_info():
                 "ui-field-behaviour": {
                     "hidden-fields": ["schema", "port", "login"],
                     "relabeling": {"password": "API Key", "host": "Azure 
Endpoint"},
-                    "placeholders": {"host": 
"https://<resource>.openai.azure.com"},
+                    "placeholders": {
+                        "host": "https://<resource>.openai.azure.com",
+                        "extra": '{"model": "azure:gpt-4o", "api_version": 
"2024-07-01-preview"}',
+                    },
                 },
                 "conn-fields": {
                     "model": {
@@ -180,7 +186,9 @@ def get_provider_info():
                 "ui-field-behaviour": {
                     "hidden-fields": ["schema", "port", "login", "host", 
"password"],
                     "relabeling": {},
-                    "placeholders": {},
+                    "placeholders": {
+                        "extra": '{"model": 
"bedrock:us.anthropic.claude-opus-4-5", "region_name": "us-east-1"}  — leave 
aws_access_key_id empty for IAM role / env-var auth'
+                    },
                 },
                 "conn-fields": {
                     "model": {
@@ -243,7 +251,9 @@ def get_provider_info():
                 "ui-field-behaviour": {
                     "hidden-fields": ["schema", "port", "login", "host", 
"password"],
                     "relabeling": {},
-                    "placeholders": {},
+                    "placeholders": {
+                        "extra": '{"model": "google-cloud:gemini-2.0-flash", 
"project": "my-project", "location": "us-central1"}  — add service_account_info 
(object) for SA auth; omit both to use Application Default Credentials'
+                    },
                 },
                 "conn-fields": {
                     "model": {
@@ -327,7 +337,8 @@ def get_provider_info():
                     "hidden-fields": ["schema", "port", "login"],
                     "relabeling": {"password": "API Key"},
                     "placeholders": {
-                        "host": "https://api.openai.com/v1 (optional, for 
custom endpoints / Ollama)"
+                        "host": "https://api.openai.com/v1 (optional, for 
custom endpoints / Ollama)",
+                        "extra": '{"model": "openai:gpt-4o", "embed_model": 
"openai:text-embedding-3-small"}',
                     },
                 },
                 "conn-fields": {
diff --git 
a/providers/common/ai/src/airflow/providers/common/ai/hooks/pydantic_ai.py 
b/providers/common/ai/src/airflow/providers/common/ai/hooks/pydantic_ai.py
index 8b378818059..4b3ce7357c5 100644
--- a/providers/common/ai/src/airflow/providers/common/ai/hooks/pydantic_ai.py
+++ b/providers/common/ai/src/airflow/providers/common/ai/hooks/pydantic_ai.py
@@ -89,7 +89,7 @@ class PydanticAIHook(BaseHook):
             "hidden_fields": ["schema", "port", "login"],
             "relabeling": {"password": "API Key"},
             "placeholders": {
-                "host": "https://api.openai.com/v1  (optional, for custom 
endpoints / Ollama)",
+                "host": "https://api.openai.com/v1 (optional, for custom 
endpoints / Ollama)",
                 "extra": '{"model": "openai:gpt-5.6-sol"}',
             },
         }
diff --git a/providers/git/provider.yaml b/providers/git/provider.yaml
index 6fb14f86dd2..b2abbdaa185 100644
--- a/providers/git/provider.yaml
+++ b/providers/git/provider.yaml
@@ -81,4 +81,7 @@ connection-types:
         host: Repository URL
         password: Access Token (optional)
       placeholders:
-        extra: '{"key_file": "optional/path/to/keyfile", "private_key": 
"optional inline private key"}'
+        extra: '{"key_file": "optional/path/to/keyfile", "private_key": 
"optional inline private key",
+          "private_key_passphrase": "", "strict_host_key_checking": 
"accept-new", "known_hosts_file": "",
+          "ssh_config_file": "", "host_proxy_cmd": "", "ssh_port": "", 
"github_app_id": "",
+          "github_installation_id": ""}'
diff --git a/providers/git/src/airflow/providers/git/get_provider_info.py 
b/providers/git/src/airflow/providers/git/get_provider_info.py
index 82a3bb35096..a1dd4d55dd1 100644
--- a/providers/git/src/airflow/providers/git/get_provider_info.py
+++ b/providers/git/src/airflow/providers/git/get_provider_info.py
@@ -51,7 +51,7 @@ def get_provider_info():
                         "password": "Access Token (optional)",
                     },
                     "placeholders": {
-                        "extra": '{"key_file": "optional/path/to/keyfile", 
"private_key": "optional inline private key"}'
+                        "extra": '{"key_file": "optional/path/to/keyfile", 
"private_key": "optional inline private key", "private_key_passphrase": "", 
"strict_host_key_checking": "accept-new", "known_hosts_file": "", 
"ssh_config_file": "", "host_proxy_cmd": "", "ssh_port": "", "github_app_id": 
"", "github_installation_id": ""}'
                     },
                 },
             }
diff --git a/providers/google/provider.yaml b/providers/google/provider.yaml
index 58bfc9fab54..04db221c30d 100644
--- a/providers/google/provider.yaml
+++ b/providers/google/provider.yaml
@@ -1325,6 +1325,28 @@ connection-types:
   - hook-class-name: airflow.providers.google.leveldb.hooks.leveldb.LevelDBHook
     hook-name: "LevelDB"
     connection-type: leveldb
+    ui-field-behaviour:
+      hidden-fields:
+        - login
+        - password
+        - schema
+        - port
+      relabeling: {}
+    conn-fields:
+      create_if_missing:
+        label: Create a database if it does not exist
+        schema:
+          type:
+            - boolean
+            - 'null'
+          default: false
+      error_if_exists:
+        label: Raise an exception if the database already exists
+        schema:
+          type:
+            - boolean
+            - 'null'
+          default: false
   - hook-class-name: airflow.providers.google.ads.hooks.ads.GoogleAdsHook
     hook-name: "Google Ads"
     connection-type: google_ads
diff --git a/providers/google/src/airflow/providers/google/get_provider_info.py 
b/providers/google/src/airflow/providers/google/get_provider_info.py
index e2bfa861e24..d4f607dc85a 100644
--- a/providers/google/src/airflow/providers/google/get_provider_info.py
+++ b/providers/google/src/airflow/providers/google/get_provider_info.py
@@ -1545,6 +1545,20 @@ def get_provider_info():
                 "hook-class-name": 
"airflow.providers.google.leveldb.hooks.leveldb.LevelDBHook",
                 "hook-name": "LevelDB",
                 "connection-type": "leveldb",
+                "ui-field-behaviour": {
+                    "hidden-fields": ["login", "password", "schema", "port"],
+                    "relabeling": {},
+                },
+                "conn-fields": {
+                    "create_if_missing": {
+                        "label": "Create a database if it does not exist",
+                        "schema": {"type": ["boolean", "null"], "default": 
False},
+                    },
+                    "error_if_exists": {
+                        "label": "Raise an exception if the database already 
exists",
+                        "schema": {"type": ["boolean", "null"], "default": 
False},
+                    },
+                },
             },
             {
                 "hook-class-name": 
"airflow.providers.google.ads.hooks.ads.GoogleAdsHook",
diff --git a/providers/microsoft/azure/provider.yaml 
b/providers/microsoft/azure/provider.yaml
index 3e60335d21b..4c2f8112330 100644
--- a/providers/microsoft/azure/provider.yaml
+++ b/providers/microsoft/azure/provider.yaml
@@ -403,6 +403,7 @@ connection-types:
         password: secret (token credentials auth)
         tenantId: tenantId (token credentials auth)
         subscriptionId: subscriptionId (token credentials auth)
+        cloud_environment: AzurePublicCloud (default) | AzureUSGovernment | 
AzureChinaCloud
     conn-fields:
       tenantId:
         label: Azure Tenant ID
@@ -821,9 +822,8 @@ connection-types:
         fully_qualified_namespace: >-
           <Resource group>.servicebus.windows.net (for Azure AD authentication)
         credential: credential
-        schema: >-
-          Endpoint=sb://<Resource group>.servicebus.windows.net/;
-          SharedAccessKeyName=<AccessKeyName>;SharedAccessKey=<SharedAccessKey>
+        schema: "Endpoint=sb://<Resource group>.servicebus.windows.net/;\
+          
SharedAccessKeyName=<AccessKeyName>;SharedAccessKey=<SharedAccessKey>"
     conn-fields:
       fully_qualified_namespace:
         label: Fully Qualified Namespace
diff --git 
a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py
 
b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py
index 34509081d0e..4e3ab2e9d30 100644
--- 
a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py
+++ 
b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py
@@ -392,6 +392,7 @@ def get_provider_info():
                         "password": "secret (token credentials auth)",
                         "tenantId": "tenantId (token credentials auth)",
                         "subscriptionId": "subscriptionId (token credentials 
auth)",
+                        "cloud_environment": "AzurePublicCloud (default) | 
AzureUSGovernment | AzureChinaCloud",
                     },
                 },
                 "conn-fields": {
@@ -816,7 +817,7 @@ def get_provider_info():
                     "placeholders": {
                         "fully_qualified_namespace": "<Resource 
group>.servicebus.windows.net (for Azure AD authentication)",
                         "credential": "credential",
-                        "schema": "Endpoint=sb://<Resource 
group>.servicebus.windows.net/; 
SharedAccessKeyName=<AccessKeyName>;SharedAccessKey=<SharedAccessKey>",
+                        "schema": "Endpoint=sb://<Resource 
group>.servicebus.windows.net/;SharedAccessKeyName=<AccessKeyName>;SharedAccessKey=<SharedAccessKey>",
                     },
                 },
                 "conn-fields": {
diff --git 
a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/asb.py 
b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/asb.py
index 7e88bac14a5..25cdfb179db 100644
--- 
a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/asb.py
+++ 
b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/asb.py
@@ -90,7 +90,7 @@ class BaseAzureServiceBusHook(BaseHook):
             "relabeling": {"schema": "Connection String"},
             "placeholders": {
                 "fully_qualified_namespace": (
-                    "<Resource group>.servicebus.windows.net (for Azure AD 
authenticaltion)"
+                    "<Resource group>.servicebus.windows.net (for Azure AD 
authentication)"
                 ),
                 "credential": "credential",
                 "schema": "Endpoint=sb://<Resource 
group>.servicebus.windows.net/;SharedAccessKeyName=<AccessKeyName>;SharedAccessKey=<SharedAccessKey>",
diff --git a/providers/snowflake/provider.yaml 
b/providers/snowflake/provider.yaml
index fe110689711..415ef25a1b3 100644
--- a/providers/snowflake/provider.yaml
+++ b/providers/snowflake/provider.yaml
@@ -183,11 +183,11 @@ connection-types:
       placeholders:
         extra: |
           {
-            "authenticator": "snowflake oauth",
+            "authenticator": "snowflake oauth / WORKLOAD_IDENTITY",
             "private_key_file": "private key",
             "session_parameters": "session parameters",
             "client_request_mfa_token": "client request mfa token",
-            "client_store_temporary_credential": "client store temporary 
credential",
+            "client_store_temporary_credential": "client store temporary 
credential (externalbrowser mode)",
             "grant_type": "refresh_token client_credentials",
             "token_endpoint": "token endpoint",
             "refresh_token": "refresh token",
@@ -207,6 +207,7 @@ connection-types:
         role: snowflake role
         private_key_file: Path of snowflake private key (PEM Format)
         private_key_content: Content to snowflake private key (PEM format)
+        workload_identity_provider: AWS, AZURE, GCP or OIDC
         insecure_mode: insecure mode
         proxy_host: Proxy server hostname
         proxy_port: Proxy server port
diff --git 
a/providers/snowflake/src/airflow/providers/snowflake/get_provider_info.py 
b/providers/snowflake/src/airflow/providers/snowflake/get_provider_info.py
index 8c93b0f9e49..1b9456e0298 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/get_provider_info.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/get_provider_info.py
@@ -112,7 +112,7 @@ def get_provider_info():
                     "hidden-fields": ["port", "host"],
                     "relabeling": {},
                     "placeholders": {
-                        "extra": '{\n  "authenticator": "snowflake oauth",\n  
"private_key_file": "private key",\n  "session_parameters": "session 
parameters",\n  "client_request_mfa_token": "client request mfa token",\n  
"client_store_temporary_credential": "client store temporary credential",\n  
"grant_type": "refresh_token client_credentials",\n  "token_endpoint": "token 
endpoint",\n  "refresh_token": "refresh token",\n  "scope": "scope",\n  
"proxy_host": "proxy.example.com",\n  "prox [...]
+                        "extra": '{\n  "authenticator": "snowflake oauth / 
WORKLOAD_IDENTITY",\n  "private_key_file": "private key",\n  
"session_parameters": "session parameters",\n  "client_request_mfa_token": 
"client request mfa token",\n  "client_store_temporary_credential": "client 
store temporary credential (externalbrowser mode)",\n  "grant_type": 
"refresh_token client_credentials",\n  "token_endpoint": "token endpoint",\n  
"refresh_token": "refresh token",\n  "scope": "scope",\n   [...]
                         "schema": "snowflake schema",
                         "login": "snowflake username",
                         "password": "snowflake password",
@@ -123,6 +123,7 @@ def get_provider_info():
                         "role": "snowflake role",
                         "private_key_file": "Path of snowflake private key 
(PEM Format)",
                         "private_key_content": "Content to snowflake private 
key (PEM format)",
+                        "workload_identity_provider": "AWS, AZURE, GCP or 
OIDC",
                         "insecure_mode": "insecure mode",
                         "proxy_host": "Proxy server hostname",
                         "proxy_port": "Proxy server port",
diff --git 
a/providers/telegram/src/airflow/providers/telegram/hooks/telegram.py 
b/providers/telegram/src/airflow/providers/telegram/hooks/telegram.py
index 83992777bd7..75f8c9d236a 100644
--- a/providers/telegram/src/airflow/providers/telegram/hooks/telegram.py
+++ b/providers/telegram/src/airflow/providers/telegram/hooks/telegram.py
@@ -80,7 +80,7 @@ class TelegramHook(BaseHook):
     def get_ui_field_behaviour(cls) -> dict[str, Any]:
         """Return custom field behaviour."""
         return {
-            "hidden_fields": ["schema", "extra", "login", "port", "extra"],
+            "hidden_fields": ["schema", "extra", "login", "port"],
             "relabeling": {},
         }
 

Reply via email to