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": {},
}