構築済みFabricスクリプトを渡されたものの・・・何やってるかわからない・・・> <
だったので頻出する単語をまとめました。
そもそも既存のスクリプトがないって人は
一からチュートリアルを見つつやれば自然と理解できるかと。
ちなみに公式チュートリアル
http://fabric-ja.readthedocs.org/ja/latest/tutorial.html
env
'environment'で環境辞書と呼ばれています。いわゆる設定ファイルなのですが、
設定ファイルというよりは
スクリプト内でグローバルに参照できる辞書オブジェクトが
正しい認識です。
辞書なんですが使いやすいようにenv.hostsと属性っぽくアクセスできるようになってます。
Fabricでは何にでもとにかく使われるもっとも重要な要素です。
ちなみにsettings( )という関数がありますが、with句と一緒に使うと
そのスコープだけ特定の設定にできる、という効果があります。
from fabric.api import settings
def hoge():
with settings(warn_only=True):
return run('hoge hoge')
はデフォルトではenv.warn_only=Falseなのがwith句スコープ内でのみ
warn_only=Trueとなります。
Djangoを使っているとsettingsに特別な意味を見出しそうですが、Fabricではこれだけです。
local( )とrun( )
local( ) はローカル。つまり実行しているPCのローカルでコマンドを実行します。
対してrun( )はターゲットのリモート環境でコマンドを実行します。
run( )の中でlocal('cd /path/mypath') とかやっている場合は
手元のPCからリモートPCにrun( )の処理をしろと飛ばす
↓
リモートPCが自分のローカルにたいして cd /path/mypath とディレクトリ移動する
という感じです。
他にもsudoで実行させるsudo( )とかもあります。
role
role(役割)の訳に惑わされないように。
単純にhostのグルーピングをしているだけです。
env.roledefs で設定されています。
env.roledefs = {
'web-servers': ['web1', 'web2']
}
これは、ウェブサーバーにデプロイする時はweb1とweb2のサーバーを対象にするんだけども、
毎回['web1', 'web2']ってやるより、'web-servers'って指定するだけでよくなったら楽だよね。
という以上の意味はないです。
roleのキーがコマンド名と同名になってたりするとFabric初心者はわけわからなくなりますが、
落ち着いてみればこれだけです。
ちなみデコレータでも使用可能で、
@role('web-servers')
def deploy():
'''do deploy'''
とすればroleを対象にコマンド実行をしてくれます。
taskデコレータ
@task
で関数に適用すると
「これは実行可能タスクですよ」
とFabricが拾い上げてくれます。
つまり $ fab -l
の一覧に載ります。
比較的新しい機能とのことで、このデコレータを使うと
@task
の付いていない関数は$ fab -l
に載らなくなるので注意しましょう。
わざわざtaskデコレータとしたのはtask( )関数もあるからですが、こちらを直接使う機会は
ほぼないので気にしなくていいです。
execute
runやlocalと意味が微妙にかぶって混乱しますが、
Fabricタスク関数を別のタスク関数から呼び出します。
つまり処理の入れ子ができます。
普通に関数呼び出しをする場合との違いは、
タスク毎のhostやroleの設定を元のまま適用してくれる
ことにあります。なので細かいこと考えず直感的にタスクの入れ子処理ができます。
使い方として例えば、
- デプロイ
- 最新ソースコード取得
- サーバー再起動
のそれぞれのタスク関数があった場合に、
def デプロイ()
execute(最新ソースコード取得)
execute(サーバー再起動)
とかやっているはずです。
以上いきなり構築済みスクリプトを渡されて中身見たけどよくわからん!
になりそうな単語集でした。
これらだけでも意味がわかると公式のドキュメントも理解しやすいはずです!