provisioning/schemas/services/contracts.ncl

149 lines
4.1 KiB
Plaintext
Raw Normal View History

# Service Registry Contracts
#
# Type definitions for platform services
# Migrated from provisioning/kcl/services.k
{
ResourceLimits = {
cpu_limit | String | optional,
memory_limit | String | optional,
disk_limit | String | optional,
},
BinaryDeployment = {
binary_path | String,
args | Array String | default = [],
working_dir | String | optional,
env | { _ | String } | default = {},
user | String | optional,
group | String | optional,
},
DockerDeployment = {
image | String,
container_name | String,
ports | Array String | default = [],
volumes | Array String | default = [],
environment | { _ | String } | default = {},
command | Array String | optional,
networks | Array String | default = [],
restart_policy | [| 'no, 'always, 'on_failure, 'unless_stopped |] | default = 'unless_stopped,
},
DockerComposeDeployment = {
compose_file | String,
service_name | String,
project_name | String | optional,
env_file | String | optional,
},
HelmChart = {
chart | String,
release_name | String,
repo_url | String | optional,
version | String | optional,
values_file | String | optional,
},
KubernetesDeployment = {
namespace | String,
deployment_name | String,
kubeconfig | String | optional,
manifests_path | String | optional,
helm_chart | HelmChart | optional,
},
RemoteDeployment = {
endpoint | String,
tls_enabled | Bool | default = true,
auth_token_path | String | optional,
cert_path | String | optional,
},
ServiceDeployment = {
mode | [| 'binary, 'docker, 'docker_compose, 'kubernetes, 'remote |],
binary | BinaryDeployment | optional,
docker | DockerDeployment | optional,
docker_compose | DockerComposeDeployment | optional,
kubernetes | KubernetesDeployment | optional,
remote | RemoteDeployment | optional,
},
HttpHealthCheck = {
endpoint | String,
expected_status | Number | default = 200,
method | [| 'GET, 'POST, 'HEAD |] | default = 'GET,
headers | { _ | String } | default = {},
},
TcpHealthCheck = {
host | String,
port | Number,
},
CommandHealthCheck = {
command | String,
expected_exit_code | Number | default = 0,
},
FileHealthCheck = {
path | String,
must_exist | Bool | default = true,
},
HealthCheck = {
type | [| 'http, 'tcp, 'command, 'file, 'none |],
http | HttpHealthCheck | optional,
tcp | TcpHealthCheck | optional,
command | CommandHealthCheck | optional,
file | FileHealthCheck | optional,
interval | Number | default = 10,
retries | Number | default = 3,
timeout | Number | default = 5,
},
StartupConfig = {
auto_start | Bool | default = false,
start_timeout | Number | default = 60,
start_order | Number | default = 100,
restart_on_failure | Bool | default = true,
max_restarts | Number | default = 3,
},
ServiceDefinition = {
name | String,
type | [| 'platform, 'infrastructure, 'utility |],
category | [| 'orchestration, 'auth, 'dns, 'git, 'registry, 'api, 'ui, 'monitoring |],
description | String | optional,
required_for | Array String | default = [],
dependencies | Array String | default = [],
conflicts | Array String | default = [],
deployment | ServiceDeployment,
health_check | HealthCheck,
startup | StartupConfig | default = { auto_start = false, start_timeout = 60, start_order = 100, restart_on_failure = true, max_restarts = 3 },
resources | ResourceLimits | optional,
},
ServiceRegistry = {
services | { _ | ServiceDefinition },
},
ServiceState = {
name | String,
status | [| 'running, 'stopped, 'failed, 'starting, 'stopping, 'unknown |],
pid | Number | optional,
started_at | String | optional,
uptime | Number | optional,
health_status | [| 'healthy, 'unhealthy, 'unknown |] | default = 'unknown,
last_health_check | String | optional,
restart_count | Number | default = 0,
},
ServiceOperation = {
service_name | String,
operation | [| 'start, 'stop, 'restart, 'reload, 'health_check |],
force | Bool | default = false,
timeout | Number | optional,
},
}