Taragolis commented on code in PR #23560:
URL: https://github.com/apache/airflow/pull/23560#discussion_r914260195


##########
airflow/configuration.py:
##########
@@ -1487,47 +1500,118 @@ def set(*args, **kwargs) -> None:
     conf.set(*args, **kwargs)
 
 
-def ensure_secrets_loaded() -> List[BaseSecretsBackend]:
-    """
-    Ensure that all secrets backends are loaded.
-    If the secrets_backend_list contains only 2 default backends, reload it.
-    """
-    # Check if the secrets_backend_list contains only 2 default backends
-    if len(secrets_backend_list) == 2:
-        return initialize_secrets_backends()
-    return secrets_backend_list
+class DefaultSecretsBackend(UserList):
+    """List Container which use for store default secrets backends."""
+
+
+@dataclass(frozen=True)
+class SecretsBackendConfig:
+    """Secrets Backend Config dataclass helper."""
+
+    backend: str
+    backend_kwargs: Dict[str, Any] = field(default_factory=dict)
+
+    @classmethod
+    def from_dict(cls, d: Dict[str, Any]) -> 'SecretsBackendConfig':
+        """
+        Read Secret Backend Config from dictionary
+
+        Ignores all unexpected keywords
+        """
+        return cls(d['backend'], d.get('backend_kwargs', {}))
 
+    @classmethod
+    def from_config(cls) -> Optional['SecretsBackendConfig']:
+        """Try to get ``SecretsBackendConfig`` from airflow config [secrets] 
section"""
+        secrets_backend = conf.get(section='secrets', key='backend', 
fallback=None)
 
-def get_custom_secret_backend() -> Optional[BaseSecretsBackend]:
-    """Get Secret Backend if defined in airflow.cfg"""
-    secrets_backend_cls = conf.getimport(section='secrets', key='backend')
+        if not secrets_backend:
+            return None
 
-    if secrets_backend_cls:
         try:
-            backends: Any = conf.get(section='secrets', key='backend_kwargs', 
fallback='{}')
-            alternative_secrets_config_dict = json.loads(backends)
+            secrets_backend_kwargs: Any = conf.get(section='secrets', 
key='backend_kwargs', fallback='{}')
+            secrets_backend_kwargs = json.loads(secrets_backend_kwargs)
         except JSONDecodeError:
-            alternative_secrets_config_dict = {}
+            secrets_backend_kwargs = {}
+
+        return cls(secrets_backend, secrets_backend_kwargs)
+
+    def initialize(self) -> BaseSecretsBackend:
+        """Initialize Secrets Backend."""
+        return import_string(self.backend)(**self.backend_kwargs)
+
+
+class UniqueSecretsBackendsConfigs(UserList):

Review Comment:
   Actually I've tried to solve couple issues
   
   1. Set only unique values - I think no reason to check backend if it already 
added
   2. Inform user if this backend already exists.
   3. If we decide to deprecate old values (initially I think keep both), than 
it would be easy to add in the end default backend, and if user already add it 
- nothing bad happen
   
   Actually this class didn't solve second issue -there are no warnings in 
service logs. I think something suppress it.



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to