/
/
/
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 when: os_agent_version_check.rc != 0 or os_agent_version not in os_agent_version_check.stdout
140
141- name: Create dummy os-agent package to satisfy Home Assistant dependencies
142 block:
143 - name: Check if os-agent package is already installed
144 ansible.builtin.command: dpkg -l os-agent
145 register: os_agent_package_check
146 failed_when: false
147 changed_when: false
148
149 - name: Install equivs package for creating dummy packages
150 ansible.builtin.apt:
151 name: equivs
152 state: present
153 become: true
154 when: os_agent_package_check.rc != 0
155
156 - name: Create dummy os-agent package control file
157 ansible.builtin.copy:
158 content: |
159 Section: misc
160 Priority: optional
161 Package: os-agent
162 Version: {{ os_agent_version }}
163 Maintainer: Home Assistant <[email protected]>
164 Architecture: amd64
165 Description: Home Assistant OS Agent (manual installation)
166 This is a dummy package to satisfy dependencies.
167 The actual OS Agent was installed manually from tar.gz.
168 dest: /tmp/os-agent-dummy
169 owner: root
170 group: root
171 mode: '0644'
172 become: true
173 when: os_agent_package_check.rc != 0
174
175 - name: Build dummy os-agent package
176 ansible.builtin.command: equivs-build /tmp/os-agent-dummy
177 args:
178 chdir: /tmp
179 creates: /tmp/os-agent_{{ os_agent_version }}_amd64.deb
180 become: true
181 when: os_agent_package_check.rc != 0
182
183 - name: Install dummy os-agent package
184 ansible.builtin.apt:
185 deb: /tmp/os-agent_{{ os_agent_version }}_amd64.deb
186 state: present
187 become: true
188 when: os_agent_package_check.rc != 0
189
190 - name: Clean up dummy package files
191 ansible.builtin.file:
192 path: "{{ item }}"
193 state: absent
194 become: true
195 loop:
196 - /tmp/os-agent-dummy
197 - /tmp/os-agent_{{ os_agent_version }}_amd64.deb
198 when:
199 - os_agent_package_check.rc != 0
200 - homeassistant_cleanup_downloads | bool
201
202 when: os_agent_file_extension == '.tar.gz'
203
204- name: Verify OS-Agent installation
205 block:
206 - name: Check OS-Agent service status
207 ansible.builtin.systemd:
208 name: os-agent
209 state: started
210 enabled: true
211 become: true
212 register: os_agent_service
213
214 - name: Test OS-Agent functionality
215 ansible.builtin.command: /usr/bin/ha-os-agent --version
216 register: os_agent_test
217 changed_when: false
218
219 - name: Display OS-Agent version
220 ansible.builtin.debug:
221 msg: "OS-Agent installed successfully: {{ os_agent_test.stdout }}"