This is an automated email from the ASF dual-hosted git repository.
amoghdesai 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 b4ff259c650 Migrate connection UI metadata to YAML for some providers
(#62011)
b4ff259c650 is described below
commit b4ff259c65049e60c26753122e8133263e686d4f
Author: Amogh Desai <[email protected]>
AuthorDate: Tue Feb 17 19:43:41 2026 +0530
Migrate connection UI metadata to YAML for some providers (#62011)
This commit handles the following providers:
Google, Microsoft, Amazon, Vault, Databricks, Snowflake
---
.pre-commit-config.yaml | 2 +
providers/amazon/provider.yaml | 91 ++++++++++++
.../airflow/providers/amazon/get_provider_info.py | 40 +++++-
providers/google/provider.yaml | 13 ++
.../airflow/providers/google/get_provider_info.py | 15 ++
providers/hashicorp/provider.yaml | 2 +
.../providers/hashicorp/get_provider_info.py | 1 +
providers/microsoft/azure/provider.yaml | 145 +++++++++++++++++++
.../providers/microsoft/azure/get_provider_info.py | 156 +++++++++++++++++++++
providers/snowflake/provider.yaml | 35 +++++
.../providers/snowflake/get_provider_info.py | 22 +++
11 files changed, 521 insertions(+), 1 deletion(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index a3040b211b8..4cdc986cc3a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -576,6 +576,8 @@ repos:
^providers/\.pre-commit-config\.yaml$|
^providers/amazon/src/airflow/providers/amazon/aws/hooks/emr\.py$|
^providers/amazon/src/airflow/providers/amazon/aws/operators/emr\.py$|
+ ^providers/.*/get_provider_info\.py$|
+ ^providers/.*/provider\.yaml$|
^providers/apache/cassandra/src/airflow/providers/apache/cassandra/hooks/cassandra\.py$|
^providers/apache/hdfs/docs/connections\.rst$|
^providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats\.py$|
diff --git a/providers/amazon/provider.yaml b/providers/amazon/provider.yaml
index 583b437a221..9d1cea12bed 100644
--- a/providers/amazon/provider.yaml
+++ b/providers/amazon/provider.yaml
@@ -925,14 +925,105 @@ extra-links:
connection-types:
- hook-class-name: airflow.providers.amazon.aws.hooks.base_aws.AwsGenericHook
connection-type: aws
+ ui-field-behaviour:
+ hidden-fields:
+ - host
+ - schema
+ - port
+ relabeling:
+ login: AWS Access Key ID
+ password: AWS Secret Access Key
+ placeholders:
+ login: AKIAIOSFODNN7EXAMPLE
+ password: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
+ extra: |
+ {
+ "region_name": "us-east-1",
+ "session_kwargs": {"profile_name": "default"},
+ "config_kwargs": {"retries": {"mode": "standard", "max_attempts":
10}},
+ "role_arn": "arn:aws:iam::123456789098:role/role-name",
+ "assume_role_method": "assume_role",
+ "assume_role_kwargs": {"RoleSessionName": "airflow"},
+ "aws_session_token": "AQoDYXdzEJr...EXAMPLETOKEN",
+ "endpoint_url": "http://localhost:4566"
+ }
- hook-class-name: airflow.providers.amazon.aws.hooks.chime.ChimeWebhookHook
connection-type: chime
+ ui-field-behaviour:
+ hidden-fields:
+ - login
+ - port
+ - extra
+ relabeling:
+ host: Chime Webhook Endpoint
+ password: Chime Webhook token
+ placeholders:
+ schema: https
+ host: hooks.chime.aws/incomingwebhook/
+ password: T00000000?token=XXXXXXXXXXXXXXXXXXXXXXXX
- hook-class-name: airflow.providers.amazon.aws.hooks.emr.EmrHook
connection-type: emr
+ ui-field-behaviour:
+ hidden-fields:
+ - host
+ - schema
+ - port
+ - login
+ - password
+ relabeling:
+ extra: Run Job Flow Configuration
+ placeholders:
+ extra: |
+ {
+ "Name": "MyClusterName",
+ "ReleaseLabel": "emr-5.36.0",
+ "Applications": [{"Name": "Spark"}],
+ "Instances": {
+ "InstanceGroups": [{
+ "Name": "Primary node",
+ "Market": "SPOT",
+ "InstanceRole": "MASTER",
+ "InstanceType": "m5.large",
+ "InstanceCount": 1
+ }],
+ "KeepJobFlowAliveWhenNoSteps": false,
+ "TerminationProtected": false
+ },
+ "StepConcurrencyLevel": 2
+ }
- hook-class-name:
airflow.providers.amazon.aws.hooks.redshift_sql.RedshiftSQLHook
connection-type: redshift
+ ui-field-behaviour:
+ relabeling:
+ login: User
+ schema: Database
- hook-class-name:
airflow.providers.amazon.aws.hooks.athena_sql.AthenaSQLHook
connection-type: athena
+ ui-field-behaviour:
+ hidden-fields:
+ - host
+ - port
+ relabeling:
+ login: AWS Access Key ID
+ password: AWS Secret Access Key
+ placeholders:
+ login: AKIAIOSFODNN7EXAMPLE
+ password: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
+ extra: |
+ {
+ "aws_domain": "amazonaws.com",
+ "driver": "rest",
+ "s3_staging_dir": "s3://bucket_name/staging/",
+ "work_group": "primary",
+ "region_name": "us-east-1",
+ "session_kwargs": {"profile_name": "default"},
+ "config_kwargs": {"retries": {"mode": "standard", "max_attempts":
10}},
+ "role_arn": "arn:aws:iam::123456789098:role/role-name",
+ "assume_role_method": "assume_role",
+ "assume_role_kwargs": {"RoleSessionName": "airflow"},
+ "aws_session_token": "AQoDYXdzEJr...EXAMPLETOKEN",
+ "endpoint_url": "http://localhost:4566"
+ }
notifications:
- airflow.providers.amazon.aws.notifications.chime.ChimeNotifier
diff --git a/providers/amazon/src/airflow/providers/amazon/get_provider_info.py
b/providers/amazon/src/airflow/providers/amazon/get_provider_info.py
index 17d127472d1..fbdd7ef45de 100644
--- a/providers/amazon/src/airflow/providers/amazon/get_provider_info.py
+++ b/providers/amazon/src/airflow/providers/amazon/get_provider_info.py
@@ -1080,19 +1080,57 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.amazon.aws.hooks.base_aws.AwsGenericHook",
"connection-type": "aws",
+ "ui-field-behaviour": {
+ "hidden-fields": ["host", "schema", "port"],
+ "relabeling": {"login": "AWS Access Key ID", "password":
"AWS Secret Access Key"},
+ "placeholders": {
+ "login": "AKIAIOSFODNN7EXAMPLE",
+ "password": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
+ "extra": '{\n "region_name": "us-east-1",\n
"session_kwargs": {"profile_name": "default"},\n "config_kwargs": {"retries":
{"mode": "standard", "max_attempts": 10}},\n "role_arn":
"arn:aws:iam::123456789098:role/role-name",\n "assume_role_method":
"assume_role",\n "assume_role_kwargs": {"RoleSessionName": "airflow"},\n
"aws_session_token": "AQoDYXdzEJr...EXAMPLETOKEN",\n "endpoint_url":
"http://localhost:4566"\n}\n',
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.amazon.aws.hooks.chime.ChimeWebhookHook",
"connection-type": "chime",
+ "ui-field-behaviour": {
+ "hidden-fields": ["login", "port", "extra"],
+ "relabeling": {"host": "Chime Webhook Endpoint",
"password": "Chime Webhook token"},
+ "placeholders": {
+ "schema": "https",
+ "host": "hooks.chime.aws/incomingwebhook/",
+ "password": "T00000000?token=XXXXXXXXXXXXXXXXXXXXXXXX",
+ },
+ },
+ },
+ {
+ "hook-class-name":
"airflow.providers.amazon.aws.hooks.emr.EmrHook",
+ "connection-type": "emr",
+ "ui-field-behaviour": {
+ "hidden-fields": ["host", "schema", "port", "login",
"password"],
+ "relabeling": {"extra": "Run Job Flow Configuration"},
+ "placeholders": {
+ "extra": '{\n "Name": "MyClusterName",\n
"ReleaseLabel": "emr-5.36.0",\n "Applications": [{"Name": "Spark"}],\n
"Instances": {\n "InstanceGroups": [{\n "Name": "Primary node",\n
"Market": "SPOT",\n "InstanceRole": "MASTER",\n "InstanceType":
"m5.large",\n "InstanceCount": 1\n }],\n
"KeepJobFlowAliveWhenNoSteps": false,\n "TerminationProtected": false\n
},\n "StepConcurrencyLevel": 2\n}\n'
+ },
+ },
},
- {"hook-class-name":
"airflow.providers.amazon.aws.hooks.emr.EmrHook", "connection-type": "emr"},
{
"hook-class-name":
"airflow.providers.amazon.aws.hooks.redshift_sql.RedshiftSQLHook",
"connection-type": "redshift",
+ "ui-field-behaviour": {"relabeling": {"login": "User",
"schema": "Database"}},
},
{
"hook-class-name":
"airflow.providers.amazon.aws.hooks.athena_sql.AthenaSQLHook",
"connection-type": "athena",
+ "ui-field-behaviour": {
+ "hidden-fields": ["host", "port"],
+ "relabeling": {"login": "AWS Access Key ID", "password":
"AWS Secret Access Key"},
+ "placeholders": {
+ "login": "AKIAIOSFODNN7EXAMPLE",
+ "password": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
+ "extra": '{\n "aws_domain": "amazonaws.com",\n
"driver": "rest",\n "s3_staging_dir": "s3://bucket_name/staging/",\n
"work_group": "primary",\n "region_name": "us-east-1",\n "session_kwargs":
{"profile_name": "default"},\n "config_kwargs": {"retries": {"mode":
"standard", "max_attempts": 10}},\n "role_arn":
"arn:aws:iam::123456789098:role/role-name",\n "assume_role_method":
"assume_role",\n "assume_role_kwargs": {"RoleSessionName": "airflow"},\n
"aws_ses [...]
+ },
+ },
},
],
"notifications": [
diff --git a/providers/google/provider.yaml b/providers/google/provider.yaml
index 56cd3f1d0e6..1eaca6bb9d4 100644
--- a/providers/google/provider.yaml
+++ b/providers/google/provider.yaml
@@ -1197,12 +1197,25 @@ connection-types:
connection-type: gcpcloudsqldb
- hook-class-name: airflow.providers.google.cloud.hooks.bigquery.BigQueryHook
connection-type: gcpbigquery
+ ui-field-behaviour:
+ hidden-fields: ["host", "schema", "login", "password", "port", "extra"]
+ relabeling: {}
+ placeholders: {}
- hook-class-name:
airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineSSHHook
connection-type: gcpssh
+ ui-field-behaviour:
+ hidden-fields: ["host", "schema", "login", "password", "port", "extra"]
+ relabeling: {}
+ placeholders: {}
- hook-class-name: airflow.providers.google.leveldb.hooks.leveldb.LevelDBHook
connection-type: leveldb
- hook-class-name: airflow.providers.google.ads.hooks.ads.GoogleAdsHook
connection-type: google_ads
+ ui-field-behaviour:
+ hidden-fields: ["host", "login", "schema", "port"]
+ relabeling: {}
+ placeholders:
+ password: "Leave blank (optional)"
- hook-class-name: airflow.providers.google.cloud.hooks.looker.LookerHook
connection-type: gcp_looker
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 af4b9a8392a..99e3d078359 100644
--- a/providers/google/src/airflow/providers/google/get_provider_info.py
+++ b/providers/google/src/airflow/providers/google/get_provider_info.py
@@ -1434,10 +1434,20 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.google.cloud.hooks.bigquery.BigQueryHook",
"connection-type": "gcpbigquery",
+ "ui-field-behaviour": {
+ "hidden-fields": ["host", "schema", "login", "password",
"port", "extra"],
+ "relabeling": {},
+ "placeholders": {},
+ },
},
{
"hook-class-name":
"airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineSSHHook",
"connection-type": "gcpssh",
+ "ui-field-behaviour": {
+ "hidden-fields": ["host", "schema", "login", "password",
"port", "extra"],
+ "relabeling": {},
+ "placeholders": {},
+ },
},
{
"hook-class-name":
"airflow.providers.google.leveldb.hooks.leveldb.LevelDBHook",
@@ -1446,6 +1456,11 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.google.ads.hooks.ads.GoogleAdsHook",
"connection-type": "google_ads",
+ "ui-field-behaviour": {
+ "hidden-fields": ["host", "login", "schema", "port"],
+ "relabeling": {},
+ "placeholders": {"password": "Leave blank (optional)"},
+ },
},
{
"hook-class-name":
"airflow.providers.google.cloud.hooks.looker.LookerHook",
diff --git a/providers/hashicorp/provider.yaml
b/providers/hashicorp/provider.yaml
index ffa3f17625f..fea993e184a 100644
--- a/providers/hashicorp/provider.yaml
+++ b/providers/hashicorp/provider.yaml
@@ -86,6 +86,8 @@ hooks:
connection-types:
- hook-class-name: airflow.providers.hashicorp.hooks.vault.VaultHook
connection-type: vault
+ ui-field-behaviour:
+ hidden-fields: ["extra"]
secrets-backends:
- airflow.providers.hashicorp.secrets.vault.VaultBackend
diff --git
a/providers/hashicorp/src/airflow/providers/hashicorp/get_provider_info.py
b/providers/hashicorp/src/airflow/providers/hashicorp/get_provider_info.py
index b89b9b71da0..e6f4ecb5099 100644
--- a/providers/hashicorp/src/airflow/providers/hashicorp/get_provider_info.py
+++ b/providers/hashicorp/src/airflow/providers/hashicorp/get_provider_info.py
@@ -44,6 +44,7 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.hashicorp.hooks.vault.VaultHook",
"connection-type": "vault",
+ "ui-field-behaviour": {"hidden-fields": ["extra"]},
}
],
"secrets-backends":
["airflow.providers.hashicorp.secrets.vault.VaultBackend"],
diff --git a/providers/microsoft/azure/provider.yaml
b/providers/microsoft/azure/provider.yaml
index 6cb3921ebcd..c49f055a1c9 100644
--- a/providers/microsoft/azure/provider.yaml
+++ b/providers/microsoft/azure/provider.yaml
@@ -332,36 +332,181 @@ transfers:
connection-types:
- hook-class-name:
airflow.providers.microsoft.azure.hooks.base_azure.AzureBaseHook
connection-type: azure
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "host"]
+ relabeling:
+ login: Azure Client ID
+ password: Azure Secret
+ placeholders:
+ extra: '{"key_path": "path to json file for auth", "key_json":
"specifies json dict for auth"}'
+ login: client_id (token credentials auth)
+ password: secret (token credentials auth)
+ tenantId: tenantId (token credentials auth)
+ subscriptionId: subscriptionId (token credentials auth)
- hook-class-name:
airflow.providers.microsoft.azure.hooks.adx.AzureDataExplorerHook
connection-type: azure_data_explorer
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "extra"]
+ relabeling:
+ login: Username
+ host: Data Explorer Cluster URL
+ placeholders:
+ login: Varies with authentication method
+ password: Varies with authentication method
+ auth_method: AAD_APP/AAD_APP_CERT/AAD_CREDS/AAD_DEVICE/AZURE_TOKEN_CRED
+ tenant: Used with AAD_APP/AAD_APP_CERT/AAD_CREDS
+ certificate: Used with AAD_APP_CERT
+ thumbprint: Used with AAD_APP_CERT
- hook-class-name:
airflow.providers.microsoft.azure.hooks.batch.AzureBatchHook
connection-type: azure_batch
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "host", "extra"]
+ relabeling:
+ login: Batch Account Name
+ password: Batch Account Access Key
+ placeholders: {}
- hook-class-name:
airflow.providers.microsoft.azure.hooks.cosmos.AzureCosmosDBHook
connection-type: azure_cosmos
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "host", "extra"]
+ relabeling:
+ login: Cosmos Endpoint URI
+ password: Cosmos Master Key Token
+ placeholders:
+ login: endpoint uri
+ password: master key (not needed for Azure AD authentication)
+ database_name: database name
+ collection_name: collection name
+ subscription_id: Subscription ID (required for Azure AD authentication)
+ resource_group_name: Resource Group Name (required for Azure AD
authentication)
- hook-class-name:
airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeHook
connection-type: azure_data_lake
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "host", "extra"]
+ relabeling:
+ login: Azure Client ID
+ password: Azure Client Secret
+ placeholders:
+ login: client id
+ password: secret
+ tenant: tenant id
+ account_name: datalake store
- hook-class-name:
airflow.providers.microsoft.azure.hooks.fileshare.AzureFileShareHook
connection-type: azure_fileshare
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "host", "extra"]
+ relabeling:
+ login: Blob Storage Login (optional)
+ password: Blob Storage Key (optional)
+ placeholders:
+ login: account name or account url
+ password: secret
+ sas_token: account url or token (optional)
+ connection_string: account url or token (optional)
- hook-class-name:
airflow.providers.microsoft.azure.hooks.container_volume.AzureContainerVolumeHook
connection-type: azure_container_volume
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "host", "extra"]
+ relabeling:
+ login: Azure Client ID
+ password: Azure Secret
+ placeholders:
+ login: client_id (token credentials auth)
+ password: secret (token credentials auth)
+ connection_string: connection string auth
+ subscription_id: Subscription id (required for Azure AD authentication)
+ resource_group: Resource group name (required for Azure AD
authentication)
- hook-class-name:
airflow.providers.microsoft.azure.hooks.container_instance.AzureContainerInstanceHook
connection-type: azure_container_instance
- hook-class-name: airflow.providers.microsoft.azure.hooks.wasb.WasbHook
connection-type: wasb
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port"]
+ relabeling:
+ login: Blob Storage Login (optional)
+ password: Blob Storage Key (optional)
+ host: Account URL (Active Directory Auth)
+ placeholders:
+ login: account name
+ password: secret
+ host: account url
+ connection_string: connection string auth
+ tenant_id: tenant
+ shared_access_key: shared access key
+ sas_token: account url or token
+ extra: additional options for ClientSecretCredential or
DefaultAzureCredential
- hook-class-name:
airflow.providers.microsoft.azure.hooks.data_factory.AzureDataFactoryHook
connection-type: azure_data_factory
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "host", "extra"]
+ relabeling:
+ login: Client ID
+ password: Secret
+ placeholders: {}
- hook-class-name:
airflow.providers.microsoft.azure.hooks.container_registry.AzureContainerRegistryHook
connection-type: azure_container_registry
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "extra"]
+ relabeling:
+ login: Registry Username
+ password: Registry Password
+ host: Registry Server
+ placeholders:
+ login: private registry username
+ password: private registry password
+ host: docker image registry server
+ subscription_id: Subscription id (required for Azure AD authentication)
+ resource_group: Resource group name (required for Azure AD
authentication)
- hook-class-name:
airflow.providers.microsoft.azure.hooks.asb.BaseAzureServiceBusHook
connection-type: azure_service_bus
+ ui-field-behaviour:
+ hidden-fields: ["port", "host", "extra", "login", "password"]
+ relabeling:
+ schema: Connection String
+ placeholders:
+ fully_qualified_namespace: <Resource group>.servicebus.windows.net
(for Azure AD authentication)
+ credential: credential
+ schema: Endpoint=sb://<Resource
group>.servicebus.windows.net/;SharedAccessKeyName=...
- hook-class-name:
airflow.providers.microsoft.azure.hooks.synapse.BaseAzureSynapseHook
connection-type: azure_synapse
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "extra"]
+ relabeling:
+ login: Client ID
+ password: Secret
+ host: Synapse Workspace URL
+ placeholders: {}
- hook-class-name:
airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeStorageV2Hook
connection-type: adls
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port"]
+ relabeling:
+ login: Client ID (Active Directory)
+ password: ADLS Gen2 Key / Client Secret (Active Directory)
+ host: ADLS Gen2 Account Name
+ placeholders:
+ extra: additional options for use with FileService and AzureFileVolume
+ login: client id
+ password: key / secret
+ host: storage account name
+ connection_string: connection string (overrides auth)
+ tenant_id: tenant id
- hook-class-name:
airflow.providers.microsoft.azure.hooks.msgraph.KiotaRequestAdapterHook
connection-type: msgraph
+ ui-field-behaviour:
+ hidden-fields: ["extra"]
+ relabeling:
+ login: Client ID
+ password: Client Secret
+ placeholders: {}
- hook-class-name:
airflow.providers.microsoft.azure.hooks.powerbi.PowerBIHook
connection-type: powerbi
+ ui-field-behaviour:
+ hidden-fields: ["schema", "port", "host", "extra"]
+ relabeling:
+ login: Client ID
+ password: Client Secret
+ placeholders: {}
secrets-backends:
- airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend
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 356ea5d13ef..de4da0f0ac6 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
@@ -322,30 +322,104 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.base_azure.AzureBaseHook",
"connection-type": "azure",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "host"],
+ "relabeling": {"login": "Azure Client ID", "password":
"Azure Secret"},
+ "placeholders": {
+ "extra": '{"key_path": "path to json file for auth",
"key_json": "specifies json dict for auth"}',
+ "login": "client_id (token credentials auth)",
+ "password": "secret (token credentials auth)",
+ "tenantId": "tenantId (token credentials auth)",
+ "subscriptionId": "subscriptionId (token credentials
auth)",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.adx.AzureDataExplorerHook",
"connection-type": "azure_data_explorer",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "extra"],
+ "relabeling": {"login": "Username", "host": "Data Explorer
Cluster URL"},
+ "placeholders": {
+ "login": "Varies with authentication method",
+ "password": "Varies with authentication method",
+ "auth_method":
"AAD_APP/AAD_APP_CERT/AAD_CREDS/AAD_DEVICE/AZURE_TOKEN_CRED",
+ "tenant": "Used with AAD_APP/AAD_APP_CERT/AAD_CREDS",
+ "certificate": "Used with AAD_APP_CERT",
+ "thumbprint": "Used with AAD_APP_CERT",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.batch.AzureBatchHook",
"connection-type": "azure_batch",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "host", "extra"],
+ "relabeling": {"login": "Batch Account Name", "password":
"Batch Account Access Key"},
+ "placeholders": {},
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.cosmos.AzureCosmosDBHook",
"connection-type": "azure_cosmos",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "host", "extra"],
+ "relabeling": {"login": "Cosmos Endpoint URI", "password":
"Cosmos Master Key Token"},
+ "placeholders": {
+ "login": "endpoint uri",
+ "password": "master key (not needed for Azure AD
authentication)",
+ "database_name": "database name",
+ "collection_name": "collection name",
+ "subscription_id": "Subscription ID (required for
Azure AD authentication)",
+ "resource_group_name": "Resource Group Name (required
for Azure AD authentication)",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeHook",
"connection-type": "azure_data_lake",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "host", "extra"],
+ "relabeling": {"login": "Azure Client ID", "password":
"Azure Client Secret"},
+ "placeholders": {
+ "login": "client id",
+ "password": "secret",
+ "tenant": "tenant id",
+ "account_name": "datalake store",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.fileshare.AzureFileShareHook",
"connection-type": "azure_fileshare",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "host", "extra"],
+ "relabeling": {
+ "login": "Blob Storage Login (optional)",
+ "password": "Blob Storage Key (optional)",
+ },
+ "placeholders": {
+ "login": "account name or account url",
+ "password": "secret",
+ "sas_token": "account url or token (optional)",
+ "connection_string": "account url or token (optional)",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.container_volume.AzureContainerVolumeHook",
"connection-type": "azure_container_volume",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "host", "extra"],
+ "relabeling": {"login": "Azure Client ID", "password":
"Azure Secret"},
+ "placeholders": {
+ "login": "client_id (token credentials auth)",
+ "password": "secret (token credentials auth)",
+ "connection_string": "connection string auth",
+ "subscription_id": "Subscription id (required for
Azure AD authentication)",
+ "resource_group": "Resource group name (required for
Azure AD authentication)",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.container_instance.AzureContainerInstanceHook",
@@ -354,34 +428,116 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.wasb.WasbHook",
"connection-type": "wasb",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port"],
+ "relabeling": {
+ "login": "Blob Storage Login (optional)",
+ "password": "Blob Storage Key (optional)",
+ "host": "Account URL (Active Directory Auth)",
+ },
+ "placeholders": {
+ "login": "account name",
+ "password": "secret",
+ "host": "account url",
+ "connection_string": "connection string auth",
+ "tenant_id": "tenant",
+ "shared_access_key": "shared access key",
+ "sas_token": "account url or token",
+ "extra": "additional options for
ClientSecretCredential or DefaultAzureCredential",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.data_factory.AzureDataFactoryHook",
"connection-type": "azure_data_factory",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "host", "extra"],
+ "relabeling": {"login": "Client ID", "password": "Secret"},
+ "placeholders": {},
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.container_registry.AzureContainerRegistryHook",
"connection-type": "azure_container_registry",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "extra"],
+ "relabeling": {
+ "login": "Registry Username",
+ "password": "Registry Password",
+ "host": "Registry Server",
+ },
+ "placeholders": {
+ "login": "private registry username",
+ "password": "private registry password",
+ "host": "docker image registry server",
+ "subscription_id": "Subscription id (required for
Azure AD authentication)",
+ "resource_group": "Resource group name (required for
Azure AD authentication)",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.asb.BaseAzureServiceBusHook",
"connection-type": "azure_service_bus",
+ "ui-field-behaviour": {
+ "hidden-fields": ["port", "host", "extra", "login",
"password"],
+ "relabeling": {"schema": "Connection String"},
+ "placeholders": {
+ "fully_qualified_namespace": "<Resource
group>.servicebus.windows.net (for Azure AD authentication)",
+ "credential": "credential",
+ "schema": "Endpoint=sb://<Resource
group>.servicebus.windows.net/;SharedAccessKeyName=...",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.synapse.BaseAzureSynapseHook",
"connection-type": "azure_synapse",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "extra"],
+ "relabeling": {
+ "login": "Client ID",
+ "password": "Secret",
+ "host": "Synapse Workspace URL",
+ },
+ "placeholders": {},
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeStorageV2Hook",
"connection-type": "adls",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port"],
+ "relabeling": {
+ "login": "Client ID (Active Directory)",
+ "password": "ADLS Gen2 Key / Client Secret (Active
Directory)",
+ "host": "ADLS Gen2 Account Name",
+ },
+ "placeholders": {
+ "extra": "additional options for use with FileService
and AzureFileVolume",
+ "login": "client id",
+ "password": "key / secret",
+ "host": "storage account name",
+ "connection_string": "connection string (overrides
auth)",
+ "tenant_id": "tenant id",
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.msgraph.KiotaRequestAdapterHook",
"connection-type": "msgraph",
+ "ui-field-behaviour": {
+ "hidden-fields": ["extra"],
+ "relabeling": {"login": "Client ID", "password": "Client
Secret"},
+ "placeholders": {},
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.powerbi.PowerBIHook",
"connection-type": "powerbi",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "host", "extra"],
+ "relabeling": {"login": "Client ID", "password": "Client
Secret"},
+ "placeholders": {},
+ },
},
],
"secrets-backends":
["airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend"],
diff --git a/providers/snowflake/provider.yaml
b/providers/snowflake/provider.yaml
index 343c6e9575f..0412dc0b118 100644
--- a/providers/snowflake/provider.yaml
+++ b/providers/snowflake/provider.yaml
@@ -146,6 +146,41 @@ transfers:
connection-types:
- hook-class-name: airflow.providers.snowflake.hooks.snowflake.SnowflakeHook
connection-type: snowflake
+ ui-field-behaviour:
+ hidden-fields: ["port", "host"]
+ relabeling: {}
+ placeholders:
+ extra: |
+ {
+ "authenticator": "snowflake oauth",
+ "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",
+ "grant_type": "refresh_token client_credentials",
+ "token_endpoint": "token endpoint",
+ "refresh_token": "refresh token",
+ "scope": "scope",
+ "proxy_host": "proxy.example.com",
+ "proxy_port": "8080",
+ "proxy_user": "proxy_username",
+ "proxy_password": "proxy_password"
+ }
+ schema: snowflake schema
+ login: snowflake username
+ password: snowflake password
+ account: snowflake account name
+ warehouse: snowflake warehouse name
+ database: snowflake db name
+ region: snowflake hosted region
+ role: snowflake role
+ private_key_file: Path of snowflake private key (PEM Format)
+ private_key_content: Content to snowflake private key (PEM format)
+ insecure_mode: insecure mode
+ proxy_host: Proxy server hostname
+ proxy_port: Proxy server port
+ proxy_user: Proxy username (optional)
+ proxy_password: Proxy password (optional)
triggers:
- integration-name: Snowflake
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 03ab85efa04..9acc48e03f6 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/get_provider_info.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/get_provider_info.py
@@ -86,6 +86,28 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.snowflake.hooks.snowflake.SnowflakeHook",
"connection-type": "snowflake",
+ "ui-field-behaviour": {
+ "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 [...]
+ "schema": "snowflake schema",
+ "login": "snowflake username",
+ "password": "snowflake password",
+ "account": "snowflake account name",
+ "warehouse": "snowflake warehouse name",
+ "database": "snowflake db name",
+ "region": "snowflake hosted region",
+ "role": "snowflake role",
+ "private_key_file": "Path of snowflake private key
(PEM Format)",
+ "private_key_content": "Content to snowflake private
key (PEM format)",
+ "insecure_mode": "insecure mode",
+ "proxy_host": "Proxy server hostname",
+ "proxy_port": "Proxy server port",
+ "proxy_user": "Proxy username (optional)",
+ "proxy_password": "Proxy password (optional)",
+ },
+ },
}
],
"triggers": [