Skip to content

Commit 0a251b3

Browse files
committed
rewrite linger to not do any prefetching
fixes: #302 fixes: #301
1 parent 05912ab commit 0a251b3

File tree

2 files changed

+8
-34
lines changed

2 files changed

+8
-34
lines changed

lib/puppet/provider/loginctl_user/ruby.rb

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,18 @@
55
# @see https://wiki.archlinux.org/title/Systemd/User
66
Puppet::Type.type(:loginctl_user).provide(:ruby) do
77
desc 'custom provider to manage systemd user sessions/linger'
8-
commands loginctl: 'loginctl'
98

10-
def self.instances
11-
users = loginctl('list-users', '--no-legend').split("\n").map { |l| l.split[1] }
12-
loginctl('show-user', '-p', 'Name', '-p', 'Linger', *users).split("\n\n").map do |u|
13-
user = u.split("\n").to_h { |f| f.split('=') }
14-
linger = if user['Linger'] == 'yes'
15-
'enabled'
16-
else
17-
'disabled'
18-
end
19-
new(name: user['Name'],
20-
linger: linger)
21-
end
22-
end
9+
commands loginctl: 'loginctl'
2310

24-
def self.prefetch(resources)
25-
instances.each do |prov|
26-
resources[prov.name].provider = prov if resources[prov.name]
27-
end
11+
def linger
12+
# loginctl is only successful if the user has an active session (so either logged in or lingering
13+
# so if loginctl fails, linger is definitly disabled, for users with an active session
14+
# (eg. logged in or running a timer or ...), the Linger property displays if lingering is activated.
15+
:enabled if loginctl('show-user', resource[:name], '--property=Linger', '--value').chomp == 'yes'
16+
rescue Puppet::ExecutionFailure
17+
:disabled
2818
end
2919

30-
mk_resource_methods
31-
3220
def linger=(value)
3321
case value
3422
when :enabled

spec/unit/puppet/provider/loginctl_user/ruby_spec.rb

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,6 @@
1313
}
1414
end
1515

16-
context 'when listing instances' do
17-
it 'finds all entries' do
18-
allow(provider_class).to receive(:loginctl).
19-
with('list-users', '--no-legend').
20-
and_return("0 root\n42 foo\n314 bar\n")
21-
allow(provider_class).to receive(:loginctl).
22-
with('show-user', '-p', 'Name', '-p', 'Linger', 'root', 'foo', 'bar').
23-
and_return("Name=root\nLinger=no\n\nName=foo\nLinger=yes\n\nName=bar\nLinger=no\n")
24-
inst = provider_class.instances.map!
25-
26-
expect(inst.size).to eq(3)
27-
end
28-
end
29-
3016
it 'enables linger' do
3117
resource = Puppet::Type.type(:loginctl_user).new(common_params)
3218
expect(provider_class).to receive(:loginctl).with('enable-linger', 'foo')

0 commit comments

Comments
 (0)