pub struct SecretsManager {
pub cache: Arc<RwLock<HashMap<String, String>>>,
/* private fields */
}Expand description
Vault-based secrets manager
Fields§
§cache: Arc<RwLock<HashMap<String, String>>>Cache of loaded API keys (provider_id -> api_key)
Implementations§
Source§impl SecretsManager
impl SecretsManager
Sourcepub async fn new(config: &VaultConfig) -> Result<Self>
pub async fn new(config: &VaultConfig) -> Result<Self>
Create a new secrets manager with Vault configuration
Sourcepub async fn from_k8s_auth(
address: &str,
role: &str,
mount: &str,
kv_mount: Option<&str>,
kv_path: Option<&str>,
) -> Result<Self>
pub async fn from_k8s_auth( address: &str, role: &str, mount: &str, kv_mount: Option<&str>, kv_path: Option<&str>, ) -> Result<Self>
Authenticate to Vault using the pod’s Kubernetes service account JWT.
Reads the SA JWT from the standard Kubernetes mount path (overridable via
VAULT_K8S_SA_JWT_PATH) then calls the Vault auth/kubernetes/login
endpoint. The returned manager holds the short-lived token that Vault
issued — no VAULT_TOKEN environment variable is required.
Sourcepub async fn from_env() -> Result<Self>
pub async fn from_env() -> Result<Self>
Try to create from environment (for initial bootstrap only).
When VAULT_ROLE is set the worker authenticates via Kubernetes service
account — no static token is needed and the resulting Vault token is
short-lived and automatically rotated by Vault itself. Falls back to
VAULT_TOKEN when VAULT_ROLE is absent or K8s auth fails.
Sourcepub fn is_connected(&self) -> bool
pub fn is_connected(&self) -> bool
Check if Vault is configured and connected
Sourcepub async fn get_api_key(&self, provider_id: &str) -> Result<Option<String>>
pub async fn get_api_key(&self, provider_id: &str) -> Result<Option<String>>
Get an API key for a provider from Vault
Sourcepub async fn get_provider_secrets(
&self,
provider_id: &str,
) -> Result<Option<ProviderSecrets>>
pub async fn get_provider_secrets( &self, provider_id: &str, ) -> Result<Option<ProviderSecrets>>
Get all secrets for a provider
Sourcepub async fn set_provider_secrets(
&self,
provider_id: &str,
secrets: &ProviderSecrets,
) -> Result<()>
pub async fn set_provider_secrets( &self, provider_id: &str, secrets: &ProviderSecrets, ) -> Result<()>
Set/update secrets for a provider in Vault
Sourcepub async fn has_api_key(&self, provider_id: &str) -> bool
pub async fn has_api_key(&self, provider_id: &str) -> bool
Check if a provider has an API key in Vault
Sourcepub async fn list_configured_providers(&self) -> Result<Vec<String>>
pub async fn list_configured_providers(&self) -> Result<Vec<String>>
List all providers that have secrets configured
Sourcepub async fn clear_cache(&self)
pub async fn clear_cache(&self)
Clear the cache (useful when secrets are rotated)
Trait Implementations§
Source§impl Clone for SecretsManager
impl Clone for SecretsManager
Source§fn clone(&self) -> SecretsManager
fn clone(&self) -> SecretsManager
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for SecretsManager
impl !RefUnwindSafe for SecretsManager
impl Send for SecretsManager
impl Sync for SecretsManager
impl Unpin for SecretsManager
impl UnsafeUnpin for SecretsManager
impl !UnwindSafe for SecretsManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request