Skip to content
Draft
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
1 change: 1 addition & 0 deletions group_vars/template/engine_servers/vars.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ pyro_engine_docker_tag: "latest"
ansible_user: pi

pi_zero_hostname: "" # set in host_vars if a Pi Zero is associated with this engine
relay_trigger_type: "h" # h = high-trigger (default), l = low-trigger (legacy); override in host_vars

engine_json_schema: |
{
Expand Down
63 changes: 63 additions & 0 deletions playbooks/relay_check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
- name: Run relay check on main Pi
hosts: engine_servers
gather_facts: false
tasks:
- name: Run relay_check.py (blocks until Pi Zero returns, ~2 min)
ansible.builtin.command: >-
python3 /home/pyro-engine/watchdog/main_pi/relay_check.py
--trigger {{ relay_trigger_type }}

- name: Wait for Pi Zero SSH after power-cycle
hosts: pi_zero
gather_facts: false
tasks:
- name: Wait for SSH connection
ansible.builtin.wait_for_connection:
timeout: 60

- name: Launch relay check on Pi Zero
hosts: pi_zero
gather_facts: false
tasks:
- name: Run relay_check.py fire-and-forget (cuts main Pi power, triggers reboot)
ansible.builtin.command: >-
python3 /home/pi/pyro-engine/watchdog/pi_zero/relay_check.py
--trigger {{ hostvars[relay_host]['relay_trigger_type'] }}
async: 1
poll: 0

- name: Wait for main Pi to recover after reboot
hosts: engine_servers
gather_facts: false
tasks:
- name: Wait for SSH connection
ansible.builtin.wait_for_connection:
timeout: 180

- name: Fetch and display relay check logs
hosts: engine_servers:pi_zero
gather_facts: false
tasks:
- name: Ensure local logs directory exists
ansible.builtin.file:
path: "logs"
state: directory
mode: '0755'
delegate_to: localhost
run_once: true

- name: Fetch relay check log
ansible.builtin.fetch:
src: /tmp/relay_check.log
dest: "logs/relay_check_{{ inventory_hostname }}.log"
flat: true

- name: Read relay check log content
ansible.builtin.slurp:
src: /tmp/relay_check.log
register: log_content

- name: Print relay check log
ansible.builtin.debug:
msg: "{{ log_content.content | b64decode }}"
2 changes: 1 addition & 1 deletion roles/engine_cron/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@
ansible.builtin.cron:
name: "Main pi watchdog"
minute: "5,15,25,35,45,55"
job: "/usr/bin/python3 {{ engine_cron_working_dir }}/watchdog/main_pi/watchdog.py >> /home/pi/watchdog_main.log 2>&1"
job: "/usr/bin/python3 {{ engine_cron_working_dir }}/watchdog/main_pi/watchdog.py --trigger {{ relay_trigger_type }} >> /home/pi/watchdog_main.log 2>&1"
user: pi
when: pi_zero_hostname | default("") | length > 0
2 changes: 1 addition & 1 deletion roles/pi_zero_watchdog/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,5 @@
ansible.builtin.cron:
name: "pyro watchdog"
minute: "*/10"
job: "/usr/bin/python3 {{ pi_zero_watchdog_script }} >> {{ pi_zero_log_file }} 2>&1"
job: "/usr/bin/python3 {{ pi_zero_watchdog_script }} --trigger {{ hostvars[relay_host]['relay_trigger_type'] }} >> {{ pi_zero_log_file }} 2>&1"
user: pi