daemon_reload_or_reexec

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