はい!(まあちょっと...) Chef Deployment Hooksがあります。
あなたの場合、何を一度だけ実行するので、1つのサーバーを「選択」after_restart
し、フックワークアウトまたはフックワークアウトでコードを実行して、それが「最後のサーバー」であることを確認する方法を見つける必要があります。配備されました。
以下は、現在のインスタンスが「リーダー」インスタンスであるかどうかを常に示す例です。そのため、何かを実行するインスタンスを 1 つだけ選択します。
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