Crowiant commented on code in PR #45931:
URL: https://github.com/apache/airflow/pull/45931#discussion_r2333365528


##########
airflow-core/src/airflow/configuration.py:
##########
@@ -2194,28 +2192,73 @@ def get_custom_secret_backend(worker_mode: bool = 
False) -> BaseSecretsBackend |
     return secrets_backend_cls(**backend_kwargs)
 
 
+def get_importable_secret_backend(class_name: str | None) -> 
BaseSecretsBackend | None:
+    """Get secret backend defined in the given class name."""
+    if class_name is not None:
+        secrets_backend_cls = import_string(class_name)
+        return secrets_backend_cls()
+    return None
+
+
 def initialize_secrets_backends(
-    default_backends: list[str] = DEFAULT_SECRETS_SEARCH_PATH,
+    default_backends: list[str] | None = None,
 ) -> list[BaseSecretsBackend]:
     """
     Initialize secrets backend.
 
     * import secrets backend classes
     * instantiate them and return them in a list
     """
-    backend_list = []
     worker_mode = False
-    if default_backends != DEFAULT_SECRETS_SEARCH_PATH:
+    environment_variable_args: str | None = (
+        "airflow.secrets.environment_variables.EnvironmentVariablesBackend"
+    )
+    metastore_args: str | None = "airflow.secrets.metastore.MetastoreBackend"
+    if default_backends is not None:
         worker_mode = True
+        environment_variable_args = (
+            environment_variable_args if environment_variable_args in 
default_backends else None
+        )
+        metastore_args = metastore_args if metastore_args in default_backends 
else None
+    backends_map: dict[str, dict[str, Any]] = {
+        "environment_variable": {
+            "callback": get_importable_secret_backend,
+            "args": (environment_variable_args,),
+        },
+        "metastore": {
+            "callback": get_importable_secret_backend,
+            "args": (metastore_args,),
+        },
+        "custom": {
+            "callback": get_custom_secret_backend,
+            "args": (worker_mode,),
+        },
+    }
 
-    custom_secret_backend = get_custom_secret_backend(worker_mode)
+    backends_order = conf.getlist("secrets", "backends_order", delimiter=",")
 
-    if custom_secret_backend is not None:
-        backend_list.append(custom_secret_backend)
+    required_backends = ["metastore", "environment_variable"]
+    if missing_backends := [b for b in required_backends if b not in 
backends_order]:
+        raise AirflowConfigException(
+            "The configuration option [secrets]backends_order is 
misconfigured. "
+            "The following backend types are missing: %s",
+            missing_backends,
+        )

Review Comment:
   Thank you for your attention to details! I will add changes to the PR.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@airflow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to