Getting started
On first run, no changes to network stack take effect
The role is designed around the default presence of the ifupdown
Debian
package, which manages the network interfaces. Due to this, first execution of
the role will result in the systemd-networkd configuration files
being generated, but the service itself will not be restarted (see below for
detailed instructions). The service will be restarted on subsequent executions
of the role. In an environment where the systemd-networkd already
manages the network interfaces, the role should work normally.
Replacing ifupdown
scripts with systemd-networkd
The default non-GUI Debian installation uses the ifupdown
package to
configure network interfaces. It's not compatible with the
systemd-networkd service, therefore it's best to purge it from the
host after the new configuration has been applied. This has to be done through
local console, since during removal the post-rm scripts will bring the network
interfaces down, disconnecting the host from the network.
Specific steps to take to replace the ifupdown
package with
systemd-networkd service:
Make sure that the host is in the
[debops_service_networkd]
Ansible inventory group.[debops_all_hosts] hostname [debops_service_networkd] hostname
Apply the debops.networkd playbook, check if the host has network connection. On first execution of the role, the systemd-networkd service will not be restarted to avoid making changes in the network stack.
user@host:~$ debops check service/networkd -l hostname user@host:~$ debops run service/networkd -l hostname
Login to the host on the local console, purge
ifupdown
package and reboot the host.user@host:~$ sudo apt purge ifupdown user@host:~$ sudo systemctl reboot
Login to the host and check if the new configuration has been set up correctly. Apply the debops.resolved playbook to configure
/etc/resolv.conf
configuration file.user@host:~$ debops check service/resolved -l hostname user@host:~$ debops run service/resolved -l hostname
Example inventory
To manage the network configuration using systemd-networkd service,
the host needs to be included in the [debops_service_networkd]
Ansible
inventory group:
[debops_all_hosts]
hostname
[debops_service_networkd]
hostname
Example playbook
If you are using this role without DebOps, here's an example Ansible playbook
that uses the debops.networkd
role:
---
- name: Manage systemd-networkd service
collections: [ 'debops.debops', 'debops.roles01',
'debops.roles02', 'debops.roles03' ]
hosts: [ 'debops_service_networkd' ]
become: True
environment: '{{ inventory__environment | d({})
| combine(inventory__group_environment | d({}))
| combine(inventory__host_environment | d({})) }}'
roles:
- role: networkd
tags: [ 'role::networkd', 'skip::networkd' ]