/
/
/
Ansible role that deploys a supervised home assistant installation on my homeassistant device.
1---
2- name: Validate system dependencies
3 block:
4 - name: Check Docker service status
5 ansible.builtin.command: systemctl is-active docker
6 register: docker_active_check
7 changed_when: false
8 failed_when: false
9 check_mode: false
10
11 - name: Verify Docker is running
12 ansible.builtin.assert:
13 that:
14 - docker_active_check.rc == 0
15 fail_msg: "Docker service is not active"
16 success_msg: "Docker service is running"
17
18 - name: Check NetworkManager service status
19 ansible.builtin.command: systemctl is-active NetworkManager
20 register: nm_active_check
21 changed_when: false
22 failed_when: false
23 check_mode: false
24 when: homeassistant_manage_networking | bool
25
26 - name: Verify NetworkManager is running
27 ansible.builtin.assert:
28 that:
29 - nm_active_check.rc == 0
30 fail_msg: "NetworkManager service is not active"
31 success_msg: "NetworkManager service is running"
32 when: homeassistant_manage_networking | bool
33
34- name: Validate OS-Agent installation
35 block:
36 - name: Check OS-Agent service status
37 ansible.builtin.command: systemctl is-active os-agent
38 register: os_agent_active_check
39 changed_when: false
40 failed_when: false
41 check_mode: false
42
43 - name: Get OS-Agent service logs if not active
44 ansible.builtin.command: journalctl -u os-agent --no-pager -n 20
45 register: os_agent_logs
46 changed_when: false
47 become: true
48 check_mode: false
49 when: os_agent_active_check.rc != 0
50
51 - name: Display OS-Agent logs if not active
52 ansible.builtin.debug:
53 msg: "{{ os_agent_logs.stdout_lines }}"
54 when: os_agent_active_check.rc != 0
55
56 - name: Verify OS-Agent is running
57 ansible.builtin.assert:
58 that:
59 - os_agent_active_check.rc == 0
60 fail_msg: "OS-Agent service is not active. Check logs above."
61 success_msg: "OS-Agent service is running"
62
63 - name: Test OS-Agent D-Bus interface
64 ansible.builtin.command: busctl introspect io.hass.os /io/hass/os
65 register: os_agent_dbus_test
66 changed_when: false
67 failed_when: false
68 become: true
69 check_mode: false
70
71 - name: Verify OS-Agent D-Bus interface
72 ansible.builtin.assert:
73 that:
74 - os_agent_dbus_test.rc == 0
75 fail_msg: "OS-Agent D-Bus interface not available"
76 success_msg: "OS-Agent D-Bus interface is working"
77
78- name: Validate Home Assistant Supervisor installation
79 block:
80 - name: Check Home Assistant Supervisor service status
81 ansible.builtin.command: systemctl is-active hassio-supervisor
82 register: supervisor_active_check
83 changed_when: false
84 failed_when: false
85 check_mode: false
86
87 - name: Verify Home Assistant Supervisor is running
88 ansible.builtin.assert:
89 that:
90 - supervisor_active_check.rc == 0
91 fail_msg: "Home Assistant Supervisor service is not active"
92 success_msg: "Home Assistant Supervisor service is running"
93
94- name: Validate Home Assistant data directories
95 ansible.builtin.stat:
96 path: "{{ item }}"
97 register: ha_directories
98 check_mode: false
99 loop:
100 - "{{ homeassistant_data_share }}"
101 - "{{ homeassistant_data_share }}/homeassistant"
102 - "{{ homeassistant_data_share }}/supervisor"
103
104- name: Verify Home Assistant data directories exist
105 ansible.builtin.assert:
106 that:
107 - item.stat.exists
108 - item.stat.isdir
109 fail_msg: "Home Assistant directory {{ item.item }} does not exist or is not a directory"
110 success_msg: "Home Assistant directory {{ item.item }} exists"
111 loop: "{{ ha_directories.results }}"
112
113- name: Ensure Home Assistant core container is running
114 block:
115 - name: Check if homeassistant container is running
116 ansible.builtin.command: docker inspect -f '{% raw %}{{.State.Running}}{% endraw %}' homeassistant
117 register: ha_container_running
118 changed_when: false
119 failed_when: false
120 check_mode: false
121
122 - name: Start Home Assistant core if not running
123 ansible.builtin.command: ha core start
124 when: ha_container_running.stdout | default('false') != 'true'
125 changed_when: true
126 check_mode: false
127
128 - name: Wait for Home Assistant core container to be running
129 ansible.builtin.command: docker inspect -f '{% raw %}{{.State.Running}}{% endraw %}' homeassistant
130 register: ha_container_verify
131 until: ha_container_verify.stdout | default('false') == 'true'
132 retries: 6
133 delay: 10
134 changed_when: false
135 check_mode: false
136 when: ha_container_running.stdout | default('false') != 'true'
137
138- name: Quick check Home Assistant web interface
139 ansible.builtin.uri:
140 url: "http://{{ ansible_default_ipv4.address }}:8123"
141 method: GET
142 timeout: 5
143 register: ha_web_quick
144 failed_when: false
145 check_mode: false
146
147- name: Wait for Home Assistant web interface if not immediately available
148 ansible.builtin.uri:
149 url: "http://{{ ansible_default_ipv4.address }}:8123"
150 method: GET
151 timeout: 10
152 register: ha_web_check
153 retries: 12
154 delay: 30
155 until: ha_web_check.status | default(0) == 200
156 failed_when: false
157 when: ha_web_quick.status | default(0) != 200
158
159- name: Set web check result
160 ansible.builtin.set_fact:
161 ha_web_available: "{{ (ha_web_quick.status | default(0) == 200) or (ha_web_check.status | default(0) == 200) }}"
162
163- name: Display Home Assistant access information
164 ansible.builtin.debug:
165 msg:
166 - "Home Assistant web interface: http://{{ ansible_default_ipv4.address }}:8123"
167 - "Status: {{ 'Available' if ha_web_available else 'Not yet ready (may take 10-20 minutes on initial install)' }}"
168