2015-02-19 6 views
1

Я использую OpsWorks для развертывания производства, и я хочу, чтобы у вас был крючок уведомлений (в частности, веб-хост Slack), который запускается после успешного завершения развертывания.Запуск приложения OpsWorks при развертывании

Я мог бы сделать рецепт, чтобы сделать это, но рецепты выполняются на каждом экземпляре, который (я думаю) выполнил бы N крючков (где N - количество экземпляров). Мне действительно нужен только крючок для запуска, когда все экземпляры завершены.

Есть ли способ запустить код, когда приложение закончило развертывание во всех экземплярах OpsWorks?

ответ

0

Да! (Ну вроде ...) Есть Chef Deployment Hooks.

В вашем случае, поскольку вы, что запускаете его только один раз, вам нужно будет найти способ «выбрать» один сервер и запустить ваш код на after_restart или в тренировке крючков другим способом убедиться, что это «последний» развернут.

Ниже приведен пример, который всегда сообщит вам, если текущий экземпляр является «лидером» один, так, чтобы выбрать только один экземпляр, чтобы запустить что-то:

available_instances = new_resource.node[:opsworks][:layers]['php-app'][:instances] 
available_instances = available_instances.select { |name, instance| 
    ['requested', 'booting', 'running_setup', 'online'].include?(instance[:status]) 
} 
leader_name = available_instances.keys.sort.first 
leader = new_resource.node[:opsworks][:layers]['php-app'][:instances][leader_name] 

if leader && new_resource.node[:opsworks][:instance] 
    is_leader = leader[:aws_instance_id] == new_resource.node[:opsworks][:instance][:aws_instance_id] 
else 
    is_leader = true 
end 
Смежные вопросы