Platform restructured into crates/, added AI service and detector,
migrated control-center-ui to Leptos 0.8
185 lines
6.3 KiB
Plaintext
Executable File
185 lines
6.3 KiB
Plaintext
Executable File
#!/usr/bin/env nu
|
|
# Infrastructure Configuration Generation Script
|
|
# Generates Docker Compose, Kubernetes, Nginx, and other infrastructure configs
|
|
# from Nickel schemas for all deployment modes (solo, multiuser, enterprise)
|
|
|
|
use std log
|
|
|
|
def main [--mode: string = "all", --format: string = "all", --output-dir: string = "."] {
|
|
let modes = if $mode == "all" {
|
|
["solo", "multiuser", "enterprise", "cicd"]
|
|
} else {
|
|
[$mode]
|
|
}
|
|
|
|
let formats = if $format == "all" {
|
|
["yaml", "json", "conf", "service"]
|
|
} else {
|
|
[$format]
|
|
}
|
|
|
|
let schema_base = "provisioning/schemas/infrastructure"
|
|
let output_base = $output_dir
|
|
|
|
log info $"Generating infrastructure configs for modes: ($modes | str join ', ')"
|
|
log info $"Formats: ($formats | str join ', ')"
|
|
log info $"Output directory: ($output_base)"
|
|
|
|
# Create output directories
|
|
[docker-compose kubernetes nginx prometheus systemd oci-registry] | each { |dir|
|
|
try {
|
|
mkdir $"($output_base)/($dir)"
|
|
} catch { }
|
|
}
|
|
|
|
# 1. Generate Docker Compose configurations
|
|
if ($formats | any { |f| $f == "yaml" or $f == "json" }) {
|
|
log info "Generating Docker Compose configurations..."
|
|
for mode in $modes {
|
|
generate_docker_compose $mode $schema_base $output_base $formats
|
|
}
|
|
}
|
|
|
|
# 2. Generate Kubernetes manifests
|
|
if ($formats | any { |f| $f == "yaml" or $f == "json" }) {
|
|
log info "Generating Kubernetes manifests..."
|
|
for mode in $modes {
|
|
generate_kubernetes $mode $schema_base $output_base $formats
|
|
}
|
|
}
|
|
|
|
# 3. Generate Nginx configurations
|
|
if ($formats | any { |f| $f == "conf" or $f == "json" }) {
|
|
log info "Generating Nginx configurations..."
|
|
for mode in $modes {
|
|
generate_nginx $mode $schema_base $output_base $formats
|
|
}
|
|
}
|
|
|
|
# 4. Generate Prometheus configurations
|
|
if ($formats | any { |f| $f == "yaml" or $f == "json" }) {
|
|
log info "Generating Prometheus configurations..."
|
|
for mode in $modes {
|
|
generate_prometheus $mode $schema_base $output_base $formats
|
|
}
|
|
}
|
|
|
|
# 5. Generate Systemd service units
|
|
if ($formats | any { |f| $f == "service" or $f == "json" }) {
|
|
log info "Generating Systemd service units..."
|
|
for mode in $modes {
|
|
generate_systemd $mode $schema_base $output_base $formats
|
|
}
|
|
}
|
|
|
|
# 6. Generate OCI Registry configurations
|
|
if ($formats | any { |f| $f == "json" or $f == "yaml" }) {
|
|
log info "Generating OCI Registry configurations..."
|
|
for mode in $modes {
|
|
generate_oci_registry $mode $schema_base $output_base $formats
|
|
}
|
|
}
|
|
|
|
log info "✅ Infrastructure configuration generation complete!"
|
|
log info $"Generated files: ($output_base)"
|
|
}
|
|
|
|
def generate_docker_compose [mode: string, schema_base: string, output_base: string, formats: list<string>] {
|
|
let schema_file = $"($schema_base)/docker-compose.ncl"
|
|
|
|
if ($formats | any { |f| $f == "yaml" }) {
|
|
log info $" Generating docker-compose.($mode).yaml..."
|
|
try {
|
|
nickel export --format yaml $schema_file
|
|
| save $"($output_base)/docker-compose/docker-compose.($mode).yaml"
|
|
} catch {|e|
|
|
log error $"Failed to generate docker-compose.($mode).yaml: ($e.msg)"
|
|
}
|
|
}
|
|
|
|
if ($formats | any { |f| $f == "json" }) {
|
|
log info $" Generating docker-compose.($mode).json..."
|
|
try {
|
|
nickel export --format json $schema_file
|
|
| save $"($output_base)/docker-compose/docker-compose.($mode).json"
|
|
} catch {|e|
|
|
log error $"Failed to generate docker-compose.($mode).json: ($e.msg)"
|
|
}
|
|
}
|
|
}
|
|
|
|
def generate_kubernetes [mode: string, schema_base: string, output_base: string, formats: list<string>] {
|
|
let schema_file = $"($schema_base)/kubernetes.ncl"
|
|
let mode_subdir = $"($output_base)/kubernetes/($mode)"
|
|
|
|
try {
|
|
mkdir $mode_subdir
|
|
} catch { }
|
|
|
|
if ($formats | any { |f| $f == "yaml" }) {
|
|
log info $" Generating kubernetes/($mode)/deployment.yaml..."
|
|
try {
|
|
nickel export --format yaml $schema_file
|
|
| save $"($mode_subdir)/deployment.yaml"
|
|
} catch {|e|
|
|
log error $"Failed to generate kubernetes manifest: ($e.msg)"
|
|
}
|
|
}
|
|
}
|
|
|
|
def generate_nginx [mode: string, schema_base: string, output_base: string, formats: list<string>] {
|
|
let schema_file = $"($schema_base)/nginx.ncl"
|
|
|
|
if ($formats | any { |f| $f == "json" }) {
|
|
log info $" Generating nginx.($mode).json..."
|
|
try {
|
|
nickel export --format json $schema_file
|
|
| save $"($output_base)/nginx/nginx.($mode).json"
|
|
} catch {|e|
|
|
log error $"Failed to generate nginx config: ($e.msg)"
|
|
}
|
|
}
|
|
}
|
|
|
|
def generate_prometheus [mode: string, schema_base: string, output_base: string, formats: list<string>] {
|
|
let schema_file = $"($schema_base)/prometheus.ncl"
|
|
|
|
if ($formats | any { |f| $f == "yaml" }) {
|
|
log info $" Generating prometheus.($mode).yml..."
|
|
try {
|
|
nickel export --format yaml $schema_file
|
|
| save $"($output_base)/prometheus/prometheus.($mode).yml"
|
|
} catch {|e|
|
|
log error $"Failed to generate prometheus config: ($e.msg)"
|
|
}
|
|
}
|
|
}
|
|
|
|
def generate_systemd [mode: string, schema_base: string, output_base: string, formats: list<string>] {
|
|
let schema_file = $"($schema_base)/systemd.ncl"
|
|
|
|
if ($formats | any { |f| $f == "json" }) {
|
|
log info $" Generating systemd.($mode).json..."
|
|
try {
|
|
nickel export --format json $schema_file
|
|
| save $"($output_base)/systemd/systemd.($mode).json"
|
|
} catch {|e|
|
|
log error $"Failed to generate systemd units: ($e.msg)"
|
|
}
|
|
}
|
|
}
|
|
|
|
def generate_oci_registry [mode: string, schema_base: string, output_base: string, formats: list<string>] {
|
|
let schema_file = $"($schema_base)/oci-registry.ncl"
|
|
|
|
if ($formats | any { |f| $f == "json" }) {
|
|
log info $" Generating oci-registry.($mode).json..."
|
|
try {
|
|
nickel export --format json $schema_file
|
|
| save $"($output_base)/oci-registry/oci-registry.($mode).json"
|
|
} catch {|e|
|
|
log error $"Failed to generate OCI registry config: ($e.msg)"
|
|
}
|
|
}
|
|
}
|