156 lines
4 KiB
TOML
156 lines
4 KiB
TOML
# Provisioning Constraints - Single Source of Truth
|
|
# Used by: Forms (validation), Nickel validators (contracts), Templates (limits)
|
|
# Version: 1.0.0
|
|
|
|
[project]
|
|
description_max_length = 500
|
|
name_max_length = 64
|
|
name_min_length = 1
|
|
name_pattern = "^[a-z0-9-]+$"
|
|
version_pattern = "^[0-9]+\\.[0-9]+\\.[0-9]+$"
|
|
|
|
[service]
|
|
# Service type must be one of these
|
|
allowed_types = ["api", "worker", "scheduler", "frontend", "backend", "database", "cache", "queue"]
|
|
healthcheck_interval_max = 300
|
|
healthcheck_interval_min = 5
|
|
healthcheck_retries_max = 10
|
|
healthcheck_retries_min = 1
|
|
healthcheck_timeout_max = 60
|
|
healthcheck_timeout_min = 1
|
|
name_max_length = 32
|
|
name_min_length = 1
|
|
name_pattern = "^[a-z0-9-]+$"
|
|
replicas_max = 100
|
|
replicas_min = 1
|
|
|
|
[service.image]
|
|
name_max_length = 256
|
|
name_min_length = 1
|
|
tag_max_length = 128
|
|
tag_pattern = "^[a-zA-Z0-9._-]+$"
|
|
|
|
[service.ports]
|
|
container_port_max = 65535
|
|
container_port_min = 1
|
|
host_port_max = 65535
|
|
host_port_min = 1024
|
|
protocol_allowed = ["tcp", "udp", "sctp"]
|
|
|
|
[service.resources]
|
|
# CPU limits in millicores or cores (e.g., "100m", "1.5")
|
|
cpu_limit_pattern = "^[0-9]+(\\.[0-9]+)?[m]?$"
|
|
cpu_request_pattern = "^[0-9]+(\\.[0-9]+)?[m]?$"
|
|
# Memory limits (e.g., "128Mi", "1Gi", "512M")
|
|
memory_limit_pattern = "^[0-9]+(Mi|Gi|M|G|Ki|K)$"
|
|
memory_request_pattern = "^[0-9]+(Mi|Gi|M|G|Ki|K)$"
|
|
|
|
[database]
|
|
allowed_types = ["sqlite", "postgres", "mysql", "surrealdb", "none"]
|
|
name_max_length = 64
|
|
name_pattern = "^[a-zA-Z0-9_]+$"
|
|
|
|
[database.sqlite]
|
|
database_path_max_length = 256
|
|
|
|
[database.postgres]
|
|
connection_timeout_max = 300
|
|
connection_timeout_min = 1
|
|
database_name_max_length = 64
|
|
host_max_length = 256
|
|
idle_timeout_max = 3600
|
|
idle_timeout_min = 60
|
|
max_lifetime_max = 86400
|
|
max_lifetime_min = 300
|
|
password_max_length = 128
|
|
password_min_length = 8
|
|
pool_size_max = 1000
|
|
pool_size_min = 1
|
|
port_max = 65535
|
|
port_min = 1024
|
|
username_max_length = 64
|
|
|
|
[database.mysql]
|
|
connection_timeout_max = 300
|
|
connection_timeout_min = 1
|
|
database_name_max_length = 64
|
|
host_max_length = 256
|
|
password_max_length = 128
|
|
password_min_length = 8
|
|
pool_size_max = 1000
|
|
pool_size_min = 1
|
|
port_max = 65535
|
|
port_min = 1024
|
|
username_max_length = 32
|
|
|
|
[database.surrealdb]
|
|
database_name_max_length = 64
|
|
host_max_length = 256
|
|
namespace_max_length = 64
|
|
password_max_length = 128
|
|
password_min_length = 8
|
|
port_max = 65535
|
|
port_min = 1024
|
|
username_max_length = 64
|
|
|
|
[deployment.docker_compose]
|
|
restart_policy_allowed = ["no", "always", "on-failure", "unless-stopped"]
|
|
version_allowed = ["3.8", "3.9"]
|
|
|
|
[deployment.kubernetes]
|
|
api_version_allowed = ["v1", "apps/v1", "networking.k8s.io/v1"]
|
|
namespace_max_length = 63
|
|
namespace_pattern = "^[a-z0-9-]+$"
|
|
|
|
[deployment.kubernetes.ingress]
|
|
class_name_max_length = 64
|
|
path_type_allowed = ["Prefix", "Exact", "ImplementationSpecific"]
|
|
|
|
[network]
|
|
driver_allowed = ["bridge", "host", "overlay", "macvlan", "none"]
|
|
network_name_max_length = 64
|
|
network_name_pattern = "^[a-z0-9-]+$"
|
|
subnet_pattern = "^([0-9]{1,3}\\.){3}[0-9]{1,3}/[0-9]{1,2}$"
|
|
|
|
[storage]
|
|
driver_allowed = ["local", "nfs", "cifs"]
|
|
mount_path_max_length = 256
|
|
size_pattern = "^[0-9]+(Mi|Gi|Ti|M|G|T)$"
|
|
volume_name_max_length = 64
|
|
volume_name_pattern = "^[a-z0-9-]+$"
|
|
|
|
[monitoring.prometheus]
|
|
evaluation_interval_max = 300
|
|
evaluation_interval_min = 5
|
|
port_max = 65535
|
|
port_min = 1024
|
|
retention_pattern = "^[0-9]+(d|h|m)$"
|
|
scrape_interval_max = 300
|
|
scrape_interval_min = 5
|
|
|
|
[monitoring.grafana]
|
|
admin_password_max_length = 128
|
|
admin_password_min_length = 8
|
|
port_max = 65535
|
|
port_min = 1024
|
|
|
|
[security.tls]
|
|
ca_path_max_length = 256
|
|
cert_path_max_length = 256
|
|
key_path_max_length = 256
|
|
|
|
[security.secrets]
|
|
secret_key_max_length = 64
|
|
secret_name_max_length = 64
|
|
secret_name_pattern = "^[a-z0-9-]+$"
|
|
|
|
[security.auth]
|
|
allowed_methods = ["none", "basic", "bearer", "oauth2", "jwt", "api_key"]
|
|
token_expiry_max = 86400
|
|
token_expiry_min = 300
|
|
|
|
[environment]
|
|
# Environment variable constraints
|
|
var_name_max_length = 128
|
|
var_name_pattern = "^[A-Z_][A-Z0-9_]*$"
|
|
var_value_max_length = 4096
|