Chameleon is a configuration management library. It allows us to define a bunch of options and their values for different profiles. After that, you can switch between profiles.
It works like that:
POFTHEDAY> (chameleon:defconfig
(port 8000 "Port to listen on")
(log-level :info "The log level for log4cl"))
POFTHEDAY> (chameleon:defprofile :dev)
POFTHEDAY> (chameleon:defprofile :production
(port 80)
(log-level :warn))
POFTHEDAY> (setf (active-profile) :production)
:PRODUCTION
POFTHEDAY> (port)
80
POFTHEDAY> (log-level)
:WARN
POFTHEDAY> (active-profile)
:PRODUCTION
;; Now switching to development mode:
POFTHEDAY> (setf (active-profile) :dev)
:DEV
POFTHEDAY> (port)
8000
POFTHEDAY> (log-level)
:INFO
I’ve investigated the chameleon's
code and think it can be made better and
simpler using CLOS
instances for profiles instead of hash maps.
If you know other Lisp systems for configuration management, please, let me know.