Saltstack is a configuration management and orchestration tool with solid remote execution framework. Salt is written in Python and leverages ZeroMQ messaging library, which allows users to run tasks simultaneously with satisfying performance.
Saltstack architecture is very flexible, it provides master-client (master-minion), master-less or ssh slaves setup. There are basically three options to interact with Salt master:
Saltstack provides plethora of modules running on almost all operating systems.
Clojure is well known programming language. Although the main reason why I have chosen Clojure is Clojure itself ;), it has several interesting properties that suite this project well.
With Clojure dynamic nature and very good data structures, clj-salt-api supports almost all Salt modules. clj-salt-api sends requests to Salt as data (Clojure maps) and returns data back. This approach is heavily inspired by aws-api. It makes API very simple and there are no differences to Saltstack API. Therefore user of clj-salt-api can benefit from Saltstack official documentation and this library has minimal compatibility issues with different Saltstack versions.
Salstack provides both synchronous and asynchronous API. clj-salt-api aims to support both approaches and Clojure asynchronous/multi-threading solutions can ensure clean design.