/
/
/
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 # Use cache if less than 1 hour old
10 become: true
11 retries: 3
12 delay: 10
13 register: networkmanager_install_result
14 until: networkmanager_install_result is succeeded
15 ignore_errors: yes
16
17- name: Fallback - install NetworkManager without cache update if needed
18 ansible.builtin.apt:
19 name:
20 - network-manager
21 - systemd-resolved
22 state: present
23 update_cache: no
24 become: true
25 when: networkmanager_install_result is failed
26
27- name: Configure NetworkManager to manage interfaces (prepared for reboot)
28 ansible.builtin.copy:
29 content: |
30 [main]
31 plugins=ifupdown,keyfile
32
33 [ifupdown]
34 managed=true
35 dest: /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
36 owner: root
37 group: root
38 mode: '0644'
39 become: true
40 register: networkmanager_config
41
42- name: Enable NetworkManager for next boot (but don't start yet)
43 ansible.builtin.systemd:
44 name: NetworkManager
45 enabled: true
46 daemon_reload: true
47 become: true
48
49- name: Create systemd-resolved config directory
50 ansible.builtin.file:
51 path: /etc/systemd/resolved.conf.d
52 state: directory
53 owner: root
54 group: root
55 mode: '0755'
56 become: true
57
58- name: Configure systemd-resolved
59 ansible.builtin.copy:
60 content: |
61 [Resolve]
62 DNS=1.1.1.1 8.8.8.8
63 FallbackDNS=1.0.0.1 8.8.4.4
64 Domains=~.
65 DNSSEC=yes
66 DNSOverTLS=opportunistic
67 dest: /etc/systemd/resolved.conf.d/homeassistant.conf
68 owner: root
69 group: root
70 mode: '0644'
71 become: true
72
73- name: Enable systemd-resolved for next boot
74 ansible.builtin.systemd:
75 name: systemd-resolved
76 enabled: true
77 daemon_reload: true
78 become: true
79
80- name: Create network transition script for safe reboot
81 ansible.builtin.copy:
82 content: |
83 #!/bin/bash
84 # Home Assistant Network Transition Script
85 # This script runs once after reboot to complete the network transition
86
87 echo "$(date): Starting network transition to NetworkManager" >> /var/log/ha-network-transition.log
88
89 # Disable old networking service
90 systemctl disable networking.service >> /var/log/ha-network-transition.log 2>&1
91
92 # Start NetworkManager and systemd-resolved
93 systemctl start NetworkManager >> /var/log/ha-network-transition.log 2>&1
94 systemctl start systemd-resolved >> /var/log/ha-network-transition.log 2>&1
95
96 # Wait for network to stabilize
97 sleep 10
98
99 # Test network connectivity
100 if ping -c 1 8.8.8.8 > /dev/null 2>&1; then
101 echo "$(date): Network transition successful" >> /var/log/ha-network-transition.log
102 # Remove this script after successful run
103 rm -f /etc/systemd/system/ha-network-transition.service
104 rm -f /usr/local/bin/ha-network-transition.sh
105 systemctl daemon-reload
106 else
107 echo "$(date): Network transition failed, keeping old networking" >> /var/log/ha-network-transition.log
108 systemctl enable networking.service >> /var/log/ha-network-transition.log 2>&1
109 systemctl start networking.service >> /var/log/ha-network-transition.log 2>&1
110 fi
111
112 echo "$(date): Network transition script completed" >> /var/log/ha-network-transition.log
113 dest: /usr/local/bin/ha-network-transition.sh
114 owner: root
115 group: root
116 mode: '0755'
117 become: true
118 when: networkmanager_config.changed
119
120- name: Create systemd service for network transition
121 ansible.builtin.copy:
122 content: |
123 [Unit]
124 Description=Home Assistant Network Transition to NetworkManager
125 After=multi-user.target
126
127 [Service]
128 Type=oneshot
129 ExecStart=/usr/local/bin/ha-network-transition.sh
130 RemainAfterExit=yes
131
132 [Install]
133 WantedBy=multi-user.target
134 dest: /etc/systemd/system/ha-network-transition.service
135 owner: root
136 group: root
137 mode: '0644'
138 become: true
139 when: networkmanager_config.changed
140
141- name: Enable network transition service for next boot
142 ansible.builtin.systemd:
143 name: ha-network-transition
144 enabled: true
145 daemon_reload: true
146 become: true
147 when: networkmanager_config.changed
148
149- name: Display network transition information
150 ansible.builtin.debug:
151 msg: |
152 ============================================================================
153 Network Configuration Prepared for Safe Transition
154 ============================================================================
155
156 ð What was configured:
157 ⢠NetworkManager installed and configured
158 ⢠systemd-resolved configured
159 ⢠Transition script prepared: /usr/local/bin/ha-network-transition.sh
160
161 â ï¸ IMPORTANT: Network changes will take effect AFTER REBOOT
162 ⢠Current SSH connection remains safe
163 ⢠NetworkManager will take over after reboot
164 ⢠Old networking service will be disabled after reboot
165 ⢠Transition script will self-remove after successful run
166
167 ð Transition log will be available at: /var/log/ha-network-transition.log
168
169 ð The playbook will continue with current network configuration...
170 ============================================================================
171 when: networkmanager_config.changed