provisioning-core/nulib/domain/config/accessor_registry.nu

203 lines
11 KiB
Text

# Accessor Registry - Maps config paths to getters
# This eliminates 80+ duplicate getter function definitions
# Pattern: { name: { path: "config.path", default: default_value } }
export def build-accessor-registry [] {
{
# Core configuration accessors
paths: { path: "paths", default: {} }
debug: { path: "debug", default: {} }
sops: { path: "sops", default: {} }
validation: { path: "validation", default: {} }
output: { path: "output", default: {} }
# Provisioning core settings
provisioning-name: { path: "core.name", default: "provisioning" }
provisioning-vers: { path: "core.version", default: "2.0.0" }
provisioning-url: { path: "core.url", default: "https://provisioning.systems" }
# Debug settings
debug-enabled: { path: "debug.enabled", default: false }
no-terminal: { path: "debug.no_terminal", default: false }
debug-check-enabled: { path: "debug.check", default: false }
metadata-enabled: { path: "debug.metadata", default: false }
debug-remote-enabled: { path: "debug.remote", default: false }
ssh-debug-enabled: { path: "debug.ssh", default: false }
provisioning-log-level: { path: "debug.log_level", default: "" }
debug-match-cmd: { path: "debug.match_cmd", default: "" }
# Output configuration
work-format: { path: "output.format", default: "yaml" }
file-viewer: { path: "output.file_viewer", default: "bat" }
match-date: { path: "output.match_date", default: "%Y_%m_%d" }
# Paths configuration
workspace-path: { path: "paths.workspace", default: "" }
providers-path: { path: "paths.providers", default: "" }
taskservs-path: { path: "paths.taskservs", default: "" }
clusters-path: { path: "paths.clusters", default: "" }
templates-path: { path: "paths.templates", default: "" }
tools-path: { path: "paths.tools", default: "" }
extensions-path: { path: "paths.extensions", default: "" }
infra-path: { path: "paths.infra", default: "" }
generate-dirpath: { path: "paths.generate", default: "generate" }
custom-providers-path: { path: "paths.custom_providers", default: "" }
custom-taskservs-path: { path: "paths.custom_taskservs", default: "" }
run-taskservs-path: { path: "paths.run_taskservs", default: "taskservs" }
run-clusters-path: { path: "paths.run_clusters", default: "clusters" }
# Path files
defs-file: { path: "paths.files.defs", default: "defs.nu" }
req-versions: { path: "paths.files.req_versions", default: "" }
vars-file: { path: "paths.files.vars", default: "" }
notify-icon: { path: "paths.files.notify_icon", default: "" }
settings-file: { path: "paths.files.settings", default: "settings.ncl" }
keys-file: { path: "paths.files.keys", default: ".keys.ncl" }
# SOPS configuration
sops-key-paths: { path: "sops.key_search_paths", default: [] }
sops-use-sops: { path: "sops.use_sops", default: "age" }
sops-use-kms: { path: "sops.use_kms", default: "" }
secret-provider: { path: "sops.secret_provider", default: "sops" }
# SSH configuration
ssh-options: { path: "ssh.options", default: [] }
ssh-user: { path: "ssh.user", default: "" }
# Tools configuration
use-nickel: { path: "tools.use_nickel", default: false }
use-nickel-plugin: { path: "tools.use_nickel_plugin", default: false }
# Extensions configuration
extension-mode: { path: "extensions.mode", default: "full" }
provisioning-profile: { path: "extensions.profile", default: "" }
allowed-extensions: { path: "extensions.allowed", default: "" }
blocked-extensions: { path: "extensions.blocked", default: "" }
# AI configuration
ai-enabled: { path: "ai.enabled", default: false }
ai-provider: { path: "ai.provider", default: "openai" }
# KMS Core Settings
kms-enabled: { path: "kms.enabled", default: false }
kms-mode: { path: "kms.mode", default: "local" }
kms-version: { path: "kms.version", default: "1.0.0" }
kms-server: { path: "kms.server", default: "" }
kms-auth-method: { path: "kms.auth_method", default: "certificate" }
kms-client-cert: { path: "kms.client_cert", default: "" }
kms-client-key: { path: "kms.client_key", default: "" }
kms-ca-cert: { path: "kms.ca_cert", default: "" }
kms-api-token: { path: "kms.api_token", default: "" }
kms-username: { path: "kms.username", default: "" }
kms-password: { path: "kms.password", default: "" }
kms-timeout: { path: "kms.timeout", default: "30" }
kms-verify-ssl: { path: "kms.verify_ssl", default: "true" }
# KMS Paths
kms-base-path: { path: "kms.paths.base", default: "{{workspace.path}}/.kms" }
kms-keys-dir: { path: "kms.paths.keys_dir", default: "{{kms.paths.base}}/keys" }
kms-cache-dir: { path: "kms.paths.cache_dir", default: "{{kms.paths.base}}/cache" }
kms-config-dir: { path: "kms.paths.config_dir", default: "{{kms.paths.base}}/config" }
# KMS Local Settings
kms-local-enabled: { path: "kms.local.enabled", default: true }
kms-local-provider: { path: "kms.local.provider", default: "age" }
kms-local-key-path: { path: "kms.local.key_path", default: "{{kms.paths.keys_dir}}/age.txt" }
kms-local-sops-config: { path: "kms.local.sops_config", default: "{{workspace.path}}/.sops.yaml" }
# KMS Age Settings
kms-age-generate-on-init: { path: "kms.local.age.generate_key_on_init", default: false }
kms-age-key-format: { path: "kms.local.age.key_format", default: "age" }
kms-age-key-permissions: { path: "kms.local.age.key_permissions", default: "0600" }
# KMS SOPS Settings
kms-sops-config-path: { path: "kms.local.sops.config_path", default: "{{workspace.path}}/.sops.yaml" }
kms-sops-age-recipients: { path: "kms.local.sops.age_recipients", default: [] }
# KMS Vault Settings
kms-vault-address: { path: "kms.local.vault.address", default: "http://127.0.0.1:8200" }
kms-vault-token-path: { path: "kms.local.vault.token_path", default: "{{kms.paths.config_dir}}/vault-token" }
kms-vault-transit-path: { path: "kms.local.vault.transit_path", default: "transit" }
kms-vault-key-name: { path: "kms.local.vault.key_name", default: "provisioning" }
# KMS Remote Settings
kms-remote-enabled: { path: "kms.remote.enabled", default: false }
kms-remote-endpoint: { path: "kms.remote.endpoint", default: "" }
kms-remote-api-version: { path: "kms.remote.api_version", default: "v1" }
kms-remote-timeout: { path: "kms.remote.timeout_seconds", default: 30 }
kms-remote-retry-attempts: { path: "kms.remote.retry_attempts", default: 3 }
kms-remote-retry-delay: { path: "kms.remote.retry_delay_seconds", default: 2 }
# KMS Remote Auth
kms-remote-auth-method: { path: "kms.remote.auth.method", default: "token" }
kms-remote-token-path: { path: "kms.remote.auth.token_path", default: "{{kms.paths.config_dir}}/token" }
kms-remote-refresh-token: { path: "kms.remote.auth.refresh_token", default: true }
kms-remote-token-expiry: { path: "kms.remote.auth.token_expiry_seconds", default: 3600 }
# KMS Remote TLS
kms-remote-tls-enabled: { path: "kms.remote.tls.enabled", default: true }
kms-remote-tls-verify: { path: "kms.remote.tls.verify", default: true }
kms-remote-ca-cert-path: { path: "kms.remote.tls.ca_cert_path", default: "" }
kms-remote-client-cert-path: { path: "kms.remote.tls.client_cert_path", default: "" }
kms-remote-client-key-path: { path: "kms.remote.tls.client_key_path", default: "" }
kms-remote-tls-min-version: { path: "kms.remote.tls.min_version", default: "1.3" }
# KMS Remote Cache
kms-remote-cache-enabled: { path: "kms.remote.cache.enabled", default: true }
kms-remote-cache-ttl: { path: "kms.remote.cache.ttl_seconds", default: 300 }
kms-remote-cache-max-size: { path: "kms.remote.cache.max_size_mb", default: 50 }
# KMS Hybrid Mode
kms-hybrid-enabled: { path: "kms.hybrid.enabled", default: false }
kms-hybrid-fallback-to-local: { path: "kms.hybrid.fallback_to_local", default: true }
kms-hybrid-sync-keys: { path: "kms.hybrid.sync_keys", default: false }
# KMS Policies
kms-auto-rotate: { path: "kms.policies.auto_rotate", default: false }
kms-rotation-days: { path: "kms.policies.rotation_days", default: 90 }
kms-backup-enabled: { path: "kms.policies.backup_enabled", default: true }
kms-backup-path: { path: "kms.policies.backup_path", default: "{{kms.paths.base}}/backups" }
kms-audit-log-enabled: { path: "kms.policies.audit_log_enabled", default: false }
kms-audit-log-path: { path: "kms.policies.audit_log_path", default: "{{kms.paths.base}}/audit.log" }
# KMS Encryption
kms-encryption-algorithm: { path: "kms.encryption.algorithm", default: "ChaCha20-Poly1305" }
kms-key-derivation: { path: "kms.encryption.key_derivation", default: "scrypt" }
# KMS Security
kms-enforce-key-permissions: { path: "kms.security.enforce_key_permissions", default: true }
kms-disallow-plaintext-secrets: { path: "kms.security.disallow_plaintext_secrets", default: true }
kms-secret-scanning-enabled: { path: "kms.security.secret_scanning_enabled", default: false }
kms-min-key-size-bits: { path: "kms.security.min_key_size_bits", default: 256 }
# KMS Operations
kms-verbose: { path: "kms.operations.verbose", default: false }
kms-debug: { path: "kms.operations.debug", default: false }
kms-dry-run: { path: "kms.operations.dry_run", default: false }
kms-max-file-size-mb: { path: "kms.operations.max_file_size_mb", default: 100 }
# Provider settings
default-provider: { path: "providers.default", default: "local" }
}
}
# Get value using registry lookup
export def get-by-registry [name: string, config: record] {
let registry = (build-accessor-registry)
if not ($name in ($registry | columns)) {
error make { msg: $"Unknown accessor: ($name)" }
}
let accessor_def = ($registry | get $name)
let config_data = if ($config | is-empty) {
{}
} else {
$config
}
# Import and use get-config-value from loader module
use loader.nu get-config-value
get-config-value $config_data $accessor_def.path $accessor_def.default
}