This is an automated email from the ASF dual-hosted git repository.

jedcunningham pushed a commit to branch v2-4-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 0308b177fc4911cd1a01af62e2b620ffeaf9ab64
Author: Tzu-ping Chung <[email protected]>
AuthorDate: Thu Sep 22 15:20:47 2022 +0800

    Log warning when secret backend kwargs is invalid (#26580)
    
    This should help debugging a bit.
    
    (cherry picked from commit 2060ed43955e09792cb9888deea0da239b7eee09)
---
 airflow/configuration.py | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/airflow/configuration.py b/airflow/configuration.py
index 77164ab904..905564ac8d 100644
--- a/airflow/configuration.py
+++ b/airflow/configuration.py
@@ -1542,15 +1542,23 @@ def get_custom_secret_backend() -> BaseSecretsBackend | 
None:
     """Get Secret Backend if defined in airflow.cfg"""
     secrets_backend_cls = conf.getimport(section='secrets', key='backend')
 
-    if secrets_backend_cls:
-        try:
-            backends: Any = conf.get(section='secrets', key='backend_kwargs', 
fallback='{}')
-            alternative_secrets_config_dict = json.loads(backends)
-        except JSONDecodeError:
-            alternative_secrets_config_dict = {}
+    if not secrets_backend_cls:
+        return None
 
-        return secrets_backend_cls(**alternative_secrets_config_dict)
-    return None
+    try:
+        backend_kwargs = conf.getjson(section='secrets', key='backend_kwargs')
+        if not backend_kwargs:
+            backend_kwargs = {}
+        elif not isinstance(backend_kwargs, dict):
+            raise ValueError("not a dict")
+    except AirflowConfigException:
+        log.warning("Failed to parse [secrets] backend_kwargs as JSON, 
defaulting to no kwargs.")
+        backend_kwargs = {}
+    except ValueError:
+        log.warning("Failed to parse [secrets] backend_kwargs into a dict, 
defaulting to no kwargs.")
+        backend_kwargs = {}
+
+    return secrets_backend_cls(**backend_kwargs)
 
 
 def initialize_secrets_backends() -> list[BaseSecretsBackend]:

Reply via email to