From 1b1fe9a8eaab802951ad9e48e2632deec9944423 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Mon, 3 Jan 2022 17:22:13 +0100 Subject: networking --- manifests/site.pp | 1 + modules/networking/manifests/init.pp | 20 +++++++++----------- modules/networking/manifests/networkd.pp | 21 ++++++--------------- modules/networking/manifests/networkd_instance.pp | 21 +++++++++++++++++++++ modules/networking/templates/unit_file.epp | 7 +++++++ modules/nspawn/manifests/util/enable_networkd.pp | 23 +++++++++++++---------- modules/profiles/manifests/remarkable.pp | 23 +++++++++++------------ 7 files changed, 68 insertions(+), 48 deletions(-) create mode 100644 modules/networking/manifests/networkd_instance.pp create mode 100644 modules/networking/templates/unit_file.epp diff --git a/manifests/site.pp b/manifests/site.pp index 676eb18..1c75199 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -1,6 +1,7 @@ node 'gandalf.adrift.space' { include ::rss_filter + include ::networking nspawn::machine { 'busting': os => 'debian', diff --git a/modules/networking/manifests/init.pp b/modules/networking/manifests/init.pp index bd1fda8..7dc2450 100644 --- a/modules/networking/manifests/init.pp +++ b/modules/networking/manifests/init.pp @@ -1,18 +1,16 @@ class networking ( - String $addr4, - String $gw4, # TODO default this to first address in subnet + Optional[Enum['systemd']] $provider = undef, + Hash[String,Hash] $items = {}, ) { # TODO choose a sensible provider here - networking::networkd { '20-puppet': - network => { - 'Address' => $addr4, - 'Gateway' => $gw4, - 'IPv6AcceptRA' => 1, - }, - notify_ => true, - manage_directory => true, + case $provider { + 'systemd', undef: { + include ::networking::networkd + create_resources(networking::networkd_instance, $items) + } + default: { + } } - } diff --git a/modules/networking/manifests/networkd.pp b/modules/networking/manifests/networkd.pp index 4376a29..dec2e33 100644 --- a/modules/networking/manifests/networkd.pp +++ b/modules/networking/manifests/networkd.pp @@ -1,14 +1,9 @@ -define networking::networkd ( - Hash $network, - Optional[Hash] $match = { 'Name' => $facts['networking']['primary'] }, - String $root = '/', - String $path = "${root}/etc/systemd/network", - String $filename = $name, - String $file = "${path}/${filename}.conf", +class networking::networkd ( Boolean $notify_ = true, Boolean $manage_directory = true, + String $root = '/', + String $path = "${root}/etc/systemd/network", ) { - if $manage_directory { file { $path: ensure => directory, @@ -17,16 +12,12 @@ define networking::networkd ( } } - inifile::create_ini_settings({ - 'Match' => $match, - 'Network' => $network, - }, { path => $file, }) - if $notify_ { - Ini_Setting <| path == $file |> - ~> exec { 'networkctl reload': + exec { 'reload networkd': + command => 'systemctl reload-or-restart systemd-networkd', path => ['/bin', '/usr/bin',], refreshonly => true, } } } + diff --git a/modules/networking/manifests/networkd_instance.pp b/modules/networking/manifests/networkd_instance.pp new file mode 100644 index 0000000..4089e75 --- /dev/null +++ b/modules/networking/manifests/networkd_instance.pp @@ -0,0 +1,21 @@ +define networking::networkd_instance ( + Hash[String,Hash] $content, + Enum['present','absent'] $ensure = 'present', + String $path = $networking::networkd::path, + String $filename = $name, + Integer $priority = 20, + Enum['network', 'netdev', 'link'] $type = 'network', + String $real_filename = "${priority}-${filename}.${type}", + String $file = "${path}/${real_filename}", +) { + + include ::networking::networkd + + file { $file: + ensure => $ensure, + content => epp('networking/unit_file.epp', { + data => $content + }), + notify => if $networking::networkd::notify_ { Exec['reload networkd'] } else { [] }, + } +} diff --git a/modules/networking/templates/unit_file.epp b/modules/networking/templates/unit_file.epp new file mode 100644 index 0000000..2cbfefb --- /dev/null +++ b/modules/networking/templates/unit_file.epp @@ -0,0 +1,7 @@ +<%- | Hash[String,Hash] $data +| -%> +<%- $data.each |$key, $sub| { -%> +[<%= $key %>] +<%- $sub.each |$k, $v| { -%> +<%= $k %>=<%= $v %> +<%- }} -%> diff --git a/modules/nspawn/manifests/util/enable_networkd.pp b/modules/nspawn/manifests/util/enable_networkd.pp index 2b532b9..8e447b9 100644 --- a/modules/nspawn/manifests/util/enable_networkd.pp +++ b/modules/nspawn/manifests/util/enable_networkd.pp @@ -4,19 +4,22 @@ define nspawn::util::enable_networkd ( ) { # TODO only do this if the directory is empty - networking::networkd { "Initial networking on ${machine}": - filename => '20-puppet-initial', - match => { 'Name' => 'host0', }, - root => $machine_path, - network => { - 'DHCP' => 'ipv4', - 'IPv6AcceptRA' => 1, + networking::networkd_instance { "Initial networking on ${machine}": + priority => 50, + filename => 'puppet-initial', + path => "${machine_path}/${networking::networkd::path}", + content => { + 'Match' => { + 'Name' => 'host0', + }, + 'Network' => { + 'DHCP' => 'ipv4', + 'IPv6AcceptRA' => 1, + }, }, - notify_ => false, - manage_directory => false, } - $running = $facts['machined-info'][$machine] != Undef or $facts['machined-info'][$machine]['State'] == 'running' + $running = $facts['machined-info'][$machine] != Undef or $facts['machined-info'][$machine]['State'] == 'running' $cmd = if $running { [ 'systemctl', '-M', $machine, 'enable', 'systemd-networkd' ] diff --git a/modules/profiles/manifests/remarkable.pp b/modules/profiles/manifests/remarkable.pp index 73ee5e7..d88486f 100644 --- a/modules/profiles/manifests/remarkable.pp +++ b/modules/profiles/manifests/remarkable.pp @@ -15,17 +15,16 @@ define profiles::remarkable ( line => "${prefix}.${addr} host.usb", } - file { '/etc/systemd/network/25-remarkable-usb.network': - ensure => present, - content => @("EOF") - [Match] - Name=enp3s0f0u4 - - [Network] - - Description=Remarkable USB connection - Address=${prefix}.${addr}/29 - | EOF + # TODO Shouldn't we just use DHCP as intended here? + networking::networkd_instance { 'remarkable-usb': + content => { + 'Match' => { + 'Name' => 'enp3s0f0u4', + }, + 'Network' => { + 'Description' => 'Remarkable USB connection', + 'Address' => "${prefix}.${addr}/29", + }, + }, } - } -- cgit v1.2.3