私はAnsibleに比較的慣れていないので、「ベア」サーバーにTomcat構成をインストールできるプレイブックを作成しました。スクリプトに変更がない場合、playbook の開始時にサービスを停止することを回避しながら、init.d スクリプトを更新できるという問題を解決する方法を考えています。基本的なプレイブックは次のとおりです。
- name: stop tomcat service
service: name=my_service state=stopped
- name: copy init.d script
template: src=script.j2 dest=/etc/init.d/my_service
- name: do other tasks here
- name: start tomcat service
service: name=my_service state=restarted
この Playbook は、変更がない場合でも、常にサービスを停止して開始します。プレイブックで実行したいのは、実際の変更がある場合にのみサービスを停止および開始することです。
ハンドラーを使用できることはわかっていますが (詳しく調べる必要があります)、NEW スクリプトをコピーする前に、OLD init.d スクリプトを使用してサービスを停止する必要があります。私の知る限り、アクションが実行された後、ハンドラーはタスクの結果に応答します。これは、新しいスクリプトが古いスクリプトに既にコピーされていることを意味し、サービスの停止と再起動を妨げる可能性があります。
どうすればそれを処理できますか?