This is an automated email from the ASF dual-hosted git repository.
kaxilnaik 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 4404bc05b3e Add missing conn-fields for providers migrated to yaml
(#62116)
4404bc05b3e is described below
commit 4404bc05b3e77bf1c50219ba2ec1da5ef560a684
Author: Amogh Desai <[email protected]>
AuthorDate: Thu Feb 19 06:34:35 2026 +0530
Add missing conn-fields for providers migrated to yaml (#62116)
---
providers/google/provider.yaml | 130 +++++++-
.../airflow/providers/google/get_provider_info.py | 103 ++++++-
providers/hashicorp/provider.yaml | 103 +++++++
.../providers/hashicorp/get_provider_info.py | 25 ++
providers/microsoft/azure/provider.yaml | 336 ++++++++++++++++++++-
.../providers/microsoft/azure/get_provider_info.py | 271 ++++++++++++++++-
providers/snowflake/provider.yaml | 76 +++++
.../providers/snowflake/get_provider_info.py | 27 ++
scripts/tools/generate_yaml_format_for_hooks.py | 38 ++-
9 files changed, 1063 insertions(+), 46 deletions(-)
diff --git a/providers/google/provider.yaml b/providers/google/provider.yaml
index 1eaca6bb9d4..709c970c312 100644
--- a/providers/google/provider.yaml
+++ b/providers/google/provider.yaml
@@ -1131,63 +1131,62 @@ connection-types:
project:
label: "Project Id"
schema:
- type: string
+ type: ["string", "null"]
key_path:
label: "Keyfile Path"
schema:
- type: string
+ type: ["string", "null"]
keyfile_dict:
label: "Keyfile JSON"
schema:
- type: string
+ type: ["string", "null"]
format: password
credential_config_file:
label: "Credential Configuration File"
schema:
- type: string
+ type: ["string", "null"]
scope:
label: "Scopes (comma separated)"
schema:
- type: string
+ type: ["string", "null"]
key_secret_name:
label: "Keyfile Secret Name (in GCP Secret Manager)"
schema:
- type: string
+ type: ["string", "null"]
key_secret_project_id:
label: "Keyfile Secret Project Id (in GCP Secret Manager)"
schema:
- type: string
+ type: ["string", "null"]
num_retries:
label: "Number of Retries"
schema:
- type: integer
- minimum: 0
+ type: ["integer", "null"]
default: 5
impersonation_chain:
label: "Impersonation Chain"
schema:
- type: string
+ type: ["string", "null"]
idp_issuer_url:
label: "IdP Token Issue URL (Client Credentials Grant Flow)"
schema:
- type: string
+ type: ["string", "null"]
client_id:
label: "Client ID (Client Credentials Grant Flow)"
schema:
- type: string
+ type: ["string", "null"]
client_secret:
label: "Client Secret (Client Credentials Grant Flow)"
schema:
- type: string
+ type: ["string", "null"]
format: password
idp_extra_parameters:
label: "IdP Extra Request Parameters"
schema:
- type: string
+ type: ["string", "null"]
is_anonymous:
label: "Anonymous credentials (ignores all other settings)"
schema:
- type: boolean
+ type: ["boolean", "null"]
default: false
- hook-class-name:
airflow.providers.google.cloud.hooks.dataprep.GoogleDataprepHook
connection-type: dataprep
@@ -1201,6 +1200,88 @@ connection-types:
hidden-fields: ["host", "schema", "login", "password", "port", "extra"]
relabeling: {}
placeholders: {}
+ conn-fields:
+ project:
+ label: "Project Id"
+ schema:
+ type: ["string", "null"]
+ key_path:
+ label: "Keyfile Path"
+ schema:
+ type: ["string", "null"]
+ keyfile_dict:
+ label: "Keyfile JSON"
+ schema:
+ type: ["string", "null"]
+ format: password
+ credential_config_file:
+ label: "Credential Configuration File"
+ schema:
+ type: ["string", "null"]
+ scope:
+ label: "Scopes (comma separated)"
+ schema:
+ type: ["string", "null"]
+ key_secret_name:
+ label: "Keyfile Secret Name (in GCP Secret Manager)"
+ schema:
+ type: ["string", "null"]
+ key_secret_project_id:
+ label: "Keyfile Secret Project Id (in GCP Secret Manager)"
+ schema:
+ type: ["string", "null"]
+ num_retries:
+ label: "Number of Retries"
+ schema:
+ type: ["integer", "null"]
+ default: 5
+ impersonation_chain:
+ label: "Impersonation Chain"
+ schema:
+ type: ["string", "null"]
+ idp_issuer_url:
+ label: "IdP Token Issue URL (Client Credentials Grant Flow)"
+ schema:
+ type: ["string", "null"]
+ client_id:
+ label: "Client ID (Client Credentials Grant Flow)"
+ schema:
+ type: ["string", "null"]
+ client_secret:
+ label: "Client Secret (Client Credentials Grant Flow)"
+ schema:
+ type: ["string", "null"]
+ format: password
+ idp_extra_parameters:
+ label: "IdP Extra Request Parameters"
+ schema:
+ type: ["string", "null"]
+ is_anonymous:
+ label: "Anonymous credentials (ignores all other settings)"
+ schema:
+ type: ["boolean", "null"]
+ default: false
+ use_legacy_sql:
+ label: "Use Legacy SQL"
+ schema:
+ type: ["boolean", "null"]
+ location:
+ label: "Location"
+ schema:
+ type: ["string", "null"]
+ priority:
+ label: "Priority"
+ schema:
+ type: ["string", "null"]
+ default: INTERACTIVE
+ api_resource_configs:
+ label: "API Resource Configs"
+ schema:
+ type: ["string", "null"]
+ labels:
+ label: "Labels"
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineSSHHook
connection-type: gcpssh
ui-field-behaviour:
@@ -1216,6 +1297,25 @@ connection-types:
relabeling: {}
placeholders:
password: "Leave blank (optional)"
+ conn-fields:
+ developer_token:
+ label: "Developer token"
+ schema:
+ type: ["string", "null"]
+ client_id:
+ label: "OAuth2 Client ID"
+ schema:
+ type: ["string", "null"]
+ client_secret:
+ label: "OAuth2 Client Secret"
+ schema:
+ type: ["string", "null"]
+ format: password
+ refresh_token:
+ label: "OAuth2 Refresh Token"
+ schema:
+ type: ["string", "null"]
+ format: password
- 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 99e3d078359..4f45d95ad46 100644
--- a/providers/google/src/airflow/providers/google/get_provider_info.py
+++ b/providers/google/src/airflow/providers/google/get_provider_info.py
@@ -1373,49 +1373,52 @@ def get_provider_info():
"placeholders": {},
},
"conn-fields": {
- "project": {"label": "Project Id", "schema": {"type":
"string"}},
- "key_path": {"label": "Keyfile Path", "schema": {"type":
"string"}},
+ "project": {"label": "Project Id", "schema": {"type":
["string", "null"]}},
+ "key_path": {"label": "Keyfile Path", "schema": {"type":
["string", "null"]}},
"keyfile_dict": {
"label": "Keyfile JSON",
- "schema": {"type": "string", "format": "password"},
+ "schema": {"type": ["string", "null"], "format":
"password"},
},
"credential_config_file": {
"label": "Credential Configuration File",
- "schema": {"type": "string"},
+ "schema": {"type": ["string", "null"]},
},
- "scope": {"label": "Scopes (comma separated)", "schema":
{"type": "string"}},
+ "scope": {"label": "Scopes (comma separated)", "schema":
{"type": ["string", "null"]}},
"key_secret_name": {
"label": "Keyfile Secret Name (in GCP Secret Manager)",
- "schema": {"type": "string"},
+ "schema": {"type": ["string", "null"]},
},
"key_secret_project_id": {
"label": "Keyfile Secret Project Id (in GCP Secret
Manager)",
- "schema": {"type": "string"},
+ "schema": {"type": ["string", "null"]},
},
"num_retries": {
"label": "Number of Retries",
- "schema": {"type": "integer", "minimum": 0, "default":
5},
+ "schema": {"type": ["integer", "null"], "default": 5},
+ },
+ "impersonation_chain": {
+ "label": "Impersonation Chain",
+ "schema": {"type": ["string", "null"]},
},
- "impersonation_chain": {"label": "Impersonation Chain",
"schema": {"type": "string"}},
"idp_issuer_url": {
"label": "IdP Token Issue URL (Client Credentials
Grant Flow)",
- "schema": {"type": "string"},
+ "schema": {"type": ["string", "null"]},
},
"client_id": {
"label": "Client ID (Client Credentials Grant Flow)",
- "schema": {"type": "string"},
+ "schema": {"type": ["string", "null"]},
},
"client_secret": {
"label": "Client Secret (Client Credentials Grant
Flow)",
- "schema": {"type": "string", "format": "password"},
+ "schema": {"type": ["string", "null"], "format":
"password"},
},
"idp_extra_parameters": {
"label": "IdP Extra Request Parameters",
- "schema": {"type": "string"},
+ "schema": {"type": ["string", "null"]},
},
"is_anonymous": {
"label": "Anonymous credentials (ignores all other
settings)",
- "schema": {"type": "boolean", "default": False},
+ "schema": {"type": ["boolean", "null"], "default":
False},
},
},
},
@@ -1439,6 +1442,66 @@ def get_provider_info():
"relabeling": {},
"placeholders": {},
},
+ "conn-fields": {
+ "project": {"label": "Project Id", "schema": {"type":
["string", "null"]}},
+ "key_path": {"label": "Keyfile Path", "schema": {"type":
["string", "null"]}},
+ "keyfile_dict": {
+ "label": "Keyfile JSON",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "credential_config_file": {
+ "label": "Credential Configuration File",
+ "schema": {"type": ["string", "null"]},
+ },
+ "scope": {"label": "Scopes (comma separated)", "schema":
{"type": ["string", "null"]}},
+ "key_secret_name": {
+ "label": "Keyfile Secret Name (in GCP Secret Manager)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "key_secret_project_id": {
+ "label": "Keyfile Secret Project Id (in GCP Secret
Manager)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "num_retries": {
+ "label": "Number of Retries",
+ "schema": {"type": ["integer", "null"], "default": 5},
+ },
+ "impersonation_chain": {
+ "label": "Impersonation Chain",
+ "schema": {"type": ["string", "null"]},
+ },
+ "idp_issuer_url": {
+ "label": "IdP Token Issue URL (Client Credentials
Grant Flow)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "client_id": {
+ "label": "Client ID (Client Credentials Grant Flow)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "client_secret": {
+ "label": "Client Secret (Client Credentials Grant
Flow)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "idp_extra_parameters": {
+ "label": "IdP Extra Request Parameters",
+ "schema": {"type": ["string", "null"]},
+ },
+ "is_anonymous": {
+ "label": "Anonymous credentials (ignores all other
settings)",
+ "schema": {"type": ["boolean", "null"], "default":
False},
+ },
+ "use_legacy_sql": {"label": "Use Legacy SQL", "schema":
{"type": ["boolean", "null"]}},
+ "location": {"label": "Location", "schema": {"type":
["string", "null"]}},
+ "priority": {
+ "label": "Priority",
+ "schema": {"type": ["string", "null"], "default":
"INTERACTIVE"},
+ },
+ "api_resource_configs": {
+ "label": "API Resource Configs",
+ "schema": {"type": ["string", "null"]},
+ },
+ "labels": {"label": "Labels", "schema": {"type":
["string", "null"]}},
+ },
},
{
"hook-class-name":
"airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineSSHHook",
@@ -1461,6 +1524,18 @@ def get_provider_info():
"relabeling": {},
"placeholders": {"password": "Leave blank (optional)"},
},
+ "conn-fields": {
+ "developer_token": {"label": "Developer token", "schema":
{"type": ["string", "null"]}},
+ "client_id": {"label": "OAuth2 Client ID", "schema":
{"type": ["string", "null"]}},
+ "client_secret": {
+ "label": "OAuth2 Client Secret",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "refresh_token": {
+ "label": "OAuth2 Refresh Token",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.google.cloud.hooks.looker.LookerHook",
diff --git a/providers/hashicorp/provider.yaml
b/providers/hashicorp/provider.yaml
index fea993e184a..9cbc539c865 100644
--- a/providers/hashicorp/provider.yaml
+++ b/providers/hashicorp/provider.yaml
@@ -88,6 +88,109 @@ connection-types:
connection-type: vault
ui-field-behaviour:
hidden-fields: ["extra"]
+ conn-fields:
+ auth_type:
+ label: Auth type
+ schema:
+ type:
+ - string
+ - 'null'
+ auth_mount_point:
+ label: Auth mount point
+ schema:
+ type:
+ - string
+ - 'null'
+ kv_engine_version:
+ label: KV engine version
+ schema:
+ type:
+ - integer
+ - 'null'
+ default: 2
+ enum:
+ - 1
+ - 2
+ description: Must be 1 or 2.
+ kubernetes_role:
+ label: Kubernetes role
+ schema:
+ type:
+ - string
+ - 'null'
+ kubernetes_jwt_path:
+ label: Kubernetes jwt path
+ schema:
+ type:
+ - string
+ - 'null'
+ jwt_role:
+ label: JWT role
+ schema:
+ type:
+ - string
+ - 'null'
+ jwt_token:
+ label: JWT token
+ schema:
+ type:
+ - string
+ - 'null'
+ jwt_token_path:
+ label: JWT token path
+ schema:
+ type:
+ - string
+ - 'null'
+ token_path:
+ label: Token path
+ schema:
+ type:
+ - string
+ - 'null'
+ gcp_key_path:
+ label: GCP key path
+ schema:
+ type:
+ - string
+ - 'null'
+ gcp_scopes:
+ label: GCP scopes
+ schema:
+ type:
+ - string
+ - 'null'
+ azure_tenant_id:
+ label: Azure tenant ID
+ schema:
+ type:
+ - string
+ - 'null'
+ azure_resource:
+ label: Azure resource
+ schema:
+ type:
+ - string
+ - 'null'
+ radius_host:
+ label: Radius host
+ schema:
+ type:
+ - string
+ - 'null'
+ radius_port:
+ label: Radius port
+ schema:
+ type:
+ - integer
+ - 'null'
+ use_tls:
+ label: Use TLS
+ schema:
+ type:
+ - boolean
+ - 'null'
+ default: true
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 e6f4ecb5099..1fd65f01b98 100644
--- a/providers/hashicorp/src/airflow/providers/hashicorp/get_provider_info.py
+++ b/providers/hashicorp/src/airflow/providers/hashicorp/get_provider_info.py
@@ -45,6 +45,31 @@ def get_provider_info():
"hook-class-name":
"airflow.providers.hashicorp.hooks.vault.VaultHook",
"connection-type": "vault",
"ui-field-behaviour": {"hidden-fields": ["extra"]},
+ "conn-fields": {
+ "auth_type": {"label": "Auth type", "schema": {"type":
["string", "null"]}},
+ "auth_mount_point": {"label": "Auth mount point",
"schema": {"type": ["string", "null"]}},
+ "kv_engine_version": {
+ "label": "KV engine version",
+ "schema": {"type": ["integer", "null"], "default": 2,
"enum": [1, 2]},
+ "description": "Must be 1 or 2.",
+ },
+ "kubernetes_role": {"label": "Kubernetes role", "schema":
{"type": ["string", "null"]}},
+ "kubernetes_jwt_path": {
+ "label": "Kubernetes jwt path",
+ "schema": {"type": ["string", "null"]},
+ },
+ "jwt_role": {"label": "JWT role", "schema": {"type":
["string", "null"]}},
+ "jwt_token": {"label": "JWT token", "schema": {"type":
["string", "null"]}},
+ "jwt_token_path": {"label": "JWT token path", "schema":
{"type": ["string", "null"]}},
+ "token_path": {"label": "Token path", "schema": {"type":
["string", "null"]}},
+ "gcp_key_path": {"label": "GCP key path", "schema":
{"type": ["string", "null"]}},
+ "gcp_scopes": {"label": "GCP scopes", "schema": {"type":
["string", "null"]}},
+ "azure_tenant_id": {"label": "Azure tenant ID", "schema":
{"type": ["string", "null"]}},
+ "azure_resource": {"label": "Azure resource", "schema":
{"type": ["string", "null"]}},
+ "radius_host": {"label": "Radius host", "schema": {"type":
["string", "null"]}},
+ "radius_port": {"label": "Radius port", "schema": {"type":
["integer", "null"]}},
+ "use_tls": {"label": "Use TLS", "schema": {"type":
["boolean", "null"], "default": True}},
+ },
}
],
"secrets-backends":
["airflow.providers.hashicorp.secrets.vault.VaultBackend"],
diff --git a/providers/microsoft/azure/provider.yaml
b/providers/microsoft/azure/provider.yaml
index c49f055a1c9..8d9620a2e69 100644
--- a/providers/microsoft/azure/provider.yaml
+++ b/providers/microsoft/azure/provider.yaml
@@ -343,6 +343,23 @@ connection-types:
password: secret (token credentials auth)
tenantId: tenantId (token credentials auth)
subscriptionId: subscriptionId (token credentials auth)
+ conn-fields:
+ tenantId:
+ label: Azure Tenant ID
+ schema:
+ type: ["string", "null"]
+ subscriptionId:
+ label: Azure Subscription ID
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.adx.AzureDataExplorerHook
connection-type: azure_data_explorer
ui-field-behaviour:
@@ -357,6 +374,33 @@ connection-types:
tenant: Used with AAD_APP/AAD_APP_CERT/AAD_CREDS
certificate: Used with AAD_APP_CERT
thumbprint: Used with AAD_APP_CERT
+ conn-fields:
+ tenant:
+ label: Tenant ID
+ schema:
+ type: ["string", "null"]
+ auth_method:
+ label: Authentication Method
+ schema:
+ type: ["string", "null"]
+ certificate:
+ label: Application PEM Certificate
+ schema:
+ type: ["string", "null"]
+ format: password
+ thumbprint:
+ label: Application Certificate Thumbprint
+ schema:
+ type: ["string", "null"]
+ format: password
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.batch.AzureBatchHook
connection-type: azure_batch
ui-field-behaviour:
@@ -365,6 +409,19 @@ connection-types:
login: Batch Account Name
password: Batch Account Access Key
placeholders: {}
+ conn-fields:
+ account_url:
+ label: Batch Account URL
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.cosmos.AzureCosmosDBHook
connection-type: azure_cosmos
ui-field-behaviour:
@@ -379,6 +436,31 @@ connection-types:
collection_name: collection name
subscription_id: Subscription ID (required for Azure AD authentication)
resource_group_name: Resource Group Name (required for Azure AD
authentication)
+ conn-fields:
+ database_name:
+ label: Cosmos Database Name (optional)
+ schema:
+ type: ["string", "null"]
+ collection_name:
+ label: Cosmos Collection Name (optional)
+ schema:
+ type: ["string", "null"]
+ subscription_id:
+ label: Subscription ID (optional)
+ schema:
+ type: ["string", "null"]
+ resource_group_name:
+ label: Resource Group Name (optional)
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeHook
connection-type: azure_data_lake
ui-field-behaviour:
@@ -391,6 +473,23 @@ connection-types:
password: secret
tenant: tenant id
account_name: datalake store
+ conn-fields:
+ tenant:
+ label: Azure Tenant ID
+ schema:
+ type: ["string", "null"]
+ account_name:
+ label: Azure DataLake Store Name
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.fileshare.AzureFileShareHook
connection-type: azure_fileshare
ui-field-behaviour:
@@ -403,6 +502,24 @@ connection-types:
password: secret
sas_token: account url or token (optional)
connection_string: account url or token (optional)
+ conn-fields:
+ sas_token:
+ label: SAS Token (optional)
+ schema:
+ type: ["string", "null"]
+ format: password
+ connection_string:
+ label: Connection String (optional)
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.container_volume.AzureContainerVolumeHook
connection-type: azure_container_volume
ui-field-behaviour:
@@ -416,6 +533,28 @@ connection-types:
connection_string: connection string auth
subscription_id: Subscription id (required for Azure AD authentication)
resource_group: Resource group name (required for Azure AD
authentication)
+ conn-fields:
+ connection_string:
+ label: Blob Storage Connection String (optional)
+ schema:
+ type: ["string", "null"]
+ format: password
+ subscription_id:
+ label: Subscription ID (optional)
+ schema:
+ type: ["string", "null"]
+ resource_group:
+ label: Resource group name (optional)
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- 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
@@ -434,7 +573,37 @@ connection-types:
tenant_id: tenant
shared_access_key: shared access key
sas_token: account url or token
- extra: additional options for ClientSecretCredential or
DefaultAzureCredential
+ extra: >-
+ additional options for use with ClientSecretCredential,
+ DefaultAzureCredential, or account_key authentication
+ conn-fields:
+ connection_string:
+ label: Blob Storage Connection String (optional)
+ schema:
+ type: ["string", "null"]
+ format: password
+ shared_access_key:
+ label: Blob Storage Shared Access Key (optional)
+ schema:
+ type: ["string", "null"]
+ format: password
+ tenant_id:
+ label: Tenant Id (Active Directory Auth)
+ schema:
+ type: ["string", "null"]
+ sas_token:
+ label: SAS Token (optional)
+ schema:
+ type: ["string", "null"]
+ format: password
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.data_factory.AzureDataFactoryHook
connection-type: azure_data_factory
ui-field-behaviour:
@@ -443,6 +612,31 @@ connection-types:
login: Client ID
password: Secret
placeholders: {}
+ conn-fields:
+ tenantId:
+ label: Tenant ID
+ schema:
+ type: ["string", "null"]
+ subscriptionId:
+ label: Subscription ID
+ schema:
+ type: ["string", "null"]
+ resource_group_name:
+ label: Resource Group Name
+ schema:
+ type: ["string", "null"]
+ factory_name:
+ label: Factory Name
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.container_registry.AzureContainerRegistryHook
connection-type: azure_container_registry
ui-field-behaviour:
@@ -457,6 +651,23 @@ connection-types:
host: docker image registry server
subscription_id: Subscription id (required for Azure AD authentication)
resource_group: Resource group name (required for Azure AD
authentication)
+ conn-fields:
+ subscription_id:
+ label: Subscription ID (optional)
+ schema:
+ type: ["string", "null"]
+ resource_group:
+ label: Resource group name (optional)
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.asb.BaseAzureServiceBusHook
connection-type: azure_service_bus
ui-field-behaviour:
@@ -464,9 +675,30 @@ connection-types:
relabeling:
schema: Connection String
placeholders:
- fully_qualified_namespace: <Resource group>.servicebus.windows.net
(for Azure AD authentication)
+ fully_qualified_namespace: >-
+ <Resource group>.servicebus.windows.net (for Azure AD authentication)
credential: credential
- schema: Endpoint=sb://<Resource
group>.servicebus.windows.net/;SharedAccessKeyName=...
+ schema: >-
+ Endpoint=sb://<Resource group>.servicebus.windows.net/;
+ SharedAccessKeyName=<AccessKeyName>;SharedAccessKey=<SharedAccessKey>
+ conn-fields:
+ fully_qualified_namespace:
+ label: Fully Qualified Namespace
+ schema:
+ type: ["string", "null"]
+ credential:
+ label: Credential
+ schema:
+ type: ["string", "null"]
+ format: password
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.synapse.BaseAzureSynapseHook
connection-type: azure_synapse
ui-field-behaviour:
@@ -476,6 +708,23 @@ connection-types:
password: Secret
host: Synapse Workspace URL
placeholders: {}
+ conn-fields:
+ tenantId:
+ label: Tenant ID
+ schema:
+ type: ["string", "null"]
+ subscriptionId:
+ label: Subscription ID
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeStorageV2Hook
connection-type: adls
ui-field-behaviour:
@@ -491,6 +740,24 @@ connection-types:
host: storage account name
connection_string: connection string (overrides auth)
tenant_id: tenant id
+ conn-fields:
+ connection_string:
+ label: ADLS Gen2 Connection String (optional)
+ schema:
+ type: ["string", "null"]
+ format: password
+ tenant_id:
+ label: Tenant ID (Active Directory)
+ schema:
+ type: ["string", "null"]
+ managed_identity_client_id:
+ label: Managed Identity Client ID
+ schema:
+ type: ["string", "null"]
+ workload_identity_tenant_id:
+ label: Workload Identity Tenant ID
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.msgraph.KiotaRequestAdapterHook
connection-type: msgraph
ui-field-behaviour:
@@ -499,6 +766,64 @@ connection-types:
login: Client ID
password: Client Secret
placeholders: {}
+ conn-fields:
+ tenant_id:
+ label: Tenant ID
+ schema:
+ type: ["string", "null"]
+ drive_id:
+ label: Drive ID
+ schema:
+ type: ["string", "null"]
+ api_version:
+ label: API Version
+ schema:
+ type: ["string", "null"]
+ default: v1.0
+ authority:
+ label: Authority
+ schema:
+ type: ["string", "null"]
+ certificate_path:
+ label: Certificate path
+ schema:
+ type: ["string", "null"]
+ certificate_data:
+ label: Certificate data
+ schema:
+ type: ["string", "null"]
+ scopes:
+ label: Scopes
+ schema:
+ type: ["string", "null"]
+ default: https://graph.microsoft.com/.default
+ disable_instance_discovery:
+ label: Disable instance discovery
+ schema:
+ type: ["boolean", "null"]
+ default: false
+ allowed_hosts:
+ label: Allowed hosts
+ schema:
+ type: ["string", "null"]
+ proxies:
+ label: Proxies
+ schema:
+ type: ["string", "null"]
+ verify:
+ label: Verify
+ schema:
+ type: ["boolean", "null"]
+ default: true
+ trust_env:
+ label: Trust environment
+ schema:
+ type: ["boolean", "null"]
+ default: true
+ base_url:
+ label: Base URL
+ schema:
+ type: ["string", "null"]
- hook-class-name:
airflow.providers.microsoft.azure.hooks.powerbi.PowerBIHook
connection-type: powerbi
ui-field-behaviour:
@@ -507,6 +832,11 @@ connection-types:
login: Client ID
password: Client Secret
placeholders: {}
+ conn-fields:
+ tenant_id:
+ label: Tenant ID
+ schema:
+ type: ["string", "null"]
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 de4da0f0ac6..80cc07ce077 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
@@ -333,6 +333,21 @@ def get_provider_info():
"subscriptionId": "subscriptionId (token credentials
auth)",
},
},
+ "conn-fields": {
+ "tenantId": {"label": "Azure Tenant ID", "schema":
{"type": ["string", "null"]}},
+ "subscriptionId": {
+ "label": "Azure Subscription ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.adx.AzureDataExplorerHook",
@@ -349,6 +364,26 @@ def get_provider_info():
"thumbprint": "Used with AAD_APP_CERT",
},
},
+ "conn-fields": {
+ "tenant": {"label": "Tenant ID", "schema": {"type":
["string", "null"]}},
+ "auth_method": {"label": "Authentication Method",
"schema": {"type": ["string", "null"]}},
+ "certificate": {
+ "label": "Application PEM Certificate",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "thumbprint": {
+ "label": "Application Certificate Thumbprint",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.batch.AzureBatchHook",
@@ -358,6 +393,17 @@ def get_provider_info():
"relabeling": {"login": "Batch Account Name", "password":
"Batch Account Access Key"},
"placeholders": {},
},
+ "conn-fields": {
+ "account_url": {"label": "Batch Account URL", "schema":
{"type": ["string", "null"]}},
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.cosmos.AzureCosmosDBHook",
@@ -374,6 +420,32 @@ def get_provider_info():
"resource_group_name": "Resource Group Name (required
for Azure AD authentication)",
},
},
+ "conn-fields": {
+ "database_name": {
+ "label": "Cosmos Database Name (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "collection_name": {
+ "label": "Cosmos Collection Name (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "subscription_id": {
+ "label": "Subscription ID (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "resource_group_name": {
+ "label": "Resource Group Name (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeHook",
@@ -388,6 +460,21 @@ def get_provider_info():
"account_name": "datalake store",
},
},
+ "conn-fields": {
+ "tenant": {"label": "Azure Tenant ID", "schema": {"type":
["string", "null"]}},
+ "account_name": {
+ "label": "Azure DataLake Store Name",
+ "schema": {"type": ["string", "null"]},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.fileshare.AzureFileShareHook",
@@ -405,6 +492,24 @@ def get_provider_info():
"connection_string": "account url or token (optional)",
},
},
+ "conn-fields": {
+ "sas_token": {
+ "label": "SAS Token (optional)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "connection_string": {
+ "label": "Connection String (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.container_volume.AzureContainerVolumeHook",
@@ -420,6 +525,28 @@ def get_provider_info():
"resource_group": "Resource group name (required for
Azure AD authentication)",
},
},
+ "conn-fields": {
+ "connection_string": {
+ "label": "Blob Storage Connection String (optional)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "subscription_id": {
+ "label": "Subscription ID (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "resource_group": {
+ "label": "Resource group name (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.container_instance.AzureContainerInstanceHook",
@@ -443,7 +570,33 @@ def get_provider_info():
"tenant_id": "tenant",
"shared_access_key": "shared access key",
"sas_token": "account url or token",
- "extra": "additional options for
ClientSecretCredential or DefaultAzureCredential",
+ "extra": "additional options for use with
ClientSecretCredential, DefaultAzureCredential, or account_key authentication",
+ },
+ },
+ "conn-fields": {
+ "connection_string": {
+ "label": "Blob Storage Connection String (optional)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "shared_access_key": {
+ "label": "Blob Storage Shared Access Key (optional)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "tenant_id": {
+ "label": "Tenant Id (Active Directory Auth)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "sas_token": {
+ "label": "SAS Token (optional)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
},
},
},
@@ -455,6 +608,23 @@ def get_provider_info():
"relabeling": {"login": "Client ID", "password": "Secret"},
"placeholders": {},
},
+ "conn-fields": {
+ "tenantId": {"label": "Tenant ID", "schema": {"type":
["string", "null"]}},
+ "subscriptionId": {"label": "Subscription ID", "schema":
{"type": ["string", "null"]}},
+ "resource_group_name": {
+ "label": "Resource Group Name",
+ "schema": {"type": ["string", "null"]},
+ },
+ "factory_name": {"label": "Factory Name", "schema":
{"type": ["string", "null"]}},
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.container_registry.AzureContainerRegistryHook",
@@ -474,6 +644,24 @@ def get_provider_info():
"resource_group": "Resource group name (required for
Azure AD authentication)",
},
},
+ "conn-fields": {
+ "subscription_id": {
+ "label": "Subscription ID (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "resource_group": {
+ "label": "Resource group name (optional)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.asb.BaseAzureServiceBusHook",
@@ -484,7 +672,25 @@ 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=...",
+ "schema": "Endpoint=sb://<Resource
group>.servicebus.windows.net/;
SharedAccessKeyName=<AccessKeyName>;SharedAccessKey=<SharedAccessKey>",
+ },
+ },
+ "conn-fields": {
+ "fully_qualified_namespace": {
+ "label": "Fully Qualified Namespace",
+ "schema": {"type": ["string", "null"]},
+ },
+ "credential": {
+ "label": "Credential",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
},
},
},
@@ -500,6 +706,18 @@ def get_provider_info():
},
"placeholders": {},
},
+ "conn-fields": {
+ "tenantId": {"label": "Tenant ID", "schema": {"type":
["string", "null"]}},
+ "subscriptionId": {"label": "Subscription ID", "schema":
{"type": ["string", "null"]}},
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeStorageV2Hook",
@@ -520,6 +738,24 @@ def get_provider_info():
"tenant_id": "tenant id",
},
},
+ "conn-fields": {
+ "connection_string": {
+ "label": "ADLS Gen2 Connection String (optional)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "tenant_id": {
+ "label": "Tenant ID (Active Directory)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "managed_identity_client_id": {
+ "label": "Managed Identity Client ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ "workload_identity_tenant_id": {
+ "label": "Workload Identity Tenant ID",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.msgraph.KiotaRequestAdapterHook",
@@ -529,6 +765,36 @@ def get_provider_info():
"relabeling": {"login": "Client ID", "password": "Client
Secret"},
"placeholders": {},
},
+ "conn-fields": {
+ "tenant_id": {"label": "Tenant ID", "schema": {"type":
["string", "null"]}},
+ "drive_id": {"label": "Drive ID", "schema": {"type":
["string", "null"]}},
+ "api_version": {
+ "label": "API Version",
+ "schema": {"type": ["string", "null"], "default":
"v1.0"},
+ },
+ "authority": {"label": "Authority", "schema": {"type":
["string", "null"]}},
+ "certificate_path": {"label": "Certificate path",
"schema": {"type": ["string", "null"]}},
+ "certificate_data": {"label": "Certificate data",
"schema": {"type": ["string", "null"]}},
+ "scopes": {
+ "label": "Scopes",
+ "schema": {
+ "type": ["string", "null"],
+ "default": "https://graph.microsoft.com/.default",
+ },
+ },
+ "disable_instance_discovery": {
+ "label": "Disable instance discovery",
+ "schema": {"type": ["boolean", "null"], "default":
False},
+ },
+ "allowed_hosts": {"label": "Allowed hosts", "schema":
{"type": ["string", "null"]}},
+ "proxies": {"label": "Proxies", "schema": {"type":
["string", "null"]}},
+ "verify": {"label": "Verify", "schema": {"type":
["boolean", "null"], "default": True}},
+ "trust_env": {
+ "label": "Trust environment",
+ "schema": {"type": ["boolean", "null"], "default":
True},
+ },
+ "base_url": {"label": "Base URL", "schema": {"type":
["string", "null"]}},
+ },
},
{
"hook-class-name":
"airflow.providers.microsoft.azure.hooks.powerbi.PowerBIHook",
@@ -538,6 +804,7 @@ def get_provider_info():
"relabeling": {"login": "Client ID", "password": "Client
Secret"},
"placeholders": {},
},
+ "conn-fields": {"tenant_id": {"label": "Tenant ID", "schema":
{"type": ["string", "null"]}}},
},
],
"secrets-backends":
["airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend"],
diff --git a/providers/snowflake/provider.yaml
b/providers/snowflake/provider.yaml
index 0412dc0b118..d830f37c37d 100644
--- a/providers/snowflake/provider.yaml
+++ b/providers/snowflake/provider.yaml
@@ -181,6 +181,82 @@ connection-types:
proxy_port: Proxy server port
proxy_user: Proxy username (optional)
proxy_password: Proxy password (optional)
+ conn-fields:
+ account:
+ label: Account
+ schema:
+ type:
+ - string
+ - 'null'
+ warehouse:
+ label: Warehouse
+ schema:
+ type:
+ - string
+ - 'null'
+ database:
+ label: Database
+ schema:
+ type:
+ - string
+ - 'null'
+ region:
+ label: Region
+ schema:
+ type:
+ - string
+ - 'null'
+ role:
+ label: Role
+ schema:
+ type:
+ - string
+ - 'null'
+ private_key_file:
+ label: Private key (Path)
+ schema:
+ type:
+ - string
+ - 'null'
+ private_key_content:
+ label: Private key (Text)
+ schema:
+ type:
+ - string
+ - 'null'
+ format: password
+ insecure_mode:
+ label: Insecure Mode
+ schema:
+ type:
+ - boolean
+ - 'null'
+ description: Turns off OCSP certificate checks
+ proxy_host:
+ label: Proxy Host
+ schema:
+ type:
+ - string
+ - 'null'
+ proxy_port:
+ label: Proxy Port
+ schema:
+ type:
+ - integer
+ - 'null'
+ proxy_user:
+ label: Proxy User
+ schema:
+ type:
+ - string
+ - 'null'
+ proxy_password:
+ label: Proxy Password
+ schema:
+ type:
+ - string
+ - 'null'
+ format: password
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 9acc48e03f6..9974117f789 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/get_provider_info.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/get_provider_info.py
@@ -108,6 +108,33 @@ def get_provider_info():
"proxy_password": "Proxy password (optional)",
},
},
+ "conn-fields": {
+ "account": {"label": "Account", "schema": {"type":
["string", "null"]}},
+ "warehouse": {"label": "Warehouse", "schema": {"type":
["string", "null"]}},
+ "database": {"label": "Database", "schema": {"type":
["string", "null"]}},
+ "region": {"label": "Region", "schema": {"type":
["string", "null"]}},
+ "role": {"label": "Role", "schema": {"type": ["string",
"null"]}},
+ "private_key_file": {
+ "label": "Private key (Path)",
+ "schema": {"type": ["string", "null"]},
+ },
+ "private_key_content": {
+ "label": "Private key (Text)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "insecure_mode": {
+ "label": "Insecure Mode",
+ "schema": {"type": ["boolean", "null"]},
+ "description": "Turns off OCSP certificate checks",
+ },
+ "proxy_host": {"label": "Proxy Host", "schema": {"type":
["string", "null"]}},
+ "proxy_port": {"label": "Proxy Port", "schema": {"type":
["integer", "null"]}},
+ "proxy_user": {"label": "Proxy User", "schema": {"type":
["string", "null"]}},
+ "proxy_password": {
+ "label": "Proxy Password",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ },
}
],
"triggers": [
diff --git a/scripts/tools/generate_yaml_format_for_hooks.py
b/scripts/tools/generate_yaml_format_for_hooks.py
index ecb3c112f1d..0bf2857ec98 100755
--- a/scripts/tools/generate_yaml_format_for_hooks.py
+++ b/scripts/tools/generate_yaml_format_for_hooks.py
@@ -52,26 +52,40 @@ def extract_conn_fields(widgets, connection_type):
for field_key, field_widget in widgets.items():
field_name = field_key[len(prefix) :] if field_key.startswith(prefix)
else field_key
- if not hasattr(field_widget, "param"):
+ field_class = getattr(field_widget, "field_class", None)
+ if not field_class:
continue
- field_data = field_widget.param.dump()
- schema = field_data.get("schema", {}).copy()
- label = schema.pop("title", field_name.replace("_", " ").title())
+ field_class_name = field_class.__name__
+ args = getattr(field_widget, "args", ())
+ kwargs = getattr(field_widget, "kwargs", {})
- field_class_name = getattr(field_widget, "field_class", None)
- is_password_field = field_class_name and "Password" in
field_class_name.__name__
+ label = str(args[0]) if args else field_name.replace("_", " ").title()
- if is_password_field and schema.get("format") != "password":
- schema["format"] = "password"
+ # Use ["type", "null"] to make fields optional (nullable) by default.
+ # This matches the legacy behavior where all extra fields are optional.
+ if "Boolean" in field_class_name:
+ schema = {"type": ["boolean", "null"]}
+ elif "Integer" in field_class_name:
+ schema = {"type": ["integer", "null"]}
+ elif "Password" in field_class_name:
+ schema = {"type": ["string", "null"], "format": "password"}
+ else:
+ schema = {"type": ["string", "null"]}
+
+ if kwargs.get("default") is not None:
+ schema["default"] = kwargs["default"]
- if field_data.get("value") is not None:
- schema["default"] = field_data["value"]
+ # Extract enum constraints from any_of() / AnyOf validators
+ validators = kwargs.get("validators", [])
+ for validator in validators:
+ if hasattr(validator, "values_formatter") and hasattr(validator,
"values"):
+ schema["enum"] = list(validator.values)
yaml_field = {"label": label, "schema": schema}
- if field_data.get("description"):
- yaml_field["description"] = field_data["description"]
+ if kwargs.get("description"):
+ yaml_field["description"] = kwargs["description"]
conn_fields[field_name] = yaml_field