Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
Merge _configs/ into config/ for single configuration directory.
Update all path references.

Changes:
- Move _configs/* to config/
- Update .gitignore for new patterns
- No code references to _configs/ found

Impact: -1 root directory (layout_conventions.md compliance)
2025-12-26 18:36:23 +00:00

143 lines
3.7 KiB
Django/Jinja

"""
Deployment schemas for {{ deployment.project.name }}
Auto-generated KCL schemas for service definitions, presets, and deployment configuration.
This module defines the structure and validation rules for all deployment elements.
Extends: provisioning.extensions.taskservs schema patterns
References: deployment.k, defaults.k, services.k, presets.k
"""
# Service configuration schema
schema Service:
"""Service definition with metadata and requirements"""
# Basic identification
name: str
display_name: str
service_type: str # "cli", "tui", "server", "web"
enabled: bool = True
# Execution context
port: int = 0 # Optional port number (0 if not used)
background_service: bool = False
# Resource requirements
min_memory_mb: int = 64
min_disk_space_mb: int = 50
# Configuration
config_location: str = "~/.config"
# Database support
database_required: bool = False
database_types: [str] = []
# Platform support
platform_support: [str] = []
# Service dependencies
requires: [str] = []
# Health check configuration
health_check: HealthCheck = {}
# Restart policy for background services
restart_policy: str = "" # "on-failure", "always", or empty
restart_delay_seconds: int = 0
check:
port == 0 or (1 <= port < 65536), "Port must be between 1 and 65535"
schema HealthCheck:
"""Health check configuration for services"""
type: str # "http", "tcp", "cmd"
interval_seconds: int = 10
timeout_seconds: int = 5
# Type-specific fields (conditional validation)
endpoint: str = "" # For HTTP checks
method: str = "" # For HTTP checks: GET, POST, etc
expected_status: int = 0 # For HTTP checks
port: int = 0 # For TCP checks
command: str = "" # For command checks
check:
interval_seconds > 0, "Interval must be positive"
timeout_seconds > 0, "Timeout must be positive"
timeout_seconds < interval_seconds, "Timeout should be less than interval"
schema Database:
"""Database backend configuration"""
type: str # "sqlite", "postgres", "mysql", "surrealdb"
host: str = ""
port: int = 0
user: str = ""
password: str = ""
path: str = "" # For file-based databases
platform_support: [str] = []
check:
port == 0 or (1 <= port < 65536), "Port must be between 1 and 65535"
schema Cache:
"""Cache backend configuration"""
type: str # "redis", "memcached"
enabled: bool = False
host: str = "localhost"
port: int = 6379
platform_support: [str] = []
check:
1 <= port < 65536, "Port must be between 1 and 65535"
schema Preset:
"""Deployment preset configuration"""
name: str
description: str
services_enabled: [str]
manager: str # "manual", "provctl", "provisioning"
database_type: str
cache_enabled: bool = False
restart_policy: str = ""
high_availability: bool = False
check:
manager in ["manual", "provctl", "provisioning"], "Manager must be 'manual', 'provctl', or 'provisioning'"
schema ProjectInfo:
"""Project metadata and configuration"""
name: str
version: str
description: str = ""
check:
len(name) > 0, "Project name cannot be empty"
len(version) > 0, "Project version cannot be empty"
schema Deployment:
"""Root deployment configuration"""
project: ProjectInfo
services: [Service]
databases: [Database]
cache: [Cache] = []
presets: [Preset]
default_database: str
default_cache: str = ""
check:
len(services) > 0, "At least one service must be defined"
len(presets) > 0, "At least one preset must be defined"