summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-01-03 17:22:13 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2022-01-03 18:19:26 +0100
commit1b1fe9a8eaab802951ad9e48e2632deec9944423 (patch)
tree045a23e7db1263d69d3db15cbded0666d38b7da3
parentNetwork rewrites. (diff)
downloadwebdav_server-1b1fe9a8eaab802951ad9e48e2632deec9944423.tar.gz
webdav_server-1b1fe9a8eaab802951ad9e48e2632deec9944423.tar.xz
networking
-rw-r--r--manifests/site.pp1
-rw-r--r--modules/networking/manifests/init.pp20
-rw-r--r--modules/networking/manifests/networkd.pp21
-rw-r--r--modules/networking/manifests/networkd_instance.pp21
-rw-r--r--modules/networking/templates/unit_file.epp7
-rw-r--r--modules/nspawn/manifests/util/enable_networkd.pp23
-rw-r--r--modules/profiles/manifests/remarkable.pp23
7 files changed, 68 insertions, 48 deletions
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",
+ },
+ },
}
-
}