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": [


Reply via email to