107 lines
3.6 KiB
Plaintext
107 lines
3.6 KiB
Plaintext
|
|
# Info: KCL Coder task schemas for provisioning (Provisioning)
|
||
|
|
# Author: Provisioning System
|
||
|
|
# Release: 0.0.1
|
||
|
|
# Date: 2025-07-24
|
||
|
|
|
||
|
|
import regex
|
||
|
|
|
||
|
|
schema User:
|
||
|
|
"""
|
||
|
|
User settings for Coder
|
||
|
|
"""
|
||
|
|
name: str
|
||
|
|
group: str = name
|
||
|
|
home?: str = "/home/${name}"
|
||
|
|
|
||
|
|
schema Database:
|
||
|
|
"""
|
||
|
|
Coder Database configuration
|
||
|
|
"""
|
||
|
|
typ: "sqlite" | "postgresql" = "postgresql"
|
||
|
|
host?: str = "127.0.0.1"
|
||
|
|
port?: int = 5432
|
||
|
|
database?: str = "coder"
|
||
|
|
username?: str
|
||
|
|
password?: str
|
||
|
|
ssl_mode?: "require" | "disable" = "disable"
|
||
|
|
path?: str = "/var/lib/coder/coder.db" if typ == "sqlite" else Undefined
|
||
|
|
|
||
|
|
check:
|
||
|
|
typ == "sqlite" or username != Undefined and len(username) > 0, "Database username required for ${typ}"
|
||
|
|
typ == "sqlite" or password != Undefined and len(password) > 0, "Database password required for ${typ}"
|
||
|
|
typ == "sqlite" or host != Undefined and len(host) > 0, "Database host required for ${typ}"
|
||
|
|
|
||
|
|
schema TLS:
|
||
|
|
"""
|
||
|
|
TLS configuration for Coder
|
||
|
|
"""
|
||
|
|
enabled: bool = False
|
||
|
|
cert_file?: str
|
||
|
|
key_file?: str
|
||
|
|
address?: str = "0.0.0.0:443"
|
||
|
|
|
||
|
|
check:
|
||
|
|
not enabled or cert_file != Undefined and len(cert_file) > 0, "cert_file required when TLS enabled"
|
||
|
|
not enabled or key_file != Undefined and len(key_file) > 0, "key_file required when TLS enabled"
|
||
|
|
not enabled or (regex.match(cert_file, "^\/.*\.(pem|crt)$") if cert_file != Undefined else True), \
|
||
|
|
"cert_file should be absolute path with .pem or .crt extension"
|
||
|
|
not enabled or (regex.match(key_file, "^\/.*\.(pem|key)$") if key_file != Undefined else True), \
|
||
|
|
"key_file should be absolute path with .pem or .key extension"
|
||
|
|
|
||
|
|
schema OAuth:
|
||
|
|
"""
|
||
|
|
OAuth configuration for Coder
|
||
|
|
"""
|
||
|
|
enabled: bool = False
|
||
|
|
provider: "github" | "oidc" | "google" = "github"
|
||
|
|
client_id?: str
|
||
|
|
client_secret?: str
|
||
|
|
issuer_url?: str
|
||
|
|
scopes?: [str] = ["openid", "profile", "email"]
|
||
|
|
|
||
|
|
check:
|
||
|
|
not enabled or client_id != Undefined and len(client_id) > 0, "client_id required when OAuth enabled"
|
||
|
|
not enabled or client_secret != Undefined and len(client_secret) > 0, "client_secret required when OAuth enabled"
|
||
|
|
not enabled or provider != "oidc" or issuer_url != Undefined and len(issuer_url) > 0, "issuer_url required for OIDC provider"
|
||
|
|
|
||
|
|
schema CoderServer:
|
||
|
|
"""
|
||
|
|
Coder server configuration
|
||
|
|
"""
|
||
|
|
name: str = "coder"
|
||
|
|
version: str
|
||
|
|
run_user: User = {
|
||
|
|
name = "coder"
|
||
|
|
}
|
||
|
|
work_path: str = "/var/lib/coder"
|
||
|
|
config_path: str = "/etc/coder"
|
||
|
|
run_path: str = "/usr/local/bin/coder"
|
||
|
|
access_url: str
|
||
|
|
wildcard_access_url?: str
|
||
|
|
http_address: str = "0.0.0.0:7080"
|
||
|
|
database: Database = {
|
||
|
|
typ = "postgresql"
|
||
|
|
}
|
||
|
|
tls: TLS = {
|
||
|
|
enabled = False
|
||
|
|
}
|
||
|
|
oauth: OAuth = {
|
||
|
|
enabled = False
|
||
|
|
}
|
||
|
|
log_level: "trace" | "debug" | "info" | "warn" | "error" = "info"
|
||
|
|
telemetry_enabled: bool = True
|
||
|
|
update_check_enabled: bool = True
|
||
|
|
redirect_to_access_url: bool = False
|
||
|
|
proxy_trusted_headers: [str] = []
|
||
|
|
proxy_trusted_origins: [str] = []
|
||
|
|
secure_auth_cookie: bool = False
|
||
|
|
max_session_token_lifetime: str = "24h"
|
||
|
|
disable_password_auth: bool = False
|
||
|
|
|
||
|
|
check:
|
||
|
|
len(access_url) > 0, "access_url is required"
|
||
|
|
regex.match(access_url, "^https?://.*$"), "access_url must be a valid HTTP/HTTPS URL"
|
||
|
|
wildcard_access_url == Undefined or regex.match(wildcard_access_url, "^\*\..*$"), "wildcard_access_url must start with *."
|
||
|
|
len(run_user.name) > 0, "Check run_user name"
|
||
|
|
len(work_path) > 0, "Check work_path"
|
||
|
|
len(config_path) > 0, "Check config_path"
|