2012-04-03 21 views
1

Pythonから、私はサーバーを起動するためにナイフを使用しています。シェフサーバーで、ノードが完全にブートストラップされたときを判断する方法

knife ec2 server create -r "role[nginx_server]" --region ap-southeast-1 -Z ap-southeast-1a -I ami-ae1a5dfc --flavor t1.micro -G nginx -x ubuntu -S sg_development -i /home/ubuntu/.ec2/sg_development.pem -N webserver1 

は、私はその後、ブートストラップが完了したときに、私はその後、新しく作成されたサーバを設定するのbotoや他のツールを使用することができるかどうかを確認するためにシェフ・サーバーのAPIを使用します。擬似コードは次のようになります。

cmd = """knife ec2 server create -r "role[nginx_server]....""" 
os.system(cmd) 
boot = False 
while boot==False: 
    chefTrigger = getStatusFromChefApi() 
    if chefTrigger==True: 
     boot=True 

continue with code for further proccessing 

私の質問は...ノードが完全にシェフによって処理されたときに表示しますシェフ・サーバーでのトリガは何ですか?サーバーの名前を付けるために-Nを使い、そのプロパティをクエリしますが、何を探しますか?ブールはありますか?ステータス?

おかげ

+0

jtimbermanの答えはあなたの質問に対応しています。 私は、このインスタンスを構成するために、なぜシェフ以外のbotoや他のツールを使用しているのかという大きな質問をします。 多分私は何かを見逃していますが、あなたはここでシェフの力を完全に利用していないようです。 –

+0

一度起動すると、ノードがロードバランサに移動する前にタグ名を変更し、テストなどを行います。私はシェフでそれを行うことができると確信していますが、私はそれを行うためにスクリプトを監視することを好む。これはフェールオーバーソリューションです。この最大の理由は、私がシェフを使って失敗したEC2ノードを起動すると、それが正しく起動されていることを知る必要があるということです。ノードのブートストラップには約15分かかります。私は20時にタイムアウトします。もっと長い場合は、中止してもう一度やり直してください。私はシェフとランダムな理由で、時にはブートストラップが初めて仕事をしないことに気付きました。私はそれをシェフの爆弾と呼んでいます! – Tampa

答えて

4

TL; DR:代わりにreport/exception handlerを使用してください。

ノードがchef-clientの実行に成功すると、ノードオブジェクトがシェフサーバーに保存されます。シェフが実行されるたびにohaiによって自動的に生成される属性の1つはnode['ohai_time']です。これは、(シェフ実行の開始時に)ohaiが実行されたときのUnixエポックタイムスタンプです。サーバーに正常に保存されていないノードには、ohai_timeはまったくありません。しかし、この属性は、サーバーに保存されたchef-client(必ずしもレシピが何をしているかによっては数秒から数分になる可能性があるため)が実行されたときと同じではありません。 シェフの実行が未処理の例外により終了した場合、デフォルトではサーバーに保存されません。

ノードが完了したときに通知される信頼性の高い方法は、さまざまな場所やAPIにメッセージを送信できるReport/Exceptionハンドラを使用することです。詳細については、wiki pageを参照してください。

+1

私たちは物事を同期させるための素晴らしい方法として、RabbitMQキューを駆動するレポート/例外ハンドラを使用しました。 –

関連する問題