TELE(1)

NAME

paratele -- Provisioning at a distance.

SYNOPSIS

paratele [-h] [-d path] (init|run)

DESCRIPTION

Tele is a small provisioning framework that allows you to run bash
scripts on remote servers over SSH. It uses your own SSH, not a Ruby
version, so you can profit from your settings and public/private keys.

It uses the following directory structure to store the recipes and
configuration files:

    .tele/layout.json
    .tele/ssh_config
    .tele/recipes/redis/status.sh
    .tele/recipes/redis/install.sh
    .tele/recipes/unicorn/status.sh
    .tele/recipes/unicorn/install.sh

In the example, there are recipes for Redis and Unicorn. Please note that you are in
charge of creating them.

layout.json
    The server layout, with the available roles and servers. Example:

    {
      "servers": {
        "app-1": ["redis"],
        "app-2": ["ruby", "unicorn"],
        "app-3": ["ruby", "resque"]
      }
    }

    The key "servers" stores a map of servers to roles. The keys can be
    either hostnames declared in .tele/ssh_config or IP addresses.

ssh_config
    Configuration file for the SSH connection. Check the SSH_CONFIG man
    page for more information.

The following options are available:

-h
    Display this help message.

-d path
    Sets path as the directory where tele will search for scripts and
    configuration files. You can also use the environment variable
    TELE_HOME.

-v
    Print output from servers for all roles, whether they succeed or
    not. The default is to print output from servers only if a recipe
    fails.

-q
    Don't print output from servers locally.

init
    Copies a .tele template to the current directory.

run command
    Runs every <recipe>/<command>.sh script on the servers declared
    in layout.json, in the specified order. The scripts must have an
    exit status of 0 on success, otherwise it will be counted as failed.
    If a recipe fails, no more recipes for that server will be executed.

USAGE

To provision two servers called `server1` and `server2` with Redis,
starting from scratch:

    # Create the .tele directory.
    $ tele init

    # Create directories for the recipes.
    $ mkdir -p .tele/recipes/redis

    # Create install.sh script (ommited).

    # Edit .tele/layout.json as follows:

      {
        "servers": {
          "server1": ["redis"],
          "server2": ["redis"]
        }
      }

    # Edit .tele/ssh_config:

      Host server1
        Hostname 10.0.0.1

      Host server2
        Hostname 10.0.0.2

    # Run the install script for all recipes
    $ paratele run install

    # Run the deploy script for certain servers
    $ paratele run deploy web1,db1

INSTALLATION

$ gem install paratele