/
/
/
Ansible role that deploys a supervised home assistant installation on my homeassistant device.
1---
2- name: Install NetworkManager and dependencies
3 ansible.builtin.apt:
4 name:
5 - network-manager
6 - systemd-resolved
7 state: present
8 update_cache: yes
9 cache_valid_time: 3600
10 become: true
11 retries: 3
12 delay: 10
13 register: networkmanager_install_result
14 until: networkmanager_install_result is succeeded
15
16- name: Configure NetworkManager to manage interfaces
17 ansible.builtin.copy:
18 content: |
19 [main]
20 plugins=ifupdown,keyfile
21
22 [ifupdown]
23 managed=true
24 dest: /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
25 owner: root
26 group: root
27 mode: '0644'
28 become: true
29 register: networkmanager_config
30
31- name: Enable NetworkManager for next boot (but don't start yet)
32 ansible.builtin.systemd:
33 name: NetworkManager
34 enabled: true
35 daemon_reload: true
36 become: true
37
38- name: Enable systemd-resolved for next boot
39 ansible.builtin.systemd:
40 name: systemd-resolved
41 enabled: true
42 daemon_reload: true
43 become: true
44
45- name: Create network transition script for safe reboot
46 ansible.builtin.copy:
47 content: |
48 #!/bin/bash
49 # Home Assistant Network Transition Script
50 # This script runs once after reboot to complete the network transition
51
52 echo "$(date): Starting network transition to NetworkManager" >> /var/log/ha-network-transition.log
53
54 # Disable old networking service
55 systemctl disable networking.service >> /var/log/ha-network-transition.log 2>&1
56
57 # Start NetworkManager and systemd-resolved
58 systemctl start NetworkManager >> /var/log/ha-network-transition.log 2>&1
59 systemctl start systemd-resolved >> /var/log/ha-network-transition.log 2>&1
60
61 # Wait for network to stabilize
62 sleep 10
63
64 # Test network connectivity
65 if ping -c 1 8.8.8.8 > /dev/null 2>&1; then
66 echo "$(date): Network transition successful" >> /var/log/ha-network-transition.log
67 # Remove this script after successful run
68 rm -f /etc/systemd/system/ha-network-transition.service
69 rm -f /usr/local/bin/ha-network-transition.sh
70 systemctl daemon-reload
71 else
72 echo "$(date): Network transition failed, keeping old networking" >> /var/log/ha-network-transition.log
73 systemctl enable networking.service >> /var/log/ha-network-transition.log 2>&1
74 systemctl start networking.service >> /var/log/ha-network-transition.log 2>&1
75 fi
76
77 echo "$(date): Network transition script completed" >> /var/log/ha-network-transition.log
78 dest: /usr/local/bin/ha-network-transition.sh
79 owner: root
80 group: root
81 mode: '0755'
82 become: true
83 when:
84 - networkmanager_config is changed
85 - not ansible_check_mode
86
87- name: Create systemd service for network transition
88 ansible.builtin.copy:
89 content: |
90 [Unit]
91 Description=Home Assistant Network Transition to NetworkManager
92 After=multi-user.target
93
94 [Service]
95 Type=oneshot
96 ExecStart=/usr/local/bin/ha-network-transition.sh
97 RemainAfterExit=yes
98
99 [Install]
100 WantedBy=multi-user.target
101 dest: /etc/systemd/system/ha-network-transition.service
102 owner: root
103 group: root
104 mode: '0644'
105 become: true
106 when:
107 - networkmanager_config is changed
108 - not ansible_check_mode
109
110- name: Enable network transition service for next boot
111 ansible.builtin.systemd:
112 name: ha-network-transition
113 enabled: true
114 daemon_reload: true
115 become: true
116 when:
117 - networkmanager_config is changed
118 - not ansible_check_mode
119
120- name: Display network transition information
121 ansible.builtin.debug:
122 msg: |
123 Network Configuration Prepared for Safe Transition
124
125 What was configured:
126 - NetworkManager installed and configured
127 - Transition script prepared: /usr/local/bin/ha-network-transition.sh
128
129 IMPORTANT: Network changes will take effect AFTER REBOOT
130 - Current SSH connection remains safe
131 - NetworkManager will take over after reboot
132 - Old networking service will be disabled after reboot
133 - Transition script will self-remove after successful run
134
135 Transition log will be available at: /var/log/ha-network-transition.log
136 when: networkmanager_config is changed
137