in cookbooks/fb_systemd/resources/reload.rb [23:89]
def daemon_reload_or_reexec(action)
unless node.systemd?
Chef::Log.info(
"Requested to #{action} systemd #{new_resource.instance} " +
'skipped because the system is not booted',
)
return
end
case new_resource.instance
when 'system'
execute "#{action} systemd system instance" do
command "/bin/systemctl daemon-#{action}"
end
when 'user'
unless node['sessions'] && node['sessions']['by_user']
Chef::Log.info("Requested to #{action} systemd user instance for all " +
"users, but there are no sessions to #{action}")
return
end
logged_in = node['sessions']['by_user'].keys
if new_resource.user
unless logged_in.include?(new_resource.user)
Chef::Log.info("Requested to #{action} systemd user instance for " +
"#{new_resource.user} but it's not a logged in user")
return
end
users = [new_resource.user]
else
users = node['sessions']['by_user'].to_hash.keys.sort
end
failed = false
users.each do |user|
begin
uid = Etc.getpwnam(user).uid
rescue ArgumentError
Chef::Log.error(
"fb_systemd_reload: user '#{user}' is not defined, " +
'will abort later.',
)
failed = true
next
end
bus_path = "/run/user/#{uid}/bus"
execute "#{action} systemd --user for #{user}" do
only_if { ::File.exist?(bus_path) }
command "/bin/systemctl --user daemon-#{action}"
environment 'DBUS_SESSION_BUS_ADDRESS' => "unix:path=#{bus_path}"
user user
ignore_failure true
end
end
if failed
fail 'fb_systemd_reload: aborting due to previous failures'
end
else
fail "fb_systemd_reload: instance type '#{new_resource.instance}' " +
'is not supported!'
end
end