Class: Inspec::Resources::Systemd

Inherits:
ServiceManager show all
Defined in:
lib/inspec/resources/service.rb

Overview

Instance Attribute Summary

Attributes inherited from ServiceManager

#inspec, #service_ctl

Instance Method Summary collapse

Constructor Details

#initialize(inspec, service_ctl = nil) ⇒ Systemd

Returns a new instance of Systemd.



322
323
324
325
# File 'lib/inspec/resources/service.rb', line 322

def initialize(inspec, service_ctl = nil)
  @service_ctl = service_ctl || "systemctl"
  super
end

Instance Method Details

#info(service_name) ⇒ Object



345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
# File 'lib/inspec/resources/service.rb', line 345

def info(service_name)
  cmd = inspec.command("#{service_ctl} show --no-pager --all #{service_name}")
  return nil if cmd.exit_status.to_i != 0

  # parse data
  params = SimpleConfig.new(
    cmd.stdout.chomp,
    assignment_regex: /^\s*([^=]*?)\s*=\s*(.*?)\s*$/,
    multiple_values: false
  ).params

  # LoadState values eg. loaded, not-found
  installed = params["LoadState"] == "loaded"
  startname = params["User"]

  {
    name: params["Id"],
    description: params["Description"],
    startname: startname,
    installed: installed,
    running: is_active?(service_name),
    enabled: is_enabled?(service_name),
    type: "systemd",
    params: params,
  }
end

#is_active?(service_name) ⇒ Boolean

Returns:

  • (Boolean)


341
342
343
# File 'lib/inspec/resources/service.rb', line 341

def is_active?(service_name)
  inspec.command("#{service_ctl} is-active #{service_name} --quiet").exit_status == 0
end

#is_enabled?(service_name) ⇒ Boolean

Returns:

  • (Boolean)


327
328
329
330
331
332
333
334
335
336
337
338
339
# File 'lib/inspec/resources/service.rb', line 327

def is_enabled?(service_name)
  result = inspec.command("#{service_ctl} is-enabled #{service_name} --quiet")
  return true if result.exit_status == 0

  # Some systems may not have a `.service` file for a particular service
  # which causes the `systemctl is-enabled` check to fail despite the
  # service being enabled. In that event we fallback to `sysv_service`.
  if result.stderr =~ /Failed to get.*No such file or directory/
    return inspec.sysv_service(service_name).enabled?
  end

  false
end