使用Fabric和Puppet优雅部署。
项目描述
Loom
====
[](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)
====
[](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)