Skip to content

Commit c5cb06f

Browse files
committed
Install systemd-networkd package, if any
On Red Hat systems networkd is packaged as systemd-networkd. In particular: * EL7 * EL8/EL9 shipped in EPEL * Fedora since 33
1 parent cd45b32 commit c5cb06f

File tree

6 files changed

+84
-0
lines changed

6 files changed

+84
-0
lines changed

REFERENCE.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ The following parameters are available in the `systemd` class:
102102
* [`use_stub_resolver`](#-systemd--use_stub_resolver)
103103
* [`manage_networkd`](#-systemd--manage_networkd)
104104
* [`networkd_ensure`](#-systemd--networkd_ensure)
105+
* [`networkd_package`](#-systemd--networkd_package)
105106
* [`manage_timesyncd`](#-systemd--manage_timesyncd)
106107
* [`timesyncd_ensure`](#-systemd--timesyncd_ensure)
107108
* [`timesyncd_package`](#-systemd--timesyncd_package)
@@ -330,6 +331,14 @@ The state that the ``networkd`` service should be in
330331

331332
Default value: `'running'`
332333

334+
##### <a name="-systemd--networkd_package"></a>`networkd_package`
335+
336+
Data type: `Optional[String[1]]`
337+
338+
Name of the package required for systemd-networkd, if any
339+
340+
Default value: `undef`
341+
333342
##### <a name="-systemd--manage_timesyncd"></a>`manage_timesyncd`
334343

335344
Data type: `Boolean`

data/RedHat-family.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
systemd::networkd_package: systemd-networkd

manifests/init.pp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@
8383
# @param networkd_ensure
8484
# The state that the ``networkd`` service should be in
8585
#
86+
# @param networkd_package
87+
# Name of the package required for systemd-networkd, if any
88+
#
8689
# @param manage_timesyncd
8790
# Manage the systemd timesyncd daemon
8891
#
@@ -205,6 +208,7 @@
205208
Boolean $use_stub_resolver = false,
206209
Boolean $manage_networkd = false,
207210
Enum['stopped','running'] $networkd_ensure = 'running',
211+
Optional[String[1]] $networkd_package = undef,
208212
Boolean $manage_timesyncd = false,
209213
Enum['stopped','running'] $timesyncd_ensure = 'running',
210214
Optional[String[1]] $timesyncd_package = undef,
@@ -285,6 +289,7 @@
285289

286290
if $manage_networkd and $facts['systemd_internal_services'] and $facts['systemd_internal_services']['systemd-networkd.service'] {
287291
contain systemd::networkd
292+
Class['systemd::install'] -> Class['systemd::networkd']
288293
}
289294

290295
if $manage_timesyncd and $facts['systemd_internal_services'] and $facts['systemd_internal_services']['systemd-timesyncd.service'] {

manifests/install.pp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
# @api private
33
#
44
class systemd::install {
5+
if $systemd::manage_networkd and $systemd::networkd_package {
6+
package { $systemd::networkd_package:
7+
ensure => present,
8+
}
9+
}
10+
511
if $systemd::manage_resolved and $systemd::resolved_package {
612
package { $systemd::resolved_package:
713
ensure => present,

spec/acceptance/networkd_spec.rb

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper_acceptance'
4+
5+
describe 'systemd with manage_networkd true' do
6+
has_package = fact('os.family') == 'RedHat'
7+
8+
# On Enterprise Linux 8 & 9 the package is shipped in EPEL
9+
before { install_package(default, 'epel-release') if has_package && %w[8 9].include?(fact('os.release.major')) }
10+
11+
context 'configure systemd-networkd' do
12+
let(:manifest) do
13+
<<~PUPPET
14+
class { 'systemd':
15+
manage_networkd => true,
16+
}
17+
PUPPET
18+
end
19+
20+
it 'works idempotently with no errors' do
21+
apply_manifest(manifest, catch_failures: true)
22+
# Package systemd-networkd needs to be installed before fact $facts['internal_services'] is set
23+
apply_manifest(manifest, catch_failures: true) if has_package
24+
apply_manifest(manifest, catch_changes: true)
25+
end
26+
27+
describe service('systemd-networkd') do
28+
it { is_expected.to be_running }
29+
it { is_expected.to be_enabled }
30+
end
31+
32+
it { expect(package('systemd-networkd')).to be_installed } if has_package
33+
end
34+
35+
context 'configure systemd stopped' do
36+
let(:manifest) do
37+
<<~PUPPET
38+
class { 'systemd':
39+
manage_networkd => true,
40+
networkd_ensure => 'stopped',
41+
}
42+
PUPPET
43+
end
44+
45+
it 'works idempotently with no errors' do
46+
apply_manifest(manifest, catch_failures: true)
47+
apply_manifest(manifest, catch_changes: true)
48+
end
49+
50+
describe service('systemd-networkd') do
51+
it { is_expected.not_to be_running }
52+
it { is_expected.not_to be_enabled }
53+
end
54+
end
55+
end

spec/classes/init_spec.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
it { is_expected.not_to create_service('systemd-resolved') }
1818
it { is_expected.not_to create_service('systemd-networkd') }
1919
it { is_expected.not_to create_service('systemd-timesyncd') }
20+
it { is_expected.not_to contain_package('systemd-networkd') }
2021
it { is_expected.not_to contain_package('systemd-timesyncd') }
2122
it { is_expected.not_to contain_package('systemd-resolved') }
2223
it { is_expected.not_to contain_class('systemd::coredump') }
@@ -39,6 +40,12 @@
3940
it { is_expected.to create_service('systemd-networkd').with_enable(true) }
4041
it { is_expected.not_to contain_file('/etc/systemd/network') }
4142

43+
if facts[:os]['family'] == 'RedHat'
44+
it { is_expected.to contain_package('systemd-networkd') }
45+
else
46+
it { is_expected.not_to contain_package('systemd-networkd') }
47+
end
48+
4249
case [facts[:os]['family'], facts[:os]['release']['major']]
4350
when %w[RedHat 7], %w[RedHat 9]
4451
it { is_expected.to contain_package('systemd-resolved') }

0 commit comments

Comments
 (0)