使用fabric部署和管理propertyshelf mls应用程序。
mls.fabfile的Python项目详细描述
mls.fabfile文件
这个项目包含我们在Propertyshelf使用的一组fabric命令 部署和维护我们的MLS系统。
要求
mls.fabfile当前使用knife与机架空间服务器通信。 请确保在您的 系统。
安装
您可以使用PIP安装mls.fabfile:
pip install mls.fabfile
将自动安装所有必需的依赖项。
使用量
首先,我们需要一个工作的刀.rb文件来与我们的厨师服务器和 货架空间云生态系统。下面是一个示例 它所需的所有环境变量信息。这样你就可以添加这个 刀.rb文件位于.chef目录中,保存到项目中 在版本控制下:
# Logging. log_level :info log_location STDOUT # Chef server configuration. chef_server_url "#{ENV['KNIFE_CHEF_SERVER']}" client_key "#{ENV['KNIFE_CLIENT_KEY']}" node_name "#{ENV['KNIFE_NODE_NAME']}" validation_client_name "#{ENV['KNIFE_VALIDATION_CLIENT_NAME']}" validation_key "#{ENV['KNIFE_VALIDATION_CLIENT_KEY']}" encrypted_data_bag_secret "#{ENV['ENCRYPTED_DATA_BAG_SECRET_FILE']}" # Rackspace API configuration. knife[:rackspace_api_key] = "#{ENV['RACKSPACE_API_KEY']}" knife[:rackspace_api_username] = "#{ENV['RACKSPACE_USERNAME']}" knife[:rackspace_endpoint] = "#{ENV['RACKSPACE_ENDPOINT']}" knife[:rackspace_version] = "#{ENV['RACKSPACE_VERSION']}"
接下来,我们需要一个fabfile.py。我们只需要导入mls.fabfile 为了使fabric命令和可用的环境可用,我们可以 使用frompropertyshelf.fabfile.common:
# -*- coding: utf-8 -*- """Sample MLS deployment script.""" from fabric import api from mls.fabfile import * from propertyshelf.fabfile.common.environments import * # Definition of role names to be used. api.env.role_database = 'mls_db' api.env.role_frontend = 'mls_fe' api.env.role_staging = 'mls_staging' api.env.role_worker = 'mls_app' # Definition of used Rackspace flavors (server sized) for our servers. api.env.flavor_database = '5' api.env.flavor_frontend = '2' api.env.flavor_staging = '2' api.env.flavor_worker = '3' # Definition of node names to be used. api.env.nodename_database = 'mls-db' api.env.nodename_frontend = 'mls-fe' api.env.nodename_staging = 'mls-staging' api.env.nodename_worker = 'mls-app' # The Rackspace server image we use. This is a Debian 6.0.6. api.env.os_image = '92a28e50-181d-4fc7-a071-567d26fc95f6' # MLS specific configuration. api.env.domain = 'mls-example.com' api.env.mls_customizations = ['mlsext.realtorcom', ] api.env.mls_policy_enabled = True api.env.mls_policy_package = 'mlspolicy.example' api.env.mls_policy_package_url = 'git https://github.com/yourname/mlspolicy.example'
现在,您可以使用fabric管理您的MLS:
$ fab -l Sample MLS deployment script. Available commands: development Work locally with vagrant. production Work with the production environment. staging Work with the staging environment. bootstrap.bundle_db_fe_app Bootstrap a new MLS bundle: Database, Frontend, App Worker. bootstrap.database Bootstrap a new standalone database server. bootstrap.frontend Bootstrap a new standalone frontend server. bootstrap.staging Bootstrap a staging system. bootstrap.worker Bootstrap a new standalone application worker. client.remove Remove an existing MLS application client. client.restart Restart the application client component. client.update Update the client packages. database.backup Perform a backup of Zope's data on the server. database.download_blobs Download blob part of Zope's data from the server. database.download_data Download the database files from the server. database.download_zodb Download ZODB part of Zope's data from the server. database.restart Restart the database component. database.restore Restore an existing backup of Zope's data on the server. database.upload_blob Upload blob part of Zope's data to the server. database.upload_data Upload the database files to the server. database.upload_zodb Upload ZODB part of Zope's data to the server. frontend.restart Restart the frontend components. frontend.restart_haproxy Restart the HA-Proxy load balancer component. frontend.restart_nginx Restart the NginX web server component. frontend.restart_varnish Restart the Varnish caching proxy component. roles.check Check if the required roles are available. roles.create_missing Create missing roles on the chef server.
在我们开始之前,最好检查一下我们定义的所有角色是否 厨师服务器上提供:
$ fab roles.check Role mls_fe NOT available. Role mls_db NOT available. Role mls_staging NOT available. Role mls_app NOT available. Done.
要根据我们的配置创建缺少的角色,我们只需执行以下操作:
$ fab roles.create_missing Created role mls_db Created role mls_fe Created role mls_app Created role mls_staging Done.
现在我们可以创建登台系统:
$ fab bootstrap.staging [localhost] local: knife rackspace server create -S mls-staging -N mls-staging -f 5 -I 92a28e50-181d-4fc7-a071-567d26fc95f6 -r role[rackspace],role[mls_staging] -E staging ... Done.
请注意,只能有一个登台系统。如果你想再加一个 使用相同的名称,您将收到一条错误消息:
$ fab bootstrap.staging Fatal error: Server "mls-staging" already exists in environment "staging". Aborting.
如果需要第二个节点,可以手动调整节点名称:
$ fab bootstrap.staging:nodename=mls-staging2 [localhost] local: knife rackspace server create -S mls-staging2 -N mls-staging2 -f 5 -I 92a28e50-181d-4fc7-a071-567d26fc95f6 -r role[rackspace],role[mls_ni_staging] -E staging ... Done.
现在您可以管理单个组件:
$ fab staging frontend.restart [x.x.x.x] Executing task 'frontend.restart' [x.x.x.x] sudo: /etc/init.d/haproxy restart [x.x.x.x] out: sudo password: [x.x.x.x] out: Restarting haproxy: haproxy. [x.x.x.x] out: [x.x.x.x] sudo: /etc/init.d/varnish restart [x.x.x.x] out: sudo password: [x.x.x.x] out: Stopping HTTP accelerator: varnishd. [x.x.x.x] out: Starting HTTP accelerator: varnishd. [x.x.x.x] out: [x.x.x.x] sudo: /etc/init.d/nginx restart [x.x.x.x] out: sudo password: [x.x.x.x] out: Restarting nginx: nginx. [x.x.x.x] out: Done. Disconnecting from x.x.x.x... done.
我们还支持下载用于本地测试的数据库文件:
$ fab production database.download_data [x.x.x.x] Executing task 'database.download_data' This will overwrite your local Data.fs. Are you sure you want to continue? [Y/n] [localhost] local: mkdir -p var/filestorage [localhost] local: mv var/filestorage/Data.fs var/filestorage/Data.fs.bak [x.x.x.x] out: sudo password: [x.x.x.x] sudo: rsync -a var/filestorage/Data.fs /tmp/Data.fs [x.x.x.x] out: sudo password: [x.x.x.x] out: [x.x.x.x] download: /Volumes/Work/Propertyshelf/MLS/Provisioning/var/filestorage/Data.fs <- /tmp/Data.fs This will overwrite your local blob files. Are you sure you want to continue? [Y/n] [localhost] local: rm -rf var/blobstorage_bak [localhost] local: mv var/blobstorage var/blobstorage_bak [x.x.x.x] sudo: rsync -a ./var/blobstorage /tmp/ [x.x.x.x] out: sudo password: [x.x.x.x] out: [x.x.x.x] sudo: tar czf blobstorage.tgz blobstorage [x.x.x.x] out: sudo password: [x.x.x.x] out: [x.x.x.x] download: /Volumes/Work/Propertyshelf/MLS/Provisioning/var/blobstorage.tgz <- /tmp/blobstorage.tgz Warning: Local file /Volumes/Work/Propertyshelf/MLS/Provisioning/var/blobstorage.tgz already exists and is being overwritten. [localhost] local: tar xzf blobstorage.tgz Done. Disconnecting from x.x.x.x... done.
一旦我们有了本地数据文件,我们就可以将它们上传到我们的开发环境中 (流浪者虚拟机):
$ fab development database.upload_data client.restart [localhost] local: vagrant ssh-config | grep IdentityFile [127.0.0.1:2222] Executing task 'database.upload_data' This will overwrite your remote Data.fs. Are you sure you want to continue? [y/N] y [127.0.0.1:2222] sudo: mkdir -p /tmp/upload [127.0.0.1:2222] put: var/filestorage/Data.fs -> /tmp/upload/Data.fs [127.0.0.1:2222] sudo: chown mls /tmp/upload/Data.fs [127.0.0.1:2222] sudo: supervisorctl stop zeoserver [127.0.0.1:2222] out: zeoserver: stopped [127.0.0.1:2222] out: [127.0.0.1:2222] sudo: mv var/filestorage/Data.fs var/filestorage/Data.fs.bak [127.0.0.1:2222] sudo: mv /tmp/upload/Data.fs var/filestorage/Data.fs This will overwrite your remote blob files. Are you sure you want to continue? [y/N] y [127.0.0.1:2222] sudo: mkdir -p /tmp/upload [localhost] local: tar czf blobstorage_upload.tgz blobstorage [127.0.0.1:2222] put: var/blobstorage_upload.tgz -> /tmp/upload/blobstorage.tgz [127.0.0.1:2222] sudo: chown mls /tmp/upload/blobstorage.tgz [127.0.0.1:2222] sudo: tar xzf blobstorage.tgz [127.0.0.1:2222] sudo: supervisorctl stop zeoserver [127.0.0.1:2222] out: zeoserver: ERROR (not running) [127.0.0.1:2222] out: [127.0.0.1:2222] sudo: mv var/blobstorage var/blobstorage_bak [127.0.0.1:2222] sudo: mv /tmp/upload/blobstorage var [127.0.0.1:2222] sudo: supervisorctl start zeoserver [127.0.0.1:2222] out: zeoserver: started [127.0.0.1:2222] out: [127.0.0.1:2222] Executing task 'client.restart' [127.0.0.1:2222] sudo: supervisorctl restart application [127.0.0.1:2222] out: application: stopped [127.0.0.1:2222] out: application: started [127.0.0.1:2222] out: Done. Disconnecting from 127.0.0.1:2222... done.
我们还可以获取已定义角色的节点列表:
$ fab roles.list_nodes Role: mls_fe - mls-fe: x.x.x.x Role: mls_db - mls-db: x.x.x.x Role: mls_staging - mls-staging: x.x.x.x - vagrant-mls-staging: 10.0.2.15 Role: mls_app - mls-app-01: x.x.x.x Done.
如果我们只想为给定的节点执行任务,这可能很有用:
$ fab frontend.restart_nginx:hosts=x.x.x.x [x.x.x.x] Executing task 'frontend.restart_nginx' [x.x.x.x] sudo: /etc/init.d/nginx restart [x.x.x.x] out: sudo password: [x.x.x.x] out: Restarting nginx: nginx. [x.x.x.x] out: Done. Disconnecting from x.x.x.x... done.
贡献者
Thomas Massmann,作者
变更日志
0.4(2014-04-10)
- 为数据库角色添加了快照备份选项
- 更新维护客户端的能力。
0.3(2013-12-21)
- 将常用功能移动到propertyshelf.fabfile.common。
- 新任务:重建客户端,列出角色的节点。
0.2(2013-11-19)
- 为开发环境设置自定义主机名,以便厨师搜索工作。
- 已启用数据上载(data.fs和blob)。
0.1.1(2013-11-19)
- 添加了丢失的文件。
0.1(2013-11-19)
- 与开发、准备和生产环境一起工作
- 检查厨师角色并从配置中创建缺少的角色。
- 引导mls系统。
- 如果不再需要,请删除MLS客户端。
- 管理数据库、前端和辅助组件。
- 更新客户端构建包
- 下载用于本地测试的数据库文件。