ansible-playbookのhandlersでservice
を使ってサービスをリスタート出来ますが、systemdのサービスを再起動しようとしてもエラーになります。
systemdは、設定変更時にsystemctl daemin-reload
を実行してからサービスを再起動する必要があるためです。
下記の例は、systemdで起動するdocker daemonの例です。
handlersに、shell
を使ってsystemctl daemin-reload
するハンドラとservice
を使ってリスタートするハンドラを定義します。
notifyで、2つのハンドラを順番に呼び出すことで正しくサービスを再起動してくれます。
tasks: - block: - name: create docker daemon systemd directory file: path: "/etc/systemd/system/docker.service.d" state: directory owner: root group: root mode: "u=rwx,g=rx,o=rx" - name: setup docker daemon proxy template: src: "{{ item }}.j2" dest: "/etc/systemd/system/docker.service.d/{{ item }}" owner: root group: root mode: "u=rw,g=r,o=r" notify: - daemon reload - restart docker with_items: - 50-http-proxy.conf when: http_proxy != "" handlers: - name: daemon reload shell: systemctl daemon-reload - name: restart docker service: name=docker state=restarted