2012-04-03 3 views
1

Von Python bootstraped ist, ich bin mit Messer einen Server zu starten.Im Koch-Server, wie Sie feststellen können, wenn ein Knoten vollständig

z.B.

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 

Ich werde verwendet, dann den Koch-Server api zu überprüfen, wenn der Bootstrap abgeschlossen ist, so kann ich dann Boto und andere Tools verwenden, um den neu erstellte Server zu konfigurieren. Pseudo-Code wird wie folgt aussehen:

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 

Meine Frage ist ... was ist der Auslöser in dem Koch-Server, der anzeigt, wenn der Knoten vollständig von Küchenchef verarbeitet wird? Beachten Sie, dass ich den Server mit dem Namen -N benannt habe und seine Eigenschaften abfrage, aber wonach suche ich? Gibt es einen Bool? Ein Status?

Dank

+0

Die folgende Antwort von jtimberman geht auf Ihre Frage ein. Ich würde die größere Frage stellen, warum Sie Boto und andere Tools außerhalb von Chef verwenden, um diese Instanz zu konfigurieren. Vielleicht vermisse ich etwas, aber Sie scheinen hier die Macht des Chefs nicht voll auszunutzen. –

+0

Sobald ich gebootet habe, ändere ich Tagnamen, führe Tests aus, bevor Knoten in den Load Balancer verschoben werden. Ich bin mir sicher, dass ich das im Koch machen kann, aber ich bevorzuge es, Skripte zu überwachen, um das zu tun. Dies ist eine Failover-Lösung. Der größte Grund ist, dass ich, wenn ich einen fehlerhaften ec2-Naode mit dem Koch starte, wissen muss, dass er richtig gebootet wird. Es dauert ungefähr 15 Minuten, um einen Knoten zu laden. Ich habe eine Auszeit um 20. Wenn länger, abbrechen und es erneut versuchen. Ich habe bemerkt, dass aus zufälligen Gründen mit Chef, manchmal Bootstraps nicht funktionieren das erste Mal. Ich nenne es die Chefbombe! – Tampa

Antwort

4

TL; DR: eine report/exception handler stattdessen verwenden.

Wenn der Knoten chef-client erfolgreich ausgeführt wurde, wird das Knotenobjekt auf dem Chef-Server gespeichert. Eines der Attribute automatisch erzeugt, indem jedes Mal ohai Chef läuft node['ohai_time'] ist, das ist der UNIX-Epoche-Zeitstempel, wenn ohai (am Anfang des Chefs Laufes) durchgeführt wurde. Ein Knoten, der sich nicht erfolgreich auf dem Server gespeichert hat, hat überhaupt keine ohai_time. Dieses Attribut verfolgt jedoch nur die Zeit, als ohai lief, nicht unbedingt, wenn chef-client auf dem Server gespeichert ist (da das abhängig von den Rezepten ein paar Sekunden bis Minuten dauern kann). Hinweis Wenn der Chef aufgrund einer nicht behandelten Ausnahme ausgeführt wird, wird er standardmäßig nicht auf dem Server gespeichert.

Eine zuverlässigere Methode, nach Abschluss eines Knotens benachrichtigt zu werden, besteht darin, einen Report/Exception-Handler zu verwenden, der eine Nachricht an eine Vielzahl von Orten und APIs senden kann. Weitere Informationen finden Sie unter wiki page.

+1

Wir haben Report-/Exception-Handler verwendet, die eine RabbitMQ-Warteschlange steuern, um die Dinge zu synchronisieren. –