grokking simplicity and refactoring
This commit is contained in:
parent
89a7fe100d
commit
fb4361d938
67 changed files with 6275 additions and 56 deletions
69
packages/lab-tool/utils/config/state.scm
Normal file
69
packages/lab-tool/utils/config/state.scm
Normal file
|
@ -0,0 +1,69 @@
|
|||
;; utils/config/state.scm - Configuration state management
|
||||
|
||||
(define-module (utils config state)
|
||||
#:use-module (utils config defaults)
|
||||
#:use-module (utils config loader)
|
||||
#:use-module (utils config accessor)
|
||||
#:use-module (utils logging)
|
||||
#:export (get-current-config
|
||||
set-current-config!
|
||||
reload-config!
|
||||
get-config-value
|
||||
get-machine-config
|
||||
get-all-machines
|
||||
get-ssh-config
|
||||
validate-machine-name
|
||||
get-homelab-root))
|
||||
|
||||
;; Mutable state: Current loaded configuration
|
||||
(define current-config default-config)
|
||||
|
||||
;; Impure function: Get current configuration
|
||||
(define (get-current-config)
|
||||
"Get current loaded configuration"
|
||||
current-config)
|
||||
|
||||
;; Impure function: Set current configuration
|
||||
(define (set-current-config! config)
|
||||
"Set current configuration (impure)"
|
||||
(set! current-config config))
|
||||
|
||||
;; Impure function: Reload configuration from file
|
||||
(define (reload-config! . args)
|
||||
"Reload configuration from file"
|
||||
(let ((new-config (apply load-config args)))
|
||||
(set-current-config! new-config)
|
||||
new-config))
|
||||
|
||||
;; Impure wrappers for pure accessor functions
|
||||
(define (get-config-value path . default)
|
||||
"Get configuration value from current config"
|
||||
(apply get-config-value-pure current-config path default))
|
||||
|
||||
(define (get-machine-config machine-name)
|
||||
"Get machine configuration from current config"
|
||||
(get-machine-config-pure current-config machine-name))
|
||||
|
||||
(define (get-all-machines)
|
||||
"Get all machine names from current config"
|
||||
(get-all-machines-pure current-config))
|
||||
|
||||
(define (get-ssh-config machine-name)
|
||||
"Get SSH configuration from current config"
|
||||
(get-ssh-config-pure current-config machine-name))
|
||||
|
||||
(define (validate-machine-name machine-name)
|
||||
"Validate machine name against current config"
|
||||
(if (validate-machine-name-pure current-config machine-name)
|
||||
#t
|
||||
(begin
|
||||
(log-error "Unknown machine: ~a" machine-name)
|
||||
(log-error "Available machines: ~a" (string-join (get-all-machines) ", "))
|
||||
#f)))
|
||||
|
||||
(define (get-homelab-root)
|
||||
"Get home lab root directory from current config"
|
||||
(get-config-value '(homelab-root) "/home/geir/Home-lab"))
|
||||
|
||||
;; Initialize configuration on module load
|
||||
(reload-config!)
|
Loading…
Add table
Add a link
Reference in a new issue