6

私は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 スクリプトを使用してサービスを停止する必要があります。私の知る限り、アクションが実行された後、ハンドラーはタスクの結果に応答します。これは、新しいスクリプトが古いスクリプトに既にコピーされていることを意味し、サービスの停止と再起動を妨げる可能性があります。

どうすればそれを処理できますか?

4

2 に答える 2

1

上記のコメントから学んだことから、このプレイブックの最適な構成は以下のようなものになるはずです。copy initスクリプトタスクの実行に間に合うようにサービスを停止する方法はまだわかりませんが、タスクが実行されるときだけです。

- tasks:
   - name: do various tasks here
     notify: restart tomcat service

   - name: stop tomcat service
     service: name=tomcat state=stopped
     when: {{ indicator_init_script_task_will_fire }}

   - name: copy init.d script
     notify: restart tomcat service

  handlers:
    - name: restart tomcat service
      service: name=my_service state=restarted

インジケーターがどうあるべきかわかりません。ということで、気ままに更新。

于 2014-06-26T21:48:48.527 に答える