# 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 " 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 " exit 1 } } _ => { print $"❌ Unknown cache config subcommand: ($config_cmd)" print "" print "Available cache config subcommands:" print " show - Show all cache configuration" print " get - Get specific cache setting" print " set - 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 # Get specific cache setting provisioning cache config set # 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 - Get specific cache setting" print " config set - 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 } } }