Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions roles/cs.varnish-watchdog/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
varnish_watchdog_timeout: 2
varnish_watchdog_restart_cmd: "/bin/systemctl restart varnish"
varnish_watchdog_script_path: "/usr/local/bin/varnish-watchdog.sh"
varnish_watchdog_service_name: "varnish-watchdog.service"
varnish_watchdog_timer_name: "varnish-watchdog.timer"
varnish_watchdog_interval: "*:0/1"
Empty file.
60 changes: 60 additions & 0 deletions roles/cs.varnish-watchdog/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
- name: Install Varnish watchdog script
ansible.builtin.copy:
dest: "{{ varnish_watchdog_script_path }}"
owner: root
group: root
mode: "0755"
content: |
#!/usr/bin/env bash
set -euo pipefail

TIMEOUT="{{ varnish_watchdog_timeout }}"
RESTART_CMD="{{ varnish_watchdog_restart_cmd }}"

if ! timeout "${TIMEOUT}" varnishadm ping >/dev/null 2>&1; then
logger -t varnish-watchdog "Varnish is unresponsive, restarting service"
${RESTART_CMD}
fi

- name: Install Varnish watchdog service unit
ansible.builtin.copy:
dest: "/etc/systemd/system/{{ varnish_watchdog_service_name }}"
owner: root
group: root
mode: "0644"
content: |
[Unit]
Description=Varnish watchdog health check
Wants=network-online.target
After=network-online.target varnish.service

[Service]
Type=oneshot
ExecStart={{ varnish_watchdog_script_path }}

- name: Install Varnish watchdog timer unit
ansible.builtin.copy:
dest: "/etc/systemd/system/{{ varnish_watchdog_timer_name }}"
owner: root
group: root
mode: "0644"
content: |
[Unit]
Description=Run Varnish watchdog every minute

[Timer]
OnCalendar={{ varnish_watchdog_interval }}
Persistent=true
Unit={{ varnish_watchdog_service_name }}

[Install]
WantedBy=timers.target

- name: Reload systemd
ansible.builtin.systemd:
daemon_reload: true

- name: Enable and start Varnish watchdog timer
ansible.builtin.systemd:
name: "{{ varnish_watchdog_timer_name }}"
enabled: true
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Start watchdog timer immediately after enabling

This task only sets enabled: true, which makes the timer start on boot but does not activate it in the current run; systemctl --help lists enable and start as separate operations, and the Ansible systemd module follows that split. On freshly provisioned hosts that are not rebooted right away, the watchdog never executes, so unresponsive Varnish instances won't be restarted despite the task name saying "Enable and start".

Useful? React with 👍 / 👎.

1 change: 1 addition & 0 deletions site.step-15-varnish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
varnish_bypass_request_header_name: "{{ mageops_bypass_token_http_header }}"
varnish_magento_vary_sign: "{{ mageops_magento_vary_sign_enabled }}"
varnish_magento_vary_secret: "{{ mageops_magento_vary_sign_secret }}"
- role: cs.varnish-watchdog
- role: cs.varnish-manager
when: varnish_standalone and aws_use
- role: cs.mageops-cli-profile
Expand Down