Skip to content

Latest commit

 

History

History
56 lines (41 loc) · 1.14 KB

0127-chameleon.org

File metadata and controls

56 lines (41 loc) · 1.14 KB

chameleon

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.