Skip to content

Commit 2b232ef

Browse files
authored
Merge pull request #485 from deric/udev
Reload udev rules after change
2 parents 7e2e187 + 5ad232f commit 2b232ef

File tree

6 files changed

+53
-2
lines changed

6 files changed

+53
-2
lines changed

REFERENCE.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ The following parameters are available in the `systemd` class:
134134
* [`udev_resolve_names`](#-systemd--udev_resolve_names)
135135
* [`udev_timeout_signal`](#-systemd--udev_timeout_signal)
136136
* [`udev_rules`](#-systemd--udev_rules)
137+
* [`udev_reload`](#-systemd--udev_reload)
137138
* [`machine_info_settings`](#-systemd--machine_info_settings)
138139
* [`manage_logind`](#-systemd--manage_logind)
139140
* [`logind_settings`](#-systemd--logind_settings)
@@ -525,6 +526,14 @@ Config Hash that is used to generate instances of our
525526

526527
Default value: `{}`
527528

529+
##### <a name="-systemd--udev_reload"></a>`udev_reload`
530+
531+
Data type: `Boolean`
532+
533+
Whether udev rules should be automatically reloaded upon change.
534+
535+
Default value: `false`
536+
528537
##### <a name="-systemd--machine_info_settings"></a>`machine_info_settings`
529538

530539
Data type: `Systemd::MachineInfoSettings`

manifests/init.pp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@
157157
# Config Hash that is used to generate instances of our
158158
# `udev::rule` define.
159159
#
160+
# @param udev_reload
161+
# Whether udev rules should be automatically reloaded upon change.
162+
#
160163
# @param machine_info_settings
161164
# Settings to place into /etc/machine-info (hostnamectl)
162165
#
@@ -261,6 +264,7 @@
261264
Optional[Integer] $udev_event_timeout = undef,
262265
Optional[Enum['early', 'late', 'never']] $udev_resolve_names = undef,
263266
Optional[Variant[Integer,String]] $udev_timeout_signal = undef,
267+
Boolean $udev_reload = false,
264268
Boolean $manage_logind = false,
265269
Systemd::LogindSettings $logind_settings = {},
266270
Boolean $manage_all_network_files = false,

manifests/udev/rule.pp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,22 @@
3838
fail("systemd::udev::rule - ${name}: param rules is empty, you need to pass rules")
3939
}
4040

41+
$_notify = if $systemd::udev_reload {
42+
if $notify_services =~ Array {
43+
$notify_services << 'Exec[systemd-udev_reload]'
44+
} else {
45+
[$notify_services, 'Exec[systemd-udev_reload]']
46+
}
47+
} else {
48+
$notify_services
49+
}
50+
4151
file { join([$path, $name], '/'):
4252
ensure => $ensure,
4353
owner => 'root',
4454
group => 'root',
4555
mode => '0444',
46-
notify => $notify_services,
56+
notify => $_notify,
4757
selinux_ignore_defaults => $selinux_ignore_defaults,
4858
content => epp("${module_name}/udev_rule.epp", { 'rules' => $rules }),
4959
}

manifests/udevd.pp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,10 @@
3636
* => $udev_rule,
3737
}
3838
}
39+
40+
exec { 'systemd-udev_reload':
41+
command => 'udevadm control --reload-rules && udevadm trigger',
42+
refreshonly => true,
43+
path => $facts['path'],
44+
}
3945
}

spec/classes/init_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,7 @@
642642
let(:params) do
643643
{
644644
manage_udevd: true,
645+
udev_reload: true,
645646
udev_log: 'daemon',
646647
udev_children_max: 1,
647648
udev_exec_delay: 2,
@@ -664,6 +665,7 @@
664665
{
665666
manage_udevd: true,
666667
udev_purge_rules: true,
668+
udev_reload: true,
667669
}
668670
end
669671

@@ -701,6 +703,9 @@
701703
'ACTION=="add", KERNEL=="sdb", RUN+="/bin/raw /dev/raw/raw2 %N"',
702704
])
703705
}
706+
707+
it { is_expected.to contain_exec('systemd-udev_reload') }
708+
it { is_expected.to contain_file('/etc/udev/rules.d/example_raw.rules').that_notifies('Exec[systemd-udev_reload]') }
704709
end
705710

706711
context 'with machine-info' do

spec/defines/udev_rules_spec.rb

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,24 @@ class { 'systemd': manage_udevd => true, manage_journald => false }
8888
it { is_expected.to contain_file("/etc/udev/rules.d/#{title}").with_ensure('absent').with_notify([]) }
8989
end
9090

91-
describe 'ensured absent with notify' do
91+
describe 'ensured absent with automatic reload' do
92+
let(:pre_condition) do
93+
<<-PUPPET
94+
class { 'systemd': manage_udevd => true, manage_journald => false, udev_reload => true }
95+
PUPPET
96+
end
97+
let(:params) do
98+
{
99+
ensure: 'absent',
100+
}
101+
end
102+
103+
it { is_expected.to compile.with_all_deps }
104+
105+
it { is_expected.to contain_file("/etc/udev/rules.d/#{title}").with_ensure('absent').with_notify(['Exec[systemd-udev_reload]']) }
106+
end
107+
108+
describe 'ensured absent with custom notify' do
92109
let(:params) { { ensure: 'absent', notify_services: 'Service[systemd-udevd]', } }
93110

94111
it { is_expected.to compile.with_all_deps }

0 commit comments

Comments
 (0)