/
/
/
1---
2- name: Check if OS-Agent is already installed
3 ansible.builtin.command: /usr/bin/ha-os-agent --version
4 register: os_agent_version_check
5 failed_when: false
6 changed_when: false
7
8- name: Get latest OS-Agent release information
9 ansible.builtin.uri:
10 url: "{{ homeassistant_os_agent_base_url }}/latest"
11 method: GET
12 return_content: true
13 follow_redirects: all
14 register: os_agent_latest_release
15 when: homeassistant_os_agent_version == "latest"
16 failed_when: false
17
18- name: Debug OS-Agent API response if failed
19 ansible.builtin.debug:
20 msg: |
21 OS-Agent API call failed or returned invalid JSON.
22 Status: {{ os_agent_latest_release.status | default('unknown') }}
23 Content: {{ os_agent_latest_release.content | default('no content') }}
24 Using fallback version: 1.7.2
25 when:
26 - homeassistant_os_agent_version == "latest"
27 - os_agent_latest_release.json is not defined
28
29- name: Set OS-Agent version
30 ansible.builtin.set_fact:
31 os_agent_version: >-
32 {{
33 homeassistant_os_agent_version if homeassistant_os_agent_version != "latest"
34 else (os_agent_latest_release.json.tag_name if os_agent_latest_release.json is defined else "1.7.2")
35 }}
36
37- name: Set OS-Agent file extension
38 ansible.builtin.set_fact:
39 os_agent_file_extension: >-
40 {{ '.deb' if homeassistant_os_agent_arch in ['aarch64', 'armv5', 'armv6', 'armv7'] else '.tar.gz' }}
41
42- name: Set OS-Agent download URL
43 ansible.builtin.set_fact:
44 os_agent_download_url: >-
45 {{
46 homeassistant_os_agent_base_url + '/download/' + os_agent_version +
47 '/os-agent_' + os_agent_version +
48 '_linux_' + homeassistant_os_agent_arch + os_agent_file_extension
49 }}
50
51- name: Install OS-Agent
52 block:
53 - name: Download OS-Agent package
54 ansible.builtin.get_url:
55 url: "{{ os_agent_download_url }}"
56 dest: "/tmp/os-agent_{{ os_agent_version }}_linux_{{ homeassistant_os_agent_arch }}{{ os_agent_file_extension }}"
57 mode: '0644'
58 timeout: 120
59 become: true
60
61 - name: Install OS-Agent from .deb package
62 ansible.builtin.apt:
63 deb: "/tmp/os-agent_{{ os_agent_version }}_linux_{{ homeassistant_os_agent_arch }}.deb"
64 state: present
65 become: true
66 when: os_agent_file_extension == '.deb'
67 register: os_agent_install_result
68
69 - name: Extract OS-Agent tar.gz
70 ansible.builtin.unarchive:
71 src: "/tmp/os-agent_{{ os_agent_version }}_linux_{{ homeassistant_os_agent_arch }}.tar.gz"
72 dest: /tmp
73 remote_src: yes
74 become: true
75 when: os_agent_file_extension == '.tar.gz'
76
77 - name: Install OS-Agent binary
78 ansible.builtin.copy:
79 src: "/tmp/os-agent"
80 dest: "/usr/bin/ha-os-agent"
81 mode: '0755'
82 owner: root
83 group: root
84 remote_src: yes
85 become: true
86 when: os_agent_file_extension == '.tar.gz'
87
88 - name: Create OS-Agent systemd service
89 ansible.builtin.copy:
90 content: |
91 [Unit]
92 Description=Home Assistant OS Agent
93 After=sysinit.target
94 Before=systemd-networkd.service
95 Wants=systemd-networkd.service
96
97 [Service]
98 Type=simple
99 ExecStart=/usr/bin/ha-os-agent
100 Restart=always
101 RestartSec=5
102
103 [Install]
104 WantedBy=multi-user.target
105 dest: /etc/systemd/system/os-agent.service
106 owner: root
107 group: root
108 mode: '0644'
109 become: true
110 when: os_agent_file_extension == '.tar.gz'
111
112 - name: Enable and start OS-Agent service
113 ansible.builtin.systemd:
114 name: os-agent
115 state: started
116 enabled: true
117 daemon_reload: true
118 become: true
119 when: os_agent_file_extension == '.tar.gz'
120 register: os_agent_install_result
121
122
123 - name: Clean up OS-Agent package
124 ansible.builtin.file:
125 path: "/tmp/os-agent_{{ os_agent_version }}_linux_{{ homeassistant_os_agent_arch }}{{ os_agent_file_extension }}"
126 state: absent
127 become: true
128 when: homeassistant_cleanup_downloads | bool
129
130 - name: Clean up extracted OS-Agent binary
131 ansible.builtin.file:
132 path: "/tmp/os-agent"
133 state: absent
134 become: true
135 when:
136 - homeassistant_cleanup_downloads | bool
137 - os_agent_file_extension == '.tar.gz'
138
139 - name: Deploy Home Assistant OS D-Bus policy
140 ansible.builtin.template:
141 src: io.hass.os.conf.j2
142 dest: /usr/share/dbus-1/system.d/io.hass.os.conf
143 owner: root
144 group: root
145 mode: '0644'
146 become: true
147
148 when: os_agent_version_check.rc != 0 or os_agent_version not in os_agent_version_check.stdout
149
150- name: Create dummy os-agent package to satisfy Home Assistant dependencies
151 block:
152 - name: Check if os-agent package is already installed
153 ansible.builtin.command: dpkg -l os-agent
154 register: os_agent_package_check
155 failed_when: false
156 changed_when: false
157
158 - name: Install equivs package for creating dummy packages
159 ansible.builtin.apt:
160 name: equivs
161 state: present
162 become: true
163 when: os_agent_package_check.rc != 0
164
165 - name: Create dummy os-agent package control file
166 ansible.builtin.copy:
167 content: |
168 Section: misc
169 Priority: optional
170 Package: os-agent
171 Version: {{ os_agent_version }}
172 Maintainer: Home Assistant <[email protected]>
173 Architecture: amd64
174 Description: Home Assistant OS Agent (manual installation)
175 This is a dummy package to satisfy dependencies.
176 The actual OS Agent was installed manually from tar.gz.
177 dest: /tmp/os-agent-dummy
178 owner: root
179 group: root
180 mode: '0644'
181 become: true
182 when: os_agent_package_check.rc != 0
183
184 - name: Build dummy os-agent package
185 ansible.builtin.command: equivs-build /tmp/os-agent-dummy
186 args:
187 chdir: /tmp
188 creates: /tmp/os-agent_{{ os_agent_version }}_amd64.deb
189 become: true
190 when: os_agent_package_check.rc != 0
191
192 - name: Install dummy os-agent package
193 ansible.builtin.apt:
194 deb: /tmp/os-agent_{{ os_agent_version }}_amd64.deb
195 state: present
196 become: true
197 when: os_agent_package_check.rc != 0
198
199 - name: Clean up dummy package files
200 ansible.builtin.file:
201 path: "{{ item }}"
202 state: absent
203 become: true
204 loop:
205 - /tmp/os-agent-dummy
206 - /tmp/os-agent_{{ os_agent_version }}_amd64.deb
207 when:
208 - os_agent_package_check.rc != 0
209 - homeassistant_cleanup_downloads | bool
210
211 when: os_agent_file_extension == '.tar.gz'
212
213- name: Verify OS-Agent installation
214 block:
215 - name: Check OS-Agent service status
216 ansible.builtin.systemd:
217 name: os-agent
218 state: started
219 enabled: true
220 become: true
221 register: os_agent_service
222
223 - name: Test OS-Agent functionality
224 ansible.builtin.command: /usr/bin/ha-os-agent --version
225 register: os_agent_test
226 changed_when: false
227
228 - name: Display OS-Agent version
229 ansible.builtin.debug:
230 msg: "OS-Agent installed successfully: {{ os_agent_test.stdout }}"