Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions roles/network_systemdnetworkd/meta/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions roles/network_systemdnetworkd/molecule/default/converge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
- name: Converge
hosts: all
gather_facts: true
tasks:
- name: Apply role under test
ansible.builtin.include_role:
name: network_systemdnetworkd
49 changes: 49 additions & 0 deletions roles/network_systemdnetworkd/molecule/default/molecule.yml
Original file line number Diff line number Diff line change
@@ -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
31 changes: 31 additions & 0 deletions roles/network_systemdnetworkd/molecule/default/prepare.yml
Original file line number Diff line number Diff line change
@@ -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
99 changes: 99 additions & 0 deletions roles/network_systemdnetworkd/molecule/default/verify.yml
Original file line number Diff line number Diff line change
@@ -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"
Loading