Source code for pyspark_pipeline_framework.core.config.secrets
"""Secrets management configuration models."""
from dataclasses import dataclass
from pyspark_pipeline_framework.core.config.base import SecretsProvider
[docs]
@dataclass
class SecretsConfig:
"""Configuration for secrets management integration."""
provider: SecretsProvider = SecretsProvider.ENV
"""Secrets provider (default: env)"""
vault_url: str | None = None
"""HashiCorp Vault URL (required for vault provider)"""
vault_token: str | None = None
"""Vault authentication token (optional, can use env var VAULT_TOKEN)"""
vault_namespace: str | None = None
"""Vault namespace (optional)"""
aws_region: str | None = None
"""AWS region for Secrets Manager (required for aws_secrets_manager provider)"""
secret_prefix: str | None = None
"""Prefix for secret keys (optional)"""
cache_ttl_seconds: int = 300
"""TTL for secrets cache in seconds (default: 300)"""
def __post_init__(self) -> None:
"""Validate configuration after initialization."""
if self.cache_ttl_seconds < 0:
raise ValueError("cache_ttl_seconds must be non-negative")
if self.provider == SecretsProvider.VAULT and not self.vault_url:
raise ValueError("vault_url is required when provider is vault")
if self.provider == SecretsProvider.AWS_SECRETS_MANAGER and not self.aws_region:
raise ValueError("aws_region is required when provider is aws_secrets_manager")