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

Reply via email to