Configi

A minimalistic infrastructure automation and configuration management software. It is MIT licensed (including the core modules).

Configi can manage several aspects of system configuration, compliance and maintenance. Note that this will depend on the availability of Configi modules available for your requirement.

Configi is Linux only at the moment but variants of BSD and macOS support is possible but no plans yet.

See Wikipedia for more information on the topic of configuration management.


Why?

There are more mature configuration management software available right now but I find most are bloated both in resource usage and features. The others in the minimalist camp also fall short due to complicated policy writing and poor extensibility.

Configi was inspired by CFEngine 3, Chef and Ansible. You may see some similarities with these configuration management software in Configi. Especially CFEngine 3, where we borrowed identifiers and concepts introduced by the Promise Theory and Computer Immunology.

Visit M. Burgess' page for essays, articles and papers regarding Promise Theory and system administration. I do not claim full compliance to the theory so Configi should not be considered a complete replacement for CFEngine 3.

Choosing the right tool is not a rational matter. If the design decisions outlined below aligns with your requirements then please give Configi a try.


Design decisions

Compiled-in modules and policy
 The Configi executable (cfg-agent) with all modules (as of 0.9.0) compiled-in is around 500KiB. In practice this should be less because Configi modules are compiled-in. You can choose the modules only applicable for your policy or host. It's also possible to have your policy built-in during compilation of the executable.

Minimal DSL for writing policies
 Markup languages are getting more popular for this use case but they are more of a hindrance. Configi has a proper programming language so there is little to no DSL semantics to struggle with.

Pull or push model
 The ideal system would be a pull-based system but if needed Configi can also emulate a push-based system.

No packaging required
 You can just copy the Configi (cfg-agent) executable to a host and have it configuring the host in no time.

Minimal resource usage
 Being built in Lua and C allows for minimal resources used, both and disk space, CPU and memory.

Depend on existing host tooling
 As much as possible Configi makes use of host tools (e.g coreutils, busybox, native package manager, native process manager). If bypassing host tooling is required or there is none available, Configi modules has the capability to drop down to Lua and/or C for operations or execution.

The only reporting mechanism is through syslog
 To be light as possible, it makes sense to support the most widespread reporting facility. If you need to monitor or gather reports from all your hosts you will need to set up consolidated remote syslogging and automated reporting.


Example policy

    file.directory"/tmp/dir"{
      comment = "Create directory if running on Gentoo",
      context = fact.osfamily.gentoo,
         mode = 0700,
       notify = "touch"
    }

    yum.present"mtr"{
      context = fact.osfamily.centos
    }

    file.absent"/tmp/dir"{
      notify = "touch"
    }

    file.touch"/tmp/dir"{
      comment = "Handle 'touch' notifications. This is only executed once.",
       handle = "touch"
    }

Policies are written in Lua

Lua is a simple and lightweight multi-paradigm dynamically typed programming language. It allows for imperative and functional programming. With a properly specified language we can avoid problems brought upon by ad-hoc implementations of a DSL.

It is a very suitable scripting language for configuration management. The language' features lend to simple core and module code. It's not a batteries-included scripting language so some binding and module writing is necessary.

The following learning resources for Lua should get you going:
Learn Lua in 15 minutes
Lua Glossary
Gentle introduction to Lua


FAQ

1) Why not LuaJIT?

LuaJIT and its FFI is amazing but Configi does not need the speed that it provides. Most of the execution time in Configi will be spent by exec(3).

Since the Configi core is small and simple it wouldn't be too hard to port it to LuaJIT. Right now, I just value the simplicity of PUC Lua.

2) Will you support my chosen Linux distro?

Submit a Github issue or request in the mailing list.

Also check the associated Github Projects page to see if support is already planned.
configi/projects


Mailing list

Join the mailing list if you need help or have Configi module requests. Bug reports and patches are also very much welcome.

To join, send an email to configi-request@freelists.org with 'subscribe' in the Subject field OR by visiting the list page at Freelists/Configi.