# Configurations Mode-specific Nickel configurations for all services (NOT manually edited). ## Purpose Configurations are **automatically generated** by composing: 1. Service base defaults (defaults/{service}-defaults.ncl) 2. Mode overlay (defaults/deployment/{mode}-defaults.ncl) 3. User customization (values/{service}.{mode}.ncl) 4. Schema validation (schemas/{service}.ncl) 5. Constraint validation (validators/{service}-validator.ncl) ## File Organization ```bash configs/ ├── README.md # This file ├── orchestrator.solo.ncl # Orchestrator solo mode ├── orchestrator.multiuser.ncl # Orchestrator multi-user mode ├── orchestrator.cicd.ncl # Orchestrator CI/CD mode ├── orchestrator.enterprise.ncl # Orchestrator enterprise mode ├── control-center.solo.ncl ├── control-center.multiuser.ncl ├── control-center.cicd.ncl ├── control-center.enterprise.ncl ├── mcp-server.solo.ncl ├── mcp-server.multiuser.ncl ├── mcp-server.cicd.ncl ├── mcp-server.enterprise.ncl ├── installer.solo.ncl ├── installer.multiuser.ncl ├── installer.cicd.ncl └── installer.enterprise.ncl ``` ## Configuration Composition Each config is built from layers: ```toml # configs/orchestrator.solo.ncl let schemas = import "../schemas/orchestrator.ncl" in let defaults = import "../defaults/orchestrator-defaults.ncl" in let solo_defaults = import "../defaults/deployment/solo-defaults.ncl" in let validators = import "../validators/orchestrator-validator.ncl" in { # Merge: base defaults + mode overrides + user customization orchestrator = defaults.orchestrator & solo_defaults.services.orchestrator & { # User customization goes here (from values/orchestrator.solo.ncl) }, } | schemas.OrchestratorConfig # Apply schema validation ``` ## Example Configuration ### Base Defaults ```bash # defaults/orchestrator-defaults.ncl orchestrator = { workspace = { name = "default", path = "/var/lib/provisioning/orchestrator", enabled = true, }, server = { host = "127.0.0.1", port = 9090, workers = 4, }, queue = { max_concurrent_tasks = 5, }, } ``` ### Solo Mode Override ```bash # defaults/deployment/solo-defaults.ncl services.orchestrator = { workers = 2, # Fewer workers queue_max_concurrent_tasks = 3, # Limited concurrency storage_backend = 'filesystem, } ``` ### Generated Config ```toml # configs/orchestrator.solo.ncl (auto-generated) { orchestrator = { workspace = { name = "default", # From base defaults path = "/var/lib/provisioning/orchestrator", enabled = true, }, server = { host = "127.0.0.1", # From base defaults port = 9090, # From base defaults workers = 2, # OVERRIDDEN by solo mode }, queue = { max_concurrent_tasks = 3, # OVERRIDDEN by solo mode }, }, } ``` ## Updating Configurations **DO NOT manually edit** configs/ files. Instead: 1. **Modify service defaults** (defaults/{service}-defaults.ncl) 2. **Modify mode overrides** (defaults/deployment/{mode}-defaults.ncl) 3. **Modify user values** (values/{service}.{mode}.ncl) 4. **Regenerate configs** (via TypeDialog or manual rebuild) ### Regenerating Configs #### Via TypeDialog (Recommended) ```nushell nu provisioning/.typedialog/provisioning/platform/scripts/configure.nu orchestrator solo ``` Automatically: 1. Loads existing config as defaults 2. Shows form with validated constraints 3. User edits configuration 4. Generates updated config #### Manual Rebuild ```bash # (Future) Script to rebuild all configs from sources nu provisioning/.typedialog/provisioning/platform/scripts/generate-configs.nu orchestrator solo ``` ## Config Types ### Orchestrator (Workflow Engine) - Workspace configuration - Server settings - Storage backend (filesystem, RocksDB, SurrealDB) - Queue configuration (concurrency, retries, timeout) - Batch workflow settings - Optional: monitoring, rollback, extensions ### Control Center (Policy/RBAC) - Workspace configuration - Server settings - Database configuration - Security (JWT, RBAC, encryption) - Optional: compliance, audit logging ### MCP Server (Protocol Server) - Workspace configuration - Server settings - MCP capabilities (tools, prompts, resources) - Optional: custom tools, resource limits ### Installer (Setup Automation) - Target configuration - Provider settings - Pre-flight checks - Installation options ## Configuration Values Hierarchy ```toml 1. Explicit user customization (values/{service}.{mode}.ncl) 2. Mode-specific defaults (defaults/deployment/{mode}-defaults.ncl) 3. Service base defaults (defaults/{service}-defaults.ncl) 4. Common shared defaults (defaults/common/*.ncl) ``` ## Validation Levels Configurations are validated at three levels: ### 1. Schema Validation Type checking when config is evaluated: ```toml | schemas.OrchestratorConfig ``` ### 2. Constraint Validation Range checking via validators: ```bash max_concurrent_tasks = validators.ValidConcurrentTasks 5 ``` ### 3. Business Logic Validation Service-specific rules in validators. ## Usage in Rust Services Configs are exported to TOML for Rust services: ```toml # Generate TOML nu provisioning/.typedialog/provisioning/platform/scripts/generate-configs.nu orchestrator solo # Output: provisioning/platform/config/orchestrator.solo.toml ``` Rust services load the TOML: ```javascript let config_path = "provisioning/platform/config/orchestrator.solo.toml"; let config = Config::from_file(config_path)?; ``` ## Deployment Mode Specifics ### Solo Mode Config - Minimal resources (2 CPU, 4GB) - Filesystem storage (no DB infrastructure) - Single worker, low concurrency - Simplified security (no MFA) ### MultiUser Mode Config - Team resources (4 CPU, 8GB) - PostgreSQL or SurrealDB - Moderate concurrency (4-8 workers) - RBAC enabled ### CI/CD Mode Config - Ephemeral (cleanup after run) - API-driven (no UI/forms) - High concurrency (8+ workers) - Minimal security overhead ### Enterprise Mode Config - Production HA (16+ CPU, 32+ GB) - SurrealDB cluster with replication - High concurrency (16+ workers) - Full security (MFA, KMS, compliance) ## Testing Configurations ```toml # Typecheck a config nickel typecheck provisioning/.typedialog/provisioning/platform/configs/orchestrator.solo.ncl # Evaluate and view nickel eval provisioning/.typedialog/provisioning/platform/configs/orchestrator.solo.ncl | head -50 # Export to TOML nickel export --format toml provisioning/.typedialog/provisioning/platform/configs/orchestrator.solo.ncl # Export to JSON nickel export --format json provisioning/.typedialog/provisioning/platform/configs/orchestrator.solo.ncl ``` ## Configuration Merge Example ```toml # Base { server = { host = "127.0.0.1", port = 9090, workers = 4, }, } # + Mode override & { server.workers = 2, } # = Result { server = { host = "127.0.0.1", port = 9090, workers = 2, # OVERRIDDEN }, } ``` Nickel's `&` operator is a **shallow merge** - only top-level fields are replaced, deeper nesting is preserved. ## Generated Config Structure All generated configs follow this structure: ```toml # Service config { {service} = { # Workspace workspace = { ... }, # Server server = { ... }, # Storage/Database [storage | database] = { ... }, # Service-specific [queue | rbac | capabilities] = { ... }, # Optional [monitoring | security | compliance] = { ... }, }, } ``` --- **Version**: 1.0.0 **Last Updated**: 2025-01-05