fabric でデプロイ&システム設定

fabricでデプロイ

http://docs.fabfile.org/en/1.5/

関係ないけど、スクリプトをpythonで書く方針にしたので fabricを使ってみます。

python 2.6.6

Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.

と書いてあるので、現在シェルで書いてある部分の設定などもfabricにしてしまおうと思います。

インストール http://docs.fabfile.org/en/1.5/installation.html

$ sudo pip-python install fabric
Successfully installed fabric paramiko pycrypto
Cleaning up…

warningいっぱい出たけど・・・

チュートリアル http://docs.fabfile.org/en/1.5/tutorial.html

fabfile.py

def hello():
 print(“hello world”)
$ fab hello
hello world

Done.

helloが呼ばれたようです。タスクに引数を付ける方法もそのままで

def hello(name=”world”):
   print(“Hello %s!” % name)

実行

$ fab hello:name=Jack
Hello Jack!

Done.


local()の使い方
Failer Handling

Making connections
deploy()は、各サーバーで実行されると
run()はlocal()に似てるけど、リモートサーバーで実行されている。
conclusionのまとめで基本動作。
env.hostsにdeployされる感じ。

ディレクトリ作ってみる

fabfile.pyを以下の内容にしてみる

from fabric.api import *
from fabric.contrib.console import confirm

env.hosts = ['192.168.0.21']

def deploy():
 code_dir = ‘/tmp/test_fabric’
 with settings(warn_only=True):
   if run(“test -d %s” % code_dir).failed:
     run(“mkdir -p %s” % code_dir)
 with cd(code_dir):
   run(“mkdir first_dir”)

実行

$ fab deploy
[192.168.0.21] Executing task ‘deploy’
[192.168.0.21] run: test -d /tmp/test_fabric

Warning: run() received nonzero return code 1 while executing ‘test -d /tmp/test_fabric’!

[192.168.0.21] run: mkdir -p /tmp/test_fabric
[192.168.0.21] run: mkdir first_dir

Done.
Disconnecting from 192.168.0.21… done.

出来ました。

・並列処理 parallel http://fabric.readthedocs.org/en/1.5/usage/parallel.html
@parallelを付ける
@parallel
def deploy():

http://docs.fabfile.org/en/1.5/api/core/context_managers.html#fabric.context_managers.settings

settingsで parallel=True

・master slaveで別設定スクリプトを実行
@rolesで振り分ける
env.rolesdefでホスト振り分け設定
@hostでも可能

http://docs.fabfile.org/en/1.5/api/core/decorators.html?highlight=role#fabric.decorators.roles

env.roledefs = {
 ‘master': ['192.168.0.100'],
 ‘slave':['192.168.0.101','192.168.0.102']
}
@roles(‘master’)
def master_task():
 # set master
 pass

@parallel
@roles(‘slave’)
def slave_task():
 # set slave
 pass

def deploy():
 execute(master_task)
 execute(slave_task)

fab deploy
で、それぞれ実行される。

主な実行方法

http://fabric.readthedocs.org/en/1.5/usage/execution.html#execution-strategy

passwordもいけるけど、ssh key認証にしましょうと書いてある。

This entry was posted on 火曜日, 11月 20th, 2012 at 5:05 PM and is filed under deploy, fabric, Python. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Unityによるゲームを公開しております iOS/Android
https://itunes.apple.com/jp/app/lost-knight-3d-action/id900917032
https://play.google.com/store/apps/details?id=com.groundroad.runknight

各種開発支援・機能開発等小さいお仕事などもお請けしております。
unity開発支援, PHPシステム開発, javascript/html5 フロント開発, titanium mobileアプリ開発
お気軽にお問い合わせください
大崎・五反田近郊での対面でのお打ち合わせはいつでも可能です。