コンテナ

systemdのサービスをansible-playbookのhandlersでうまく記述する方法

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
タイトルとURLをコピーしました