diff --git a/roles/network_systemdnetworkd/meta/main.yml b/roles/network_systemdnetworkd/meta/main.yml index 146a66446..262dfd2a7 100644 --- a/roles/network_systemdnetworkd/meta/main.yml +++ b/roles/network_systemdnetworkd/meta/main.yml @@ -3,6 +3,7 @@ --- galaxy_info: author: "Anthony Ruhier; Seapath" + namespace: "seapath" description: configures the network via systemd-networkd license: BSD min_ansible_version: 2.9.10 diff --git a/roles/network_systemdnetworkd/molecule/default/converge.yml b/roles/network_systemdnetworkd/molecule/default/converge.yml new file mode 100644 index 000000000..2b7492ff4 --- /dev/null +++ b/roles/network_systemdnetworkd/molecule/default/converge.yml @@ -0,0 +1,8 @@ +--- +- name: Converge + hosts: all + gather_facts: true + tasks: + - name: Apply role under test + ansible.builtin.include_role: + name: network_systemdnetworkd diff --git a/roles/network_systemdnetworkd/molecule/default/molecule.yml b/roles/network_systemdnetworkd/molecule/default/molecule.yml new file mode 100644 index 000000000..a5486730c --- /dev/null +++ b/roles/network_systemdnetworkd/molecule/default/molecule.yml @@ -0,0 +1,49 @@ +--- +dependency: + name: galaxy + +driver: + name: podman + +platforms: + - name: hv1 + image: docker.io/geerlingguy/docker-debian13-ansible:latest + privileged: true + command: /sbin/init + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:rw + +provisioner: + name: ansible + config_options: + defaults: + roles_path: "${MOLECULE_PROJECT_DIRECTORY}/.." + playbooks: + prepare: prepare.yml + converge: converge.yml + verify: verify.yml + inventory: + host_vars: + hv1: + network_simple: true + network_systemdnetworkd_enable_resolved: false + network_systemdnetworkd_link: + 10-eth0: + - Match: + - Name: "eth0" + - Link: + - MTUBytes: 1800 + custom_netdev: + 20-bridge0: + - NetDev: + - Name: "bridge0" + - Kind: "bridge" + custom_network: + 30-test0: + - Match: + - Name: "eth0" + - Network: + - DHCP: "yes" + +verifier: + name: ansible diff --git a/roles/network_systemdnetworkd/molecule/default/prepare.yml b/roles/network_systemdnetworkd/molecule/default/prepare.yml new file mode 100644 index 000000000..eeae74fa8 --- /dev/null +++ b/roles/network_systemdnetworkd/molecule/default/prepare.yml @@ -0,0 +1,31 @@ +--- +- name: Prepare test environment (Debian 13) + hosts: all + become: true + gather_facts: false + + tasks: + - name: Ensure group systemd-network exists + ansible.builtin.group: + name: systemd-network + state: present + + - name: Ensure /etc/systemd/network directory exists + ansible.builtin.file: + path: /etc/systemd/network + state: directory + mode: "0755" + + - name: Ensure udev package is installed + ansible.builtin.apt: + name: + - udev + state: present + update_cache: true + + - name: Ensure systemd-udev-trigger service exists + ansible.builtin.systemd: + name: systemd-udev-trigger + enabled: true + daemon_reload: true + failed_when: false diff --git a/roles/network_systemdnetworkd/molecule/default/verify.yml b/roles/network_systemdnetworkd/molecule/default/verify.yml new file mode 100644 index 000000000..3015e6a0f --- /dev/null +++ b/roles/network_systemdnetworkd/molecule/default/verify.yml @@ -0,0 +1,99 @@ +--- +- name: Verify network_systemdnetworkd configuration + hosts: all + become: true + gather_facts: false + + tasks: + - name: Ensure /etc/systemd/network/10-eth0.link exists + ansible.builtin.stat: + path: /etc/systemd/network/10-eth0.link + register: network_systemdnetworkd_link_stat + + - name: Assert /etc/systemd/network/10-eth0.link exists with correct ownership and permissions + ansible.builtin.assert: + that: + - network_systemdnetworkd_link_stat.stat.exists + - network_systemdnetworkd_link_stat.stat.mode == "0640" + - network_systemdnetworkd_link_stat.stat.pw_name == "root" + - network_systemdnetworkd_link_stat.stat.gr_name == "systemd-network" + fail_msg: "/etc/systemd/network/10-eth0.link missing or wrong permissions/ownership" + + - name: Read /etc/systemd/network/10-eth0.link content + ansible.builtin.slurp: + src: /etc/systemd/network/10-eth0.link + register: network_systemdnetworkd_link_content + + - name: Assert /etc/systemd/network/10-eth0.link has expected content + ansible.builtin.assert: + that: + - "'[Match]' in network_systemdnetworkd_link_content.content | b64decode" + - "'Name=eth0' in network_systemdnetworkd_link_content.content | b64decode" + - "'[Link]' in network_systemdnetworkd_link_content.content | b64decode" + - "'MTUBytes=1800' in network_systemdnetworkd_link_content.content | b64decode" + fail_msg: "/etc/systemd/network/10-eth0.link does not contain expected values" + + - name: Ensure /etc/systemd/network/20-bridge0.netdev exists + ansible.builtin.stat: + path: /etc/systemd/network/20-bridge0.netdev + register: network_systemdnetworkd_netdev_stat + + - name: Assert /etc/systemd/network/20-bridge0.netdev exists with correct ownership and permissions + ansible.builtin.assert: + that: + - network_systemdnetworkd_netdev_stat.stat.exists + - network_systemdnetworkd_netdev_stat.stat.mode == "0640" + - network_systemdnetworkd_netdev_stat.stat.pw_name == "root" + - network_systemdnetworkd_netdev_stat.stat.gr_name == "systemd-network" + fail_msg: "/etc/systemd/network/20-bridge0.netdev missing or wrong permissions/ownership" + + - name: Read /etc/systemd/network/20-bridge0.netdev content + ansible.builtin.slurp: + src: /etc/systemd/network/20-bridge0.netdev + register: network_systemdnetworkd_netdev_content + + - name: Assert /etc/systemd/network/20-bridge0.netdev has expected content + ansible.builtin.assert: + that: + - "'[NetDev]' in network_systemdnetworkd_netdev_content.content | b64decode" + - "'Name=bridge0' in network_systemdnetworkd_netdev_content.content | b64decode" + - "'Kind=bridge' in network_systemdnetworkd_netdev_content.content | b64decode" + fail_msg: "/etc/systemd/network/20-bridge0.netdev does not contain expected values" + + - name: Ensure /etc/systemd/network/30-test0.network exists + ansible.builtin.stat: + path: /etc/systemd/network/30-test0.network + register: network_systemdnetworkd_network_stat + + - name: Assert /etc/systemd/network/30-test0.network exists with correct ownership and permissions + ansible.builtin.assert: + that: + - network_systemdnetworkd_network_stat.stat.exists + - network_systemdnetworkd_network_stat.stat.mode == "0640" + - network_systemdnetworkd_network_stat.stat.pw_name == "root" + - network_systemdnetworkd_network_stat.stat.gr_name == "systemd-network" + fail_msg: "/etc/systemd/network/30-test0.network missing or wrong permissions/ownership" + + - name: Read /etc/systemd/network/30-test0.network content + ansible.builtin.slurp: + src: /etc/systemd/network/30-test0.network + register: network_systemdnetworkd_network_content + + - name: Assert /etc/systemd/network/30-test0.network has expected content + ansible.builtin.assert: + that: + - "'[Match]' in network_systemdnetworkd_network_content.content | b64decode" + - "'Name=eth0' in network_systemdnetworkd_network_content.content | b64decode" + - "'[Network]' in network_systemdnetworkd_network_content.content | b64decode" + - "'DHCP=yes' in network_systemdnetworkd_network_content.content | b64decode" + fail_msg: "/etc/systemd/network/30-test0.network does not contain expected values" + + - name: Gather service facts + ansible.builtin.service_facts: + + - name: Assert systemd-networkd is enabled + ansible.builtin.assert: + that: + - services['systemd-networkd.service'] is defined + - services['systemd-networkd.service'].status == 'enabled' + fail_msg: "systemd-networkd is not enabled"