114 lines
3.5 KiB
Text
114 lines
3.5 KiB
Text
use tools/nickel/process.nu [ncl-eval-soft]
|
|
use platform/user/config.nu [get-platform-config-dir write-provisioning-root]
|
|
|
|
def get-config-dir [] {
|
|
get-platform-config-dir
|
|
}
|
|
|
|
export def load-deployment-mode [] {
|
|
let config_dir = (get-config-dir)
|
|
let config_file = $"($config_dir)/deployment-mode.ncl"
|
|
|
|
if not ($config_file | path exists) {
|
|
print $"ERROR: Configuration file not found at ($config_file)"
|
|
return {}
|
|
}
|
|
|
|
let import_path = ($env.PROVISIONING? | default "")
|
|
let import_paths = if ($import_path | is-not-empty) { [$import_path] } else { [] }
|
|
let content = (ncl-eval-soft $config_file $import_paths null)
|
|
|
|
if $content != null { $content } else {
|
|
print "ERROR: Failed to export Nickel configuration"
|
|
{}
|
|
}
|
|
}
|
|
|
|
export def get-enabled-services [] {
|
|
let deployment = (load-deployment-mode)
|
|
|
|
if not ("services" in $deployment) {
|
|
print "ERROR: No services found in deployment configuration"
|
|
return []
|
|
}
|
|
|
|
let services = $deployment.services
|
|
let all_services = ($services | columns)
|
|
|
|
let enabled = ($all_services | where {|key|
|
|
let svc = ($services | get $key)
|
|
($svc.enabled? | default false)
|
|
})
|
|
|
|
$enabled
|
|
| each {|name|
|
|
let cfg = $services | get $name
|
|
{name: $name, config: $cfg, priority: ($cfg.priority? | default 999)}
|
|
}
|
|
| sort-by priority
|
|
}
|
|
|
|
export def get-deployment-service-config [service: string] {
|
|
let deployment = (load-deployment-mode)
|
|
$deployment.services | get $service
|
|
}
|
|
|
|
export def get-default-platform-target [workspace: string] {
|
|
{
|
|
platform: {
|
|
name: $"($workspace)-local"
|
|
type: "local"
|
|
mode: "development"
|
|
services: {
|
|
orchestrator: {enabled: true, endpoint: "http://localhost:9090", required: true, health_check: {endpoint: "/health", timeout: 5000}}
|
|
control: {enabled: false, endpoint: "http://localhost:9080", required: false, health_check: {endpoint: "/health", timeout: 5000}}
|
|
kms: {enabled: true, endpoint: "http://localhost:8090", required: true, health_check: {endpoint: "/health", timeout: 5000}}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export def validate-platform-target [target: record] {
|
|
"platform" in $target
|
|
}
|
|
|
|
export def detect-platform-mode [endpoint: string] {
|
|
if ($endpoint =~ "localhost") { "local" } else { "remote" }
|
|
}
|
|
|
|
export def should-start-locally [config: record] {
|
|
(detect-platform-mode $config.endpoint) == "local"
|
|
}
|
|
|
|
export def get-platform-endpoint [service: string] {
|
|
let cfg = (get-deployment-service-config $service)
|
|
let explicit = ($cfg | get -o endpoint | default "")
|
|
if ($explicit | is-not-empty) {
|
|
$explicit
|
|
} else {
|
|
let srv = ($cfg | get -o server)
|
|
if $srv == null { "" } else {
|
|
let host = ($srv | get -o host | default "127.0.0.1")
|
|
let port = ($srv | get -o port | default 0)
|
|
if $port == 0 { "" } else { $"http://($host):($port)" }
|
|
}
|
|
}
|
|
}
|
|
|
|
export def is-platform-service-enabled [service: string] {
|
|
(get-deployment-service-config $service).enabled
|
|
}
|
|
|
|
export def get-platform-service-config [service: string] {
|
|
get-deployment-service-config $service
|
|
}
|
|
|
|
export def list-enabled-platform-services [] {
|
|
get-enabled-services | each {|s| {name: $s.name}}
|
|
}
|
|
|
|
export def list-required-platform-services [] {
|
|
get-enabled-services
|
|
| where {|s| ($s.config.required? | default false)}
|
|
| each {|s| {name: $s.name}}
|
|
}
|