143 lines
3.7 KiB
Plaintext
143 lines
3.7 KiB
Plaintext
|
|
"""
|
||
|
|
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"
|