prvng_platform/scripts/generate-infrastructure-configs.nu

169 lines
6.4 KiB
Plaintext

#!/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|
let r = (do { mkdir $"($output_base)/($dir)" } | complete)
if $r.exit_code != 0 { }
}
# 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..."
let r = (do { ^nickel export --format yaml $schema_file | save $"($output_base)/docker-compose/docker-compose.($mode).yaml" } | complete)
if $r.exit_code != 0 {
log error $"Failed to generate docker-compose.($mode).yaml"
}
}
if ($formats | any { |f| $f == "json" }) {
log info $" Generating docker-compose.($mode).json..."
let r = (do { ^nickel export --format json $schema_file | save $"($output_base)/docker-compose/docker-compose.($mode).json" } | complete)
if $r.exit_code != 0 {
log error $"Failed to generate docker-compose.($mode).json"
}
}
}
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)"
let r = (do { mkdir $mode_subdir } | complete)
if $r.exit_code != 0 { }
if ($formats | any { |f| $f == "yaml" }) {
log info $" Generating kubernetes/($mode)/deployment.yaml..."
let r = (do { ^nickel export --format yaml $schema_file | save $"($mode_subdir)/deployment.yaml" } | complete)
if $r.exit_code != 0 {
log error $"Failed to generate kubernetes manifest"
}
}
}
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..."
let r = (do { ^nickel export --format json $schema_file | save $"($output_base)/nginx/nginx.($mode).json" } | complete)
if $r.exit_code != 0 {
log error $"Failed to generate nginx config"
}
}
}
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..."
let r = (do { ^nickel export --format yaml $schema_file | save $"($output_base)/prometheus/prometheus.($mode).yml" } | complete)
if $r.exit_code != 0 {
log error $"Failed to generate prometheus config"
}
}
}
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..."
let r = (do { ^nickel export --format json $schema_file | save $"($output_base)/systemd/systemd.($mode).json" } | complete)
if $r.exit_code != 0 {
log error $"Failed to generate systemd units"
}
}
}
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..."
let r = (do { ^nickel export --format json $schema_file | save $"($output_base)/oci-registry/oci-registry.($mode).json" } | complete)
if $r.exit_code != 0 {
log error $"Failed to generate OCI registry config"
}
}
}