2012-04-03 3 views
1

Из python я использую нож для запуска сервера.В сервере chef, как определить, когда узел полностью загружен

например.

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 и другие инструменты для настройки вновь созданного сервера. Псевдо-код будет выглядеть следующим образом:

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 и другие инструменты вне Chef для настройки этого экземпляра. Возможно, мне что-то не хватает, но вы, кажется, не полностью используете силу шеф-повара здесь. –

+0

После загрузки я изменяю имена тегов, выполняю тестирование и т. Д., Прежде чем узлы будут перемещены в балансировщик нагрузки. Я уверен, что смогу сделать это у шеф-повара, но я предпочитаю контролировать сценарии, чтобы сделать это. Это решение для отказоустойчивости. Это самая большая причина в том, что если я использую шеф-повар для загрузки неудачного наивного ec2-naode, мне нужно знать, что он правильно загружен. Для загрузки узла требуется около 15 минут. У меня есть тайм-аут в 20. Если дольше, отмените попытку и повторите попытку. Я заметил, что по случайным причинам с шеф-поваром, иногда бутстрапы просто не работают в первый раз. Я называю это шеф-поваром! – Tampa

ответ

4

TL; DR: Используйте report/exception handler вместо этого.

Когда узел завершил работу chef-client, он сохранит объект узла на сервере шеф-повара. Один из атрибутов, автоматически генерируемых ohai каждый раз, когда Chef работает, является node['ohai_time'], который является временной отметкой эпохи Unix, когда ohai был выполнен (в начале прогона повара). Узел, который не смог успешно сохранить себя на сервере, вообще не будет иметь ohai_time. Однако этот атрибут просто отслеживает время, когда охай бежал, не обязательно, когда chef-client сохранен на сервере (так как это может быть от нескольких секунд до нескольких минут в зависимости от того, что делают ваши рецепты). Примечание, если шеф-повар работает с выходами из-за необработанного исключения, он по умолчанию не будет сохранен на сервере.

Более надежный способ получения уведомления о завершении узла заключается в использовании обработчика Report/Exception, который может отправлять сообщения в различные места и API. См. wiki page для получения дополнительной информации.

+1

Мы использовали обработчики отчетов/исключений, управляющие очередью RabbitMQ, как отличный способ синхронизации вещей. –