Secret
What it is
- A secret management service that provides a unified interface to retrieve, store, remove, and list secrets across multiple backends via pluggable adapters.
- Acts as a facade over a list of
ISecretAdapterimplementations.
Public API
class Secret(ServiceBase, ISecretService)__init__(adapters: List[ISecretAdapter])- Create the service with an ordered list of secret adapters.
get(key: str, default: Any = None) -> str- Return the first non-
Nonevalue forkeyfound when querying adapters in order; otherwise returndefault.
- Return the first non-
set(key: str, value: str) -> None- Set
key/valueon all configured adapters.
- Set
remove(key: str) -> None- Remove
keyfrom all configured adapters.
- Remove
list() -> Dict[str, str | None]- Merge secrets from all adapters into one dictionary.
- If a key exists in multiple adapters, the earlier adapter in the configured list has precedence.
Configuration/Dependencies
- Requires:
- A list of adapter instances implementing
naas_abi_core.services.secret.SecretPorts.ISecretAdapter.
- A list of adapter instances implementing
- Inherits from:
naas_abi_core.services.ServiceBase.ServiceBase
- Implements:
naas_abi_core.services.secret.SecretPorts.ISecretService
Usage
from naas_abi_core.services.secret.Secret import Secret
from naas_abi_core.services.secret.adapters import EnvVarSecretAdapter, FileSecretAdapter
adapters = [
EnvVarSecretAdapter(), # higher priority
FileSecretAdapter("/path/to/secrets") # lower priority
]
secrets = Secret(adapters)
# Read with fallback
api_key = secrets.get("API_KEY", default="default_key")
# Write to all backends
secrets.set("API_KEY", "your-secret-api-key")
# List merged view (earlier adapters override later ones)
all_secrets = secrets.list()
# Remove from all backends
secrets.remove("API_KEY")
Caveats
- Adapter order matters:
get()returns the first non-Nonevalue found in adapter order.list()merges adapters such that earlier adapters override later ones.
set()andremove()do not perform error handling in this module; any exceptions are not caught here.