provisioning-core/nulib/cli/handlers/utilities/cache.nu

184 lines
8.3 KiB
Text

# Cache Command Handler
# Domain: Configuration and state cache management
# Cache command handler - Manage configuration caches
export def handle_cache [ops: string, flags: record] {
use domain/cache/simple_cache.nu *
# Parse cache subcommand
let parts = if ($ops | is-not-empty) {
($ops | str trim | split row " " | where { |x| ($x | is-not-empty) })
} else {
[]
}
let subcommand = if ($parts | length) > 0 { $parts | get 0 } else { "status" }
let args = if ($parts | length) > 1 { $parts | skip 1 } else { [] }
# Handle cache commands
match $subcommand {
"status" => {
print ""
cache-status
print ""
}
"config" => {
let config_cmd = if ($args | length) > 0 { $args | get 0 } else { "show" }
match $config_cmd {
"show" => {
print ""
let config = (get-cache-config)
let cache_base = (($env.HOME? | default "~" | path expand) | path join ".provisioning" "cache" "config")
print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
print "📋 Cache Configuration"
print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
print ""
print "▸ Core Settings:"
let enabled = ($config | get --optional enabled | default true)
print (" Enabled: " + ($enabled | into string))
print ""
print "▸ Cache Location:"
print (" Base Path: " + $cache_base)
print ""
print "▸ Time-To-Live (TTL) Settings:"
let ttl_final = ($config | get --optional ttl_final_config | default "300")
let ttl_nickel = ($config | get --optional ttl_nickel | default "1800")
let ttl_sops = ($config | get --optional ttl_sops | default "900")
print (" Final Config: " + ($ttl_final | into string) + "s (5 minutes)")
print (" Nickel Compilation: " + ($ttl_nickel | into string) + "s (30 minutes)")
print (" SOPS Decryption: " + ($ttl_sops | into string) + "s (15 minutes)")
print " Provider Config: 600s (10 minutes)"
print " Platform Config: 600s (10 minutes)"
print ""
print "▸ Security Settings:"
print " SOPS File Permissions: 0600 (owner read-only)"
print " SOPS Directory Permissions: 0700 (owner access only)"
print ""
print "▸ Validation Settings:"
print " Strict mtime Checking: true (validates all source files)"
print ""
print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
print ""
}
"get" => {
if ($args | length) > 1 {
let setting = $args | get 1
let value = (cache-config-get $setting)
if $value != null {
print $"($setting) = ($value)"
} else {
print $"Setting not found: ($setting)"
}
} else {
print "❌ cache config get requires a setting path"
print "Usage: provisioning cache config get <path>"
exit 1
}
}
"set" => {
if ($args | length) > 2 {
let setting = $args | get 1
let value = ($args | skip 2 | str join " ")
cache-config-set $setting $value
print $"✓ Set ($setting) = ($value)"
} else {
print "❌ cache config set requires setting path and value"
print "Usage: provisioning cache config set <path> <value>"
exit 1
}
}
_ => {
print $"❌ Unknown cache config subcommand: ($config_cmd)"
print ""
print "Available cache config subcommands:"
print " show - Show all cache configuration"
print " get <setting> - Get specific cache setting"
print " set <key> <val> - Set cache setting"
print ""
print "Available settings for get/set:"
print " enabled - Cache enabled (true/false)"
print " ttl_final_config - TTL for final config (seconds)"
print " ttl_nickel - TTL for Nickel compilation (seconds)"
print " ttl_sops - TTL for SOPS decryption (seconds)"
print ""
print "Examples:"
print " provisioning cache config show"
print " provisioning cache config get ttl_final_config"
print " provisioning cache config set ttl_final_config 600"
exit 1
}
}
}
"clear" => {
let cache_type = if ($args | length) > 0 { $args | get 0 } else { "all" }
cache-clear $cache_type
print $"✓ Cleared cache: ($cache_type)"
}
"list" => {
let cache_type = if ($args | length) > 0 { $args | get 0 } else { "*" }
let items = (cache-list $cache_type)
if ($items | length) > 0 {
print $"Cache items \(type: ($cache_type)\):"
$items | each { |item| print $" ($item)" }
} else {
print "No cache items found"
}
}
"help" => {
print "
Cache Management Commands:
provisioning cache status # Show cache status and statistics
provisioning cache config show # Show cache configuration
provisioning cache config get <setting> # Get specific cache setting
provisioning cache config set <setting> <val> # Set cache setting
provisioning cache clear [type] # Clear cache (default: all)
provisioning cache list [type] # List cached items (default: all)
provisioning cache help # Show this help message
Available settings (for get/set):
enabled - Cache enabled (true/false)
ttl_final_config - TTL for final config (seconds)
ttl_nickel - TTL for Nickel compilation (seconds)
ttl_sops - TTL for SOPS decryption (seconds)
Examples:
provisioning cache status
provisioning cache config get ttl_final_config
provisioning cache config set ttl_final_config 600
provisioning cache config set enabled false
provisioning cache clear nickel
provisioning cache list
"
}
_ => {
print $"❌ Unknown cache command: ($subcommand)"
print ""
print "Available cache commands:"
print " status - Show cache status and statistics"
print " config show - Show cache configuration"
print " config get <key> - Get specific cache setting"
print " config set <k> <v> - Set cache setting"
print " clear [type] - Clear cache (all, nickel, sops, final)"
print " list [type] - List cached items"
print " help - Show this help message"
print ""
print "Examples:"
print " provisioning cache status"
print " provisioning cache config get ttl_final_config"
print " provisioning cache config set ttl_final_config 600"
print " provisioning cache clear nickel"
exit 1
}
}
}