321 lines
7.5 KiB
Markdown
321 lines
7.5 KiB
Markdown
# 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
|