1

私は OpsWorks を使用して運用展開を行っており、展開が成功した後に実行される通知フック (具体的には Slack Webhook) が必要です。

これを行うためのレシピを作成することもできますが、レシピはすべてのインスタンスで実行され、(私が思うに) N 個のフック (N はインスタンスの数) を実行します。すべてのインスタンスのデプロイが完了したときにフックを実行したいだけです。

すべての OpsWorks インスタンスへのアプリのデプロイが完了したときにコードを実行する方法はありますか?

4

1 に答える 1

0

はい!(まあちょっと...) 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
于 2015-07-31T16:27:43.083 に答える