skip to navigation
skip to content

Not Logged In

loom 0.0.7

Elegant deployment with Fabric and Puppet.

Latest Version: 0.0.17

Loom
====

Elegant deployment with [Fabric](http://fabfile.org) and Puppet.

Loom does the stuff Puppet doesn't do well or at all: bootstrapping machines, giving them roles, deploying Puppet code and installing reusable Puppet modules. It's useful for both serverless and master/agent Puppet installations.

Install
-------

    $ sudo pip install loom

Getting started
---------------

First of all, you create `fabfile.py` and define your hosts:

    from fabric.api import *
    from loom import puppet
    from loom.tasks import *

    env.user = 'root'
    env.environment = 'prod'
    env.roledefs = {
        'app': ['prod-app-1.example.com', 'prod-app-2.example.com'],
        'db': ['prod-db-1.example.com'],
    }

You can then define any third-party Puppet modules you want in a file called `Puppetfile`:

    forge "http://forge.puppetlabs.com"
    mod "puppetlabs/nodejs"
    mod "puppetlabs/mysql"

(This is for [librarian-puppet](http://librarian-puppet.com/), a tool for installing reusable Puppet modules. It can also install from Git, etc.)

Your own modules are put in a directory called `modules/` in the same directory as `fabfile.py`. Roles are defined in a magic module called `roles` which contains manifests for each role. (If you've used Puppet before, this is a replacement for `node` definitions.)

For example, `modules/roles/manifests/db.pp` defines what the db role is:

    class roles::db {
      include mysql
      # ... etc
    }

And that's it!

Let's set up a database server. First, bootstrap the host (in this example, the single db host you defined in `env.roledefs`):

    $ fab -R db puppet.install

Then install third party Puppet modules, upload your local modules, and apply them:

    $ fab -R db puppet.update puppet.apply

Every time you make a change to your modules, you can run that command to apply them. Because this is just Fabric, you can write a task in `fabfile.py` to do it too:

    @task
    def deploy_puppet():
        execute(puppet.update)
        execute(puppet.apply)

Then you could use the included "all" task to update Puppet on all your hosts:

    $ fab all deploy_puppet


OS support
----------

It's only been tested on Ubuntu 12.04. I would like to support more things. Send patches!

API
---

Look at the source for now. It's all Fabric tasks, and they're pretty easy to read. (Sorry.)

Contributors
------------
 * [Ben Firshman](https://fir.sh)
 * [Andreas Jansson](http://andreas.jansson.me.uk/)
 * [Steffen L. Norgren](http://github.com/xironix)
 
File Type Py Version Uploaded on Size
loom-0.0.7.tar.gz (md5) Source 2012-11-07 8KB
  • Downloads (All Versions):
  • 17 downloads in the last day
  • 274 downloads in the last week
  • 1136 downloads in the last month