From d9af8bac5eb7836a3c90e37e870fd73d30b841fd Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 29 Mar 2014 23:10:52 -0400 Subject: initial check-in too young to have a name --- README | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 README (limited to 'README') diff --git a/README b/README new file mode 100644 index 00000000..66b2f3d0 --- /dev/null +++ b/README @@ -0,0 +1,26 @@ +This is a work in progress configuration management system using Haskell +and Git. + +The design is intentionally very bare bones: A git repository holds the +source to a program that ensures that the system meets a set of properties, +taking action as necessary when a property is not yet met. + +Once set up, a system will have this git repository cloned to it, and +the program will be built and run periodically by a cron job. Or something +can ssh in and run it. + +For bootstrapping, the program compiles to a single binary file, +which can be transferred to a host and run. + +Properties are defined using Haskell. There is no special language as used +in puppet, chef, ansible, etc, just the full power of Haskell. Hopefully +that power can be put to good use in making declarative properties that are +powerful, nicely idempotent, and easy to adapt to a system's special needs. + +Also avoided is any form of node classification. Ie, which hosts are part +of which classes and share which configuration. It might be nice to use +reclass[1], but then again a host is configured using simply haskell code, +and it should be easy to factor out things like classes of hosts in an +ad-hoc fashion. + +[1] http://reclass.pantsfullofunix.net/ -- cgit v1.3-2-g0d8e