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 13fd146bf27 [Part 2] Migrate connection UI metadata to YAML for more
providers (#62109)
13fd146bf27 is described below
commit 13fd146bf273fcd79fbc29d8c7d8654b16ee7aa9
Author: Amogh Desai <[email protected]>
AuthorDate: Thu Feb 19 13:16:43 2026 +0530
[Part 2] Migrate connection UI metadata to YAML for more providers (#62109)
---
providers/cncf/kubernetes/provider.yaml | 64 ++++++++++++++++++++++
.../providers/cncf/kubernetes/get_provider_info.py | 29 ++++++++++
providers/datadog/provider.yaml | 35 ++++++++++++
.../airflow/providers/datadog/get_provider_info.py | 11 ++++
providers/docker/provider.yaml | 22 ++++++++
.../airflow/providers/docker/get_provider_info.py | 13 +++++
providers/git/provider.yaml | 9 +++
.../src/airflow/providers/git/get_provider_info.py | 16 +++++-
providers/grpc/provider.yaml | 27 +++++++++
.../airflow/providers/grpc/get_provider_info.py | 18 +++++-
providers/influxdb/provider.yaml | 22 ++++++++
.../providers/influxdb/get_provider_info.py | 15 +++++
providers/opensearch/provider.yaml | 7 +++
.../providers/opensearch/get_provider_info.py | 5 ++
providers/sftp/provider.yaml | 6 ++
.../airflow/providers/sftp/get_provider_info.py | 10 +++-
providers/ssh/provider.yaml | 6 ++
.../src/airflow/providers/ssh/get_provider_info.py | 10 +++-
providers/standard/provider.yaml | 32 +++++++++++
.../providers/standard/get_provider_info.py | 23 ++++++++
20 files changed, 376 insertions(+), 4 deletions(-)
diff --git a/providers/cncf/kubernetes/provider.yaml
b/providers/cncf/kubernetes/provider.yaml
index 2a90a50835f..e9d28902106 100644
--- a/providers/cncf/kubernetes/provider.yaml
+++ b/providers/cncf/kubernetes/provider.yaml
@@ -163,6 +163,70 @@ triggers:
connection-types:
- hook-class-name:
airflow.providers.cncf.kubernetes.hooks.kubernetes.KubernetesHook
connection-type: kubernetes
+ conn-fields:
+ in_cluster:
+ label: In cluster configuration
+ schema:
+ type:
+ - boolean
+ - 'null'
+ kube_config_path:
+ label: Kube config path
+ schema:
+ type:
+ - string
+ - 'null'
+ kube_config:
+ label: Kube config (JSON format)
+ schema:
+ type:
+ - string
+ - 'null'
+ format: password
+ namespace:
+ label: Namespace
+ schema:
+ type:
+ - string
+ - 'null'
+ cluster_context:
+ label: Cluster context
+ schema:
+ type:
+ - string
+ - 'null'
+ disable_verify_ssl:
+ label: Disable SSL
+ schema:
+ type:
+ - boolean
+ - 'null'
+ disable_tcp_keepalive:
+ label: Disable TCP keepalive
+ schema:
+ type:
+ - boolean
+ - 'null'
+ xcom_sidecar_container_image:
+ label: XCom sidecar image
+ schema:
+ type:
+ - string
+ - 'null'
+ xcom_sidecar_container_resources:
+ label: XCom sidecar resources (JSON format)
+ schema:
+ type:
+ - string
+ - 'null'
+ ui-field-behaviour:
+ hidden-fields:
+ - host
+ - schema
+ - login
+ - password
+ - port
+ - extra
task-decorators:
- class-name:
airflow.providers.cncf.kubernetes.decorators.kubernetes.kubernetes_task
diff --git
a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/get_provider_info.py
b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/get_provider_info.py
index 791ceaeb228..36db629f38b 100644
---
a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/get_provider_info.py
+++
b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/get_provider_info.py
@@ -79,6 +79,35 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.cncf.kubernetes.hooks.kubernetes.KubernetesHook",
"connection-type": "kubernetes",
+ "conn-fields": {
+ "in_cluster": {
+ "label": "In cluster configuration",
+ "schema": {"type": ["boolean", "null"]},
+ },
+ "kube_config_path": {"label": "Kube config path",
"schema": {"type": ["string", "null"]}},
+ "kube_config": {
+ "label": "Kube config (JSON format)",
+ "schema": {"type": ["string", "null"], "format":
"password"},
+ },
+ "namespace": {"label": "Namespace", "schema": {"type":
["string", "null"]}},
+ "cluster_context": {"label": "Cluster context", "schema":
{"type": ["string", "null"]}},
+ "disable_verify_ssl": {"label": "Disable SSL", "schema":
{"type": ["boolean", "null"]}},
+ "disable_tcp_keepalive": {
+ "label": "Disable TCP keepalive",
+ "schema": {"type": ["boolean", "null"]},
+ },
+ "xcom_sidecar_container_image": {
+ "label": "XCom sidecar image",
+ "schema": {"type": ["string", "null"]},
+ },
+ "xcom_sidecar_container_resources": {
+ "label": "XCom sidecar resources (JSON format)",
+ "schema": {"type": ["string", "null"]},
+ },
+ },
+ "ui-field-behaviour": {
+ "hidden-fields": ["host", "schema", "login", "password",
"port", "extra"]
+ },
}
],
"task-decorators": [
diff --git a/providers/datadog/provider.yaml b/providers/datadog/provider.yaml
index 0d333aef01e..193ab0e2490 100644
--- a/providers/datadog/provider.yaml
+++ b/providers/datadog/provider.yaml
@@ -78,3 +78,38 @@ hooks:
connection-types:
- hook-class-name: airflow.providers.datadog.hooks.datadog.DatadogHook
connection-type: datadog
+ conn-fields:
+ api_host:
+ label: API endpoint
+ schema:
+ type:
+ - string
+ - 'null'
+ api_key:
+ label: API key
+ schema:
+ type:
+ - string
+ - 'null'
+ app_key:
+ label: Application key
+ schema:
+ type:
+ - string
+ - 'null'
+ source_type_name:
+ label: Source type name
+ schema:
+ type:
+ - string
+ - 'null'
+ ui-field-behaviour:
+ hidden-fields:
+ - schema
+ - login
+ - password
+ - port
+ - extra
+ relabeling:
+ host: Events host name
+ placeholders: {}
diff --git
a/providers/datadog/src/airflow/providers/datadog/get_provider_info.py
b/providers/datadog/src/airflow/providers/datadog/get_provider_info.py
index ef644f44f72..a87ee7fb0e6 100644
--- a/providers/datadog/src/airflow/providers/datadog/get_provider_info.py
+++ b/providers/datadog/src/airflow/providers/datadog/get_provider_info.py
@@ -44,6 +44,17 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.datadog.hooks.datadog.DatadogHook",
"connection-type": "datadog",
+ "conn-fields": {
+ "api_host": {"label": "API endpoint", "schema": {"type":
["string", "null"]}},
+ "api_key": {"label": "API key", "schema": {"type":
["string", "null"]}},
+ "app_key": {"label": "Application key", "schema": {"type":
["string", "null"]}},
+ "source_type_name": {"label": "Source type name",
"schema": {"type": ["string", "null"]}},
+ },
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "login", "password", "port",
"extra"],
+ "relabeling": {"host": "Events host name"},
+ "placeholders": {},
+ },
}
],
}
diff --git a/providers/docker/provider.yaml b/providers/docker/provider.yaml
index c67d1acdd16..ae2c0d4d153 100644
--- a/providers/docker/provider.yaml
+++ b/providers/docker/provider.yaml
@@ -115,6 +115,28 @@ hooks:
connection-types:
- hook-class-name: airflow.providers.docker.hooks.docker.DockerHook
connection-type: docker
+ conn-fields:
+ reauth:
+ label: Reauthenticate
+ schema:
+ type:
+ - boolean
+ - 'null'
+ description: Whether or not to refresh existing authentication on the
Docker server.
+ email:
+ label: Email
+ schema:
+ type:
+ - string
+ - 'null'
+ ui-field-behaviour:
+ hidden-fields:
+ - schema
+ relabeling:
+ host: Registry URL
+ login: Username
+ placeholders:
+ extra: '{"reauth": false, "email": "[email protected]"}'
task-decorators:
- class-name: airflow.providers.docker.decorators.docker.docker_task
diff --git a/providers/docker/src/airflow/providers/docker/get_provider_info.py
b/providers/docker/src/airflow/providers/docker/get_provider_info.py
index cc5c286716b..3b1556f1c7b 100644
--- a/providers/docker/src/airflow/providers/docker/get_provider_info.py
+++ b/providers/docker/src/airflow/providers/docker/get_provider_info.py
@@ -54,6 +54,19 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.docker.hooks.docker.DockerHook",
"connection-type": "docker",
+ "conn-fields": {
+ "reauth": {
+ "label": "Reauthenticate",
+ "schema": {"type": ["boolean", "null"]},
+ "description": "Whether or not to refresh existing
authentication on the Docker server.",
+ },
+ "email": {"label": "Email", "schema": {"type": ["string",
"null"]}},
+ },
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema"],
+ "relabeling": {"host": "Registry URL", "login":
"Username"},
+ "placeholders": {"extra": '{"reauth": false, "email":
"[email protected]"}'},
+ },
}
],
"task-decorators": [
diff --git a/providers/git/provider.yaml b/providers/git/provider.yaml
index c338231faf3..2502fa1d0d6 100644
--- a/providers/git/provider.yaml
+++ b/providers/git/provider.yaml
@@ -62,3 +62,12 @@ bundles:
connection-types:
- hook-class-name: airflow.providers.git.hooks.git.GitHook
connection-type: git
+ ui-field-behaviour:
+ hidden-fields:
+ - schema
+ relabeling:
+ login: Username or Access Token name
+ host: Repository URL
+ password: Access Token (optional)
+ placeholders:
+ extra: '{"key_file": "optional/path/to/keyfile", "private_key":
"optional inline private key"}'
diff --git a/providers/git/src/airflow/providers/git/get_provider_info.py
b/providers/git/src/airflow/providers/git/get_provider_info.py
index 7c422036758..bed1448b5f3 100644
--- a/providers/git/src/airflow/providers/git/get_provider_info.py
+++ b/providers/git/src/airflow/providers/git/get_provider_info.py
@@ -38,6 +38,20 @@ def get_provider_info():
{"integration-name": "GIT (Git)", "python-modules":
["airflow.providers.git.bundles.git"]}
],
"connection-types": [
- {"hook-class-name": "airflow.providers.git.hooks.git.GitHook",
"connection-type": "git"}
+ {
+ "hook-class-name": "airflow.providers.git.hooks.git.GitHook",
+ "connection-type": "git",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema"],
+ "relabeling": {
+ "login": "Username or Access Token name",
+ "host": "Repository URL",
+ "password": "Access Token (optional)",
+ },
+ "placeholders": {
+ "extra": '{"key_file": "optional/path/to/keyfile",
"private_key": "optional inline private key"}'
+ },
+ },
+ }
],
}
diff --git a/providers/grpc/provider.yaml b/providers/grpc/provider.yaml
index f2b03a263ec..4c7b997ec57 100644
--- a/providers/grpc/provider.yaml
+++ b/providers/grpc/provider.yaml
@@ -76,3 +76,30 @@ hooks:
connection-types:
- hook-class-name: airflow.providers.grpc.hooks.grpc.GrpcHook
connection-type: grpc
+ ui-field-behaviour:
+ hidden-fields:
+ - login
+ - password
+ - schema
+ - extra
+ relabeling: {}
+ placeholders: {}
+ conn-fields:
+ auth_type:
+ label: "Grpc Auth Type"
+ schema:
+ type:
+ - string
+ - 'null'
+ credential_pem_file:
+ label: "Credential Keyfile Path"
+ schema:
+ type:
+ - string
+ - 'null'
+ scopes:
+ label: "Scopes (comma separated)"
+ schema:
+ type:
+ - string
+ - 'null'
diff --git a/providers/grpc/src/airflow/providers/grpc/get_provider_info.py
b/providers/grpc/src/airflow/providers/grpc/get_provider_info.py
index 1ef80b81207..2d3a9e72737 100644
--- a/providers/grpc/src/airflow/providers/grpc/get_provider_info.py
+++ b/providers/grpc/src/airflow/providers/grpc/get_provider_info.py
@@ -34,6 +34,22 @@ def get_provider_info():
],
"hooks": [{"integration-name": "gRPC", "python-modules":
["airflow.providers.grpc.hooks.grpc"]}],
"connection-types": [
- {"hook-class-name": "airflow.providers.grpc.hooks.grpc.GrpcHook",
"connection-type": "grpc"}
+ {
+ "hook-class-name":
"airflow.providers.grpc.hooks.grpc.GrpcHook",
+ "connection-type": "grpc",
+ "ui-field-behaviour": {
+ "hidden-fields": ["login", "password", "schema", "extra"],
+ "relabeling": {},
+ "placeholders": {},
+ },
+ "conn-fields": {
+ "auth_type": {"label": "Grpc Auth Type", "schema":
{"type": ["string", "null"]}},
+ "credential_pem_file": {
+ "label": "Credential Keyfile Path",
+ "schema": {"type": ["string", "null"]},
+ },
+ "scopes": {"label": "Scopes (comma separated)", "schema":
{"type": ["string", "null"]}},
+ },
+ }
],
}
diff --git a/providers/influxdb/provider.yaml b/providers/influxdb/provider.yaml
index 0a467e30bf2..a2788520d00 100644
--- a/providers/influxdb/provider.yaml
+++ b/providers/influxdb/provider.yaml
@@ -79,3 +79,25 @@ operators:
connection-types:
- hook-class-name: airflow.providers.influxdb.hooks.influxdb.InfluxDBHook
connection-type: influxdb
+ ui-field-behaviour:
+ hidden-fields:
+ - login
+ - password
+ relabeling: {}
+ placeholders: {}
+ conn-fields:
+ token:
+ label: Token
+ schema:
+ type:
+ - string
+ - 'null'
+ format: password
+ default: ''
+ org:
+ label: Organization Name
+ schema:
+ type:
+ - string
+ - 'null'
+ default: ''
diff --git
a/providers/influxdb/src/airflow/providers/influxdb/get_provider_info.py
b/providers/influxdb/src/airflow/providers/influxdb/get_provider_info.py
index 26a12cbcff0..4bc818aa2f3 100644
--- a/providers/influxdb/src/airflow/providers/influxdb/get_provider_info.py
+++ b/providers/influxdb/src/airflow/providers/influxdb/get_provider_info.py
@@ -46,6 +46,21 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.influxdb.hooks.influxdb.InfluxDBHook",
"connection-type": "influxdb",
+ "ui-field-behaviour": {
+ "hidden-fields": ["login", "password"],
+ "relabeling": {},
+ "placeholders": {},
+ },
+ "conn-fields": {
+ "token": {
+ "label": "Token",
+ "schema": {"type": ["string", "null"], "format":
"password", "default": ""},
+ },
+ "org": {
+ "label": "Organization Name",
+ "schema": {"type": ["string", "null"], "default": ""},
+ },
+ },
}
],
}
diff --git a/providers/opensearch/provider.yaml
b/providers/opensearch/provider.yaml
index 28bec0aa517..323178ee9f1 100644
--- a/providers/opensearch/provider.yaml
+++ b/providers/opensearch/provider.yaml
@@ -74,6 +74,13 @@ operators:
connection-types:
- hook-class-name:
airflow.providers.opensearch.hooks.opensearch.OpenSearchHook
connection-type: opensearch
+ ui-field-behaviour:
+ hidden-fields:
+ - schema
+ relabeling:
+ extra: OpenSearch Configuration
+ placeholders:
+ extra: "{\n \"use_ssl\": true,\n \"verify_certs\": true\n}"
logging:
- airflow.providers.opensearch.log.os_task_handler.OpensearchTaskHandler
diff --git
a/providers/opensearch/src/airflow/providers/opensearch/get_provider_info.py
b/providers/opensearch/src/airflow/providers/opensearch/get_provider_info.py
index b75f79d6fb3..cd117200796 100644
--- a/providers/opensearch/src/airflow/providers/opensearch/get_provider_info.py
+++ b/providers/opensearch/src/airflow/providers/opensearch/get_provider_info.py
@@ -51,6 +51,11 @@ def get_provider_info():
{
"hook-class-name":
"airflow.providers.opensearch.hooks.opensearch.OpenSearchHook",
"connection-type": "opensearch",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema"],
+ "relabeling": {"extra": "OpenSearch Configuration"},
+ "placeholders": {"extra": '{\n "use_ssl": true,\n
"verify_certs": true\n}'},
+ },
}
],
"logging":
["airflow.providers.opensearch.log.os_task_handler.OpensearchTaskHandler"],
diff --git a/providers/sftp/provider.yaml b/providers/sftp/provider.yaml
index 6d02a918cb2..b37ae37d90b 100644
--- a/providers/sftp/provider.yaml
+++ b/providers/sftp/provider.yaml
@@ -115,6 +115,12 @@ hooks:
connection-types:
- hook-class-name: airflow.providers.sftp.hooks.sftp.SFTPHook
connection-type: sftp
+ ui-field-behaviour:
+ hidden-fields:
+ - schema
+ relabeling:
+ login: Username
+ placeholders: {}
task-decorators:
- class-name: airflow.providers.sftp.decorators.sensors.sftp.sftp_sensor_task
diff --git a/providers/sftp/src/airflow/providers/sftp/get_provider_info.py
b/providers/sftp/src/airflow/providers/sftp/get_provider_info.py
index 87ce10a7af5..4e2048f4261 100644
--- a/providers/sftp/src/airflow/providers/sftp/get_provider_info.py
+++ b/providers/sftp/src/airflow/providers/sftp/get_provider_info.py
@@ -57,7 +57,15 @@ def get_provider_info():
}
],
"connection-types": [
- {"hook-class-name": "airflow.providers.sftp.hooks.sftp.SFTPHook",
"connection-type": "sftp"}
+ {
+ "hook-class-name":
"airflow.providers.sftp.hooks.sftp.SFTPHook",
+ "connection-type": "sftp",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema"],
+ "relabeling": {"login": "Username"},
+ "placeholders": {},
+ },
+ }
],
"task-decorators": [
{
diff --git a/providers/ssh/provider.yaml b/providers/ssh/provider.yaml
index 6433c59113b..3421b4f0430 100644
--- a/providers/ssh/provider.yaml
+++ b/providers/ssh/provider.yaml
@@ -106,3 +106,9 @@ triggers:
connection-types:
- hook-class-name: airflow.providers.ssh.hooks.ssh.SSHHook
connection-type: ssh
+ ui-field-behaviour:
+ hidden-fields:
+ - schema
+ relabeling:
+ login: Username
+ placeholders: {}
diff --git a/providers/ssh/src/airflow/providers/ssh/get_provider_info.py
b/providers/ssh/src/airflow/providers/ssh/get_provider_info.py
index 4ed67152f73..1be00ce4d34 100644
--- a/providers/ssh/src/airflow/providers/ssh/get_provider_info.py
+++ b/providers/ssh/src/airflow/providers/ssh/get_provider_info.py
@@ -54,6 +54,14 @@ def get_provider_info():
}
],
"connection-types": [
- {"hook-class-name": "airflow.providers.ssh.hooks.ssh.SSHHook",
"connection-type": "ssh"}
+ {
+ "hook-class-name": "airflow.providers.ssh.hooks.ssh.SSHHook",
+ "connection-type": "ssh",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema"],
+ "relabeling": {"login": "Username"},
+ "placeholders": {},
+ },
+ }
],
}
diff --git a/providers/standard/provider.yaml b/providers/standard/provider.yaml
index 087f0c0343c..3709405463c 100644
--- a/providers/standard/provider.yaml
+++ b/providers/standard/provider.yaml
@@ -132,6 +132,38 @@ config:
example: uv
default: auto
+connection-types:
+ - hook-class-name: airflow.providers.standard.hooks.filesystem.FSHook
+ connection-type: fs
+ ui-field-behaviour:
+ hidden-fields:
+ - host
+ - schema
+ - port
+ - login
+ - password
+ - extra
+ conn-fields:
+ path:
+ label: Path
+ schema:
+ type:
+ - string
+ - 'null'
+ - hook-class-name:
airflow.providers.standard.hooks.package_index.PackageIndexHook
+ connection-type: package_index
+ ui-field-behaviour:
+ hidden-fields:
+ - schema
+ - port
+ - extra
+ relabeling:
+ host: Package Index URL
+ placeholders:
+ host: "Example: https://my-package-mirror.net/pypi/repo-name/simple"
+ login: Username for package index
+ password: Password for package index (will be masked)
+
task-decorators:
- class-name: airflow.providers.standard.decorators.python.python_task
name: python
diff --git
a/providers/standard/src/airflow/providers/standard/get_provider_info.py
b/providers/standard/src/airflow/providers/standard/get_provider_info.py
index 09d5e081dea..5b80e66cf51 100644
--- a/providers/standard/src/airflow/providers/standard/get_provider_info.py
+++ b/providers/standard/src/airflow/providers/standard/get_provider_info.py
@@ -117,6 +117,29 @@ def get_provider_info():
},
}
},
+ "connection-types": [
+ {
+ "hook-class-name":
"airflow.providers.standard.hooks.filesystem.FSHook",
+ "connection-type": "fs",
+ "ui-field-behaviour": {
+ "hidden-fields": ["host", "schema", "port", "login",
"password", "extra"]
+ },
+ "conn-fields": {"path": {"label": "Path", "schema": {"type":
["string", "null"]}}},
+ },
+ {
+ "hook-class-name":
"airflow.providers.standard.hooks.package_index.PackageIndexHook",
+ "connection-type": "package_index",
+ "ui-field-behaviour": {
+ "hidden-fields": ["schema", "port", "extra"],
+ "relabeling": {"host": "Package Index URL"},
+ "placeholders": {
+ "host": "Example:
https://my-package-mirror.net/pypi/repo-name/simple",
+ "login": "Username for package index",
+ "password": "Password for package index (will be
masked)",
+ },
+ },
+ },
+ ],
"task-decorators": [
{"class-name":
"airflow.providers.standard.decorators.python.python_task", "name": "python"},
{"class-name":
"airflow.providers.standard.decorators.bash.bash_task", "name": "bash"},