readme.md

Simple Cluster Management Tool

It may be usefull if Your claster has about 1-10 boxes, and tools like Chef, Puppet, Capistrano are too complex and proprietary for Your needs.
It's very easy, there are only a 3 concept - Box, Cluster and Service.

Core Concepts

Box - a PC with remote access.

Service - some abstract thing (a package, running process, app, ...) that operates on 1..n boxes. It can perform install/update/start/stop/.. operations and request other services to perform things it needs.

Deployment Scheme - defines how services are distributed among boxes.

Deployment Scheme

Let's suppose that we want to deploy our App on a cluster of 3 boxes using the following scheme. Tags are used to define connections (N to M, althouth in example below it's 1 to 1) between Boxes and Services.

Boxes

Services

Dependencies are defined by calling another services, it's easy to use and understand and allows high flexibility in configuration.

And, it's 'smart', in sample below the App::deploy method is smart ennought to figure out that it needs the Ruby and MySQL Services and it will call for them to apply before itself.

You can specify that the package should be applied only once (see :apply_once), and use versioning (see :version) - change the version and it will be reapplied.

It supports iterative development and can figure out what services are missing and needs to be applied, You don't have to write all the config at once, do it by small steps, adding one package after another.

Rake

Note: You don't have install services before deployment, the App::deploy will resolve all dependencies automatically and fully configure all boxes from clean state - it will install packages, ensure all needed services are running and only then will start deployment.

Installation

Examples

$ bundle install
$ vagrant init # and wait for the image to be downloaded
$ vagrant up # this will power on the VM
$ rake deploy
installing :ruby to 10.11.12.13
deleting old version
building
configuring
updating environment
installing :app
updating :app
deploying :app