2017-09-23 10 views
0

展開のためにFabricを使用するときに、現在のenvをプログラムで変更する方法はありますか?Fabric、Python - プログラムで変更する

私がしたいことは、1回の呼び出しですべての自分の環境でタスクを実行することです。 envsをルーピングし、同じタスクを呼び出します。例えば

:その後、

def live(): 
    env.host = ['123.123.123.123'] 

def dev(): 
    env.host = ['321.321.321.321'] 

environments = ['live', 'dev'] 

def backup_db(): 
    run('mysqldump etc ..' % env) 

def backup_all_dbs(): 
    for environment in environments: 
     env = new_env(environment) 
     backup_db 

fab backup_all_dbs 

を実行しますが、私はその場でENVをインスタンス化する方法を知って、そして実際に新しい現在のenvを変更しないでくださいコード。

現在のenv dictを検査する場合、他のものがあるため、dev()やlive()などのenv関数を呼び出すだけでは不十分です。

これについてのドキュメントで何も見ることはできません。おそらく、envはコマンドラインから1回しか作成できません。複数のホスト間で同じコマンドを実行するという点で、ファブリックを使用するための最良の方法ではありません

おかげ

答えて

0

。より良い方法は、次のようになります。

from fabric.api import env, run, task 

env.hosts = ['123.123.123.123', '213.213.213.213'] 

@task 
def uname(): 
    run('uname -a') 

あなたはより多くの情報のためのドキュメントのHow host lists are constructedセクションを参照したいと思います。

+0

こんにちは - ありがとうございます。私はすでにenvごとに複数のホストを設定しています。しかし、それは私が達成したいもの(または私が求めていたもの)ではありません。私はまた、すべてのホストで同じタスクを実行するようにすべての環境を頼むことは不合理ではないと思います。 –

+0

これは、Fabricの仕組みではありません。あなたの "環境"に同じタスクを実行するように "求めている"わけではありません。環境は1つしかなく、グローバルな価値があります。また、すべてのホストで同じタスクを実行する方法を尋ねました。あなたはその出力を見るために上記のスクリプトを実行しましたか? – YellowShark

+0

いいえ私はそれが何であるかを見ることができ、私が求めているものではないので、あなたの例を実行しませんでした。あなたが私の質問に対する答えを知らないなら、それはまったく問題ありません。私が求めていることは、技術的には非常に明確です。実行時にプログラムでenvのグローバルな価値を変更できますか?ちょうどクスクスのために。 –

関連する問題