跳转到主要内容

使用Fabric和Puppet优雅部署。

项目描述

Loom
====
[![构建状态](https://travis-ci.org/bfirsh/loom.png?branch=master)](https://travis-ci.org/bfirsh/loom)

使用Fabric和Puppet进行优雅部署。

Loom做了Puppet做得不好或根本不做的那些事情:启动机器、赋予它们角色、部署Puppet代码和安装可重用Puppet模块。它适用于无服务器和主/代理Puppet安装。

它还包括一些用于构建和上传应用程序代码的Fabric任务——这是使用Puppet特别复杂的事情。

安装
-------

$ sudo pip install loom

入门
---------------

首先,您创建`fabfile.py`并定义您的宿主

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

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

然后您可以在名为`Puppetfile`的文件中定义您想要的任何第三方Puppet模块

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

(这是为[librarian-puppet](http://librarian-puppet.com/),一个用于安装可重用Puppet模块的工具。它还可以从Git等安装。)

您的模块放在与`fabfile.py`相同的目录中的`modules/`目录中。角色在名为`roles`的神奇模块中定义,该模块包含每个角色的清单。(如果您之前使用过Puppet,这将替代`node`定义。)

例如,`modules/roles/manifests/db.pp`定义了db角色的内容

class roles::db {
include mysql
...等等
}

就这样了!

让我们设置一个数据库服务器。首先,初始化主机(在这个例子中,是您在 `env.roledefs` 中定义的单个 db 主机)

$ fab -R db puppet.install

然后安装第三方 Puppet 模块,上传您本地的模块,并应用它们

$ fab -R db puppet.update puppet.apply

每次您对模块进行更改时,都可以运行此命令来应用它们。因为这只是 Fabric,您也可以在 `fabfile.py` 中编写一个任务来完成

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

然后您可以使用包含的 "all" 任务来更新所有主机上的 Puppet

$ fab all deploy_puppet

应用
----

Loom 包含了一系列 Fabric 任务,用于构建和上传代码。它假设您已为应用(例如,“web”)设置了一个角色,并且该角色包含您需要的所有软件包和一个 Upstart 初始化脚本以启动应用。

Loom 中的应用配置使用 `env.apps`。它是一个字典,其中的键是应用名称,值是一个包含以下键的字典

- **repo**(必需):包含您应用的 Git 网址。
- **role**(必需):应用将要上传到的角色。
- **build**:上传前在本地运行的脚本(例如,构建静态资源或安装本地依赖项)。
- **post-upload**:上传后在每个服务器上运行的脚本。
- **init**:上传后启动/重启的 Upstart 脚本名称。

您还必须使用 `env.app_root` 定义应用所在的目录。

例如,假设这是您的 `fabfile.py`

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

env.user = 'root'
env.environment = 'prod'
env.roledefs = {
'web': ['prod-web-1.example.com', 'prod-web-2.example.com'],
'db': ['prod-db-1.example.com'],
}
env.app_root = '/home/ubuntu'
env.apps['web'] = {
"repo": "https://user:pass@github.com/mycompany/mycompany-web.git",
"role": "web",
"build": "script/build",
"init": "web",
}

您还需要一个 `modules/roles/manifests/web.pp` 文件,该文件设置 `/etc/init/web.conf` 以在 `/home/ubuntu/web` 中运行您的应用。

要部署您的应用,运行

$ fab app.deploy:web

这将

1. 在本地拉取您的 GitHub 仓库。
2. 运行 `script/build`。
3. 将您的代码上传到 `prod-app-1.example.com` 和 `prod-app-2.example.com` 上的 `/home/ubuntu/web`。
4. 运行 `sudo restart web`。


操作系统支持
----------

它仅在 Ubuntu 12.04 上进行了测试。我希望支持更多东西。请发送补丁!

API
---

现在查看源代码。它都是 Fabric 任务,而且它们很容易阅读。(抱歉。)

运行测试
-----------------

$ pip install -r dev-requirements.txt
$ script/test

贡献者
------------
* [Ben Firshman](https://fir.sh)
* [Andreas Jansson](http://andreas.jansson.me.uk/)
* [Steffen L. Norgren](http://github.com/xironix)
* [Spencer Herzberg](https://github.com/sherzberg)

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

loom-0.0.18.tar.gz (10.7 kB 查看哈希值)

上传于 来源