syntaxis/scripts/provisioning/service-catalog.nu
Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
Merge _configs/ into config/ for single configuration directory.
Update all path references.

Changes:
- Move _configs/* to config/
- Update .gitignore for new patterns
- No code references to _configs/ found

Impact: -1 root directory (layout_conventions.md compliance)
2025-12-26 18:36:23 +00:00

179 lines
6.4 KiB
Plaintext

#!/usr/bin/env nu
# service-catalog.nu - Service discovery and catalog management (v0.1.0)
#
# Lightweight service discovery tool for exploring syntaxis services
# and exporting configurations for project-provisioning integration.
#
# Load the service catalog from TOML
def load_catalog [] {
try {
open configs/services-catalog.toml
} catch {
print "❌ Error: Could not load configs/services-catalog.toml"
null
}
}
# List all available services
def list_services [] {
let catalog = load_catalog
if ($catalog == null) { return }
print (ansi cyan_bold)
print "═══════════════════════════════════════════════════════════════"
print "SYNTAXIS SERVICES CATALOG"
print "═══════════════════════════════════════════════════════════════"
print (ansi reset)
print ""
let services = ($catalog | get service | columns | sort)
print (ansi yellow_bold)"Available Services:"(ansi reset)
print ""
$services | each { |svc|
let info = ($catalog.service | get $svc)
let display_name = ($info.display_name? // $svc)
let description = ($info.description? // "")
let type = ($info.type? // "unknown")
print $" (ansi cyan)($display_name)(ansi reset)"
print $" Type: (ansi blue)($type)(ansi reset)"
print $" $(ansi dimmed)($description)(ansi reset)"
# Show port if applicable
if ($info.server? != null) {
let port = ($info.server.default_port?)
if ($port != null) {
print $" Port: (ansi green)($port)(ansi reset)"
}
}
print ""
}
print (ansi yellow_bold)"Usage:"(ansi reset)
print " nu scripts/provisioning/service-catalog.nu info <service-name>"
print " nu scripts/provisioning/service-catalog.nu usage <service-name>"
print " nu scripts/provisioning/service-catalog.nu preset <preset-name>"
print " nu scripts/provisioning/service-catalog.nu ports"
print ""
}
# Show ports
def show_ports [] {
let catalog = load_catalog
if ($catalog == null) { return }
print (ansi cyan_bold)
print "═══════════════════════════════════════════════════════════════"
print "SYNTAXIS SERVICES - PORT MAPPING"
print "═══════════════════════════════════════════════════════════════"
print (ansi reset)
print ""
print (ansi yellow_bold)"Service Ports:"(ansi reset)
print ""
let services = ($catalog | get service | columns | sort)
$services | each { |svc|
let info = ($catalog.service | get $svc)
if ($info.server? != null) {
let display_name = ($info.display_name? // $svc)
let port = ($info.server.default_port?)
let scheme = ($info.server.scheme? // "http")
let host = ($info.server.default_host? // "127.0.0.1")
print $" (ansi cyan)($display_name)(ansi reset): (ansi green)($scheme)://($host):($port)(ansi reset)"
}
}
print ""
}
# List service groups
def list_groups [] {
let catalog = load_catalog
if ($catalog == null) { return }
print (ansi cyan_bold)
print "═══════════════════════════════════════════════════════════════"
print "SERVICE GROUPS (Logical groupings)"
print "═══════════════════════════════════════════════════════════════"
print (ansi reset)
print ""
$catalog.groups | transpose | each { |item|
let name = $item.key
let group = $item.value
let services = ($group.services | str join ", ")
print (ansi yellow_bold)$name(ansi reset)
print $" ($group.description?)"
print $" Services: ($services)"
print ""
}
}
# List deployment patterns
def list_patterns [] {
let catalog = load_catalog
if ($catalog == null) { return }
print (ansi cyan_bold)
print "═══════════════════════════════════════════════════════════════"
print "DEPLOYMENT PATTERNS"
print "═══════════════════════════════════════════════════════════════"
print (ansi reset)
print ""
$catalog.pattern | transpose | each { |item|
let name = $item.key
let pattern = $item.value
let services = ($pattern.services | str join ", ")
print (ansi yellow_bold)($pattern.name?)(ansi reset)
print $" ($pattern.description?)"
print $" Services: (ansi dimmed)($services)(ansi reset)"
print $" Use cases: ($pattern.use_cases | str join ", ")"
print ""
}
}
# Print help
def print_help [] {
print (ansi cyan_bold)
print "SERVICE CATALOG - Service Discovery & Management"
print (ansi reset)
print ""
print "Commands:"
print ""
print " list List all available services"
print " ports Show port mappings"
print " groups List service groups"
print " patterns List deployment patterns"
print " help Show this help"
print ""
print "Examples:"
print ""
print " nu scripts/provisioning/service-catalog.nu list"
print " nu scripts/provisioning/service-catalog.nu ports"
print " nu scripts/provisioning/service-catalog.nu groups"
print " nu scripts/provisioning/service-catalog.nu patterns"
print ""
}
# Main entry point
def main [command: string = "help"] {
match $command {
"list" => list_services,
"ports" => show_ports,
"groups" => list_groups,
"patterns" => list_patterns,
"help" | _ => print_help,
}
}
# Run main
main