Class: Yast::ServiceClass

Inherits:
Module
  • Object
show all
Includes:
Logger
Defined in:
../../src/modules/Service.rb

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (ServiceClass) initialize

Returns a new instance of ServiceClass



48
49
50
51
# File '../../src/modules/Service.rb', line 48

def initialize
  textdomain "base"
  @error = ""
end

Instance Attribute Details

- (Object) error

Returns the value of attribute error



45
46
47
# File '../../src/modules/Service.rb', line 45

def error
  @error
end

Instance Method Details

- (Object) Active(service_name) Also known as: active?

Check if service is active/running

Parameters:

  • name (String)

    service name

Returns:

  • true if service is active



86
87
88
89
# File '../../src/modules/Service.rb', line 86

def Active service_name
  service = SystemdService.find(service_name)
  !!(service && service.active?)
end

- (Boolean) Adjust(name, action)

Deprecated.

Use the specific methods: Enable or Disable

Adjusts runlevels in which the service runs.

Parameters:

  • string

    service name

  • action (String)

    “disable” – remove links, “enable” – if there are no links, set default, otherwise do nothing, “default” – set defaults.

Returns:

  • (Boolean)

    success state



305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
# File '../../src/modules/Service.rb', line 305

def Adjust name, action
  deprecate("use `enable` or `disable` instead")

  service = SystemdService.find(name)
  return failure(:not_found, name) unless service

  case action
  when "disable"
    service.disable
  when "enable", "default"
    service.enable
  else
    log.error "Unknown action '#{action}' for service '#{name}'"
    false
  end
end

- (Boolean) call(command_name, service_name)

Send whatever systemd command you need to call for a specific service If the command fails, log entry with output from systemctl is created in y2log

Parameters:

  • Command (String, String)

    name and service name

Returns:

  • (Boolean)

    Result of the action, true means success



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File '../../src/modules/Service.rb', line 57

def call command_name, service_name
  service = SystemdService.find(service_name)
  return failure(:not_found, service_name) unless service

  systemd_command =
    case command_name
      when 'show'    then :show
      when 'status'  then :status
      when 'start'   then :start
      when 'stop'    then :stop
      when 'enable'  then :enable
      when 'disable' then :disable
      when 'restart' then :restart
      when 'reload'  then :reload
      when 'try-restart' then :try_restart
      when 'reload-or-restart' then :reload_or_restart
      when 'reload-or-try-restart' then :reload_or_try_restart
      else
        raise "Command '#{command_name}' not supported"
    end
  result = service.send(systemd_command)
  failure(command_name, service_name, service.error) unless result
  result
end

- (Object) checkExists(name)

Deprecated.

Use SystemdService.find

Check that a service exists. If not, set error_msg.

Parameters:

  • name (String)

    service name without a path, eg. nfsserver

Returns:

  • Return true if the service exists.



205
206
207
208
209
210
# File '../../src/modules/Service.rb', line 205

def checkExists name
  deprecate("use `SystemdService.find` instead")

  return failure(:not_found, name) unless SystemdService.find(name)
  true
end

- (Object) Disable(service_name) Also known as: disable

Disable service Logs error with output from systemctl if the command fails

Parameters:

  • service (String)

    service to be disabled

Returns:

  • true if operation is successful



124
125
126
127
128
129
130
# File '../../src/modules/Service.rb', line 124

def Disable service_name
  log.info "Disabling service '#{service_name}'"
  service = SystemdService.find(service_name)
  return failure(:not_found, service_name) unless service
  return failure(:disable, service_name, service.error) unless service.disable
  true
end

- (Object) Enable(service_name) Also known as: enable

Enable service Logs error with output from systemctl if the command fails

Parameters:

  • service (String)

    service to be enabled

Returns:

  • true if operation is successful



110
111
112
113
114
115
116
# File '../../src/modules/Service.rb', line 110

def Enable service_name
  log.info "Enabling service '#{service_name}'"
  service = SystemdService.find(service_name)
  return failure(:not_found, service_name) unless service
  return failure(:enable, service_name, service.error) unless service.enable
  true
end

- (Object) Enabled(name) Also known as: enabled?

Check if service is enabled (in any runlevel)

Forwards to chkconfig -l which decides between init and systemd

Parameters:

  • name (String)

    service name

Returns:

  • true if service is set to run in any runlevel



99
100
101
102
# File '../../src/modules/Service.rb', line 99

def Enabled name
  service = SystemdService.find(name)
  !!(service && service.enabled?)
end

- (Array<String>) EnabledServices(runlevel)

Deprecated.

Runlevel features are not supported by systemd

Get list of enabled services in a runlevel

Parameters:

  • runlevel (Fixnum)

    requested runlevel number (0-6, -1 = Single)

Returns:

  • (Array<String>)

    enabled services



416
417
418
419
420
# File '../../src/modules/Service.rb', line 416

def EnabledServices runlevel
  deprecate("use `SystemdService.all.select(&:enabled?)`")

  SystemdService.all.select(&:enabled?).map(&:name)
end

- (Object) Error

Error Message

If a Service function returns an error, this function would return an error message, including insserv stderr and possibly containing newlines.

Returns:

  • error message from the last operation



196
197
198
# File '../../src/modules/Service.rb', line 196

def Error
  error
end

- (String) Find(services)

Deprecated.

Use SystemdService.find instead

Return the first of the list of services which is available (has init script) or “” if none is.

Parameters:

  • list (string)

    list of service names

Returns:

  • (String)

    the first found service



427
428
429
430
431
# File '../../src/modules/Service.rb', line 427

def Find services
  deprecate("use `SystemdService.find` instead")

  services.find {|service_name| SystemdService.find(service_name) }
end

- (Object) Finetune(name, rl)

Deprecated.

Use Enable or Disable instead

Set service to run in selected runlevels. Obsoleted - enables or disables the given service depending on the list of runlevels to start. If any runlevel is present, service is enabled, otherwise disabled.

Parameters:

  • name (String)

    name of service to adjust

  • rl (Array)

    list of runlevels in which service should start

Returns:

  • success state



331
332
333
334
335
336
337
338
339
340
341
342
343
# File '../../src/modules/Service.rb', line 331

def Finetune name, rl
  deprecate("use `enable` or `disable` instead")

  service = SystemdService.find(name)
  return failure(:not_found, name) unless service

  if rl.empty?
    service.disable
  else
    log.warn "Cannot enable service '#{name}' in selected runlevels, enabling for all"
    service.enable
  end
end

- (Object) FullInfo(name)

Deprecated.

Not supported by systemd

Get service info and find out whether service is running.

Parameters:

  • name (String)

    name of the service

Returns:

  • service map or empty map ($[])



276
277
278
279
280
281
# File '../../src/modules/Service.rb', line 276

def FullInfo name
  deprecate("not supported by systemd")

  return {} if !checkExists(name)
  Builtins.add(Info(name), "started", Status(name))
end

- (resolved) GetServiceId(name)

Deprecated.

Use SystemdService.find('service_name').name

Get the name from a systemd service unit id without the .service suffix

Parameters:

  • name (String)

    name or alias of the service

Returns:

  • (resolved)

    service name without the .service suffix



249
250
251
252
253
254
255
# File '../../src/modules/Service.rb', line 249

def GetServiceId name
  deprecate("use SystemdService.find('service_name').name")

  unit = SystemdService.find(name)
  return nil unless unit
  unit.name
end

- (resolved) GetUnitId(unit)

Deprecated.

Use SystemdService.find('service_name').id

Get complete systemd unit id

Parameters:

  • name

    name or alias of the unit

Returns:

  • (resolved)

    unit Id



237
238
239
240
241
242
243
# File '../../src/modules/Service.rb', line 237

def GetUnitId unit
  deprecate("use SystemdService.find('service_name').id")

  unit = SystemdService.find(unit)
  return nil unless unit
  unit.id
end

- (Object) Info(name)

Deprecated.

Not supported by systemd

Get service info without peeking if service runs.

Parameters:

  • name (String)

    name of the service

Returns:

  • Service information or empty map ($[])



216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# File '../../src/modules/Service.rb', line 216

def Info name
  deprecate("not supported by systemd")

  unit = SystemdService.find(name)
  return {} unless unit

  read = Convert.to_map(SCR.Read(path(".init.scripts.runlevel"), name))
  detail = Ops.get_map(read, name, {})
  read = Convert.to_map(SCR.Read(path(".init.scripts.comment"), name))
  service = Ops.get_map(read, name, {})
  Builtins.add(
    Builtins.add(service, "start", Ops.get_list(detail, "start", [])),
    "stop",
    Ops.get_list(detail, "stop", [])
  )
end

- (Object) Reload(service_name) Also known as: reload

Reload service Logs error with output from systemctl if the command fails

Parameters:

  • service (String)

    service to be reloaded

Returns:

  • true if operation is successful



166
167
168
169
170
171
172
# File '../../src/modules/Service.rb', line 166

def Reload service_name
  log.info "Reloading service '#{service_name}'"
  service = SystemdService.find(service_name)
  return failure(:not_found, service_name) unless service
  return failure(:reload, service_name, service.error) unless service.reload
  true
end

- (Object) Restart(service_name) Also known as: restart

Restart service Logs error with output from systemctl if the command fails

Parameters:

  • service (String)

    service to be restarted

Returns:

  • true if operation is successful



152
153
154
155
156
157
158
# File '../../src/modules/Service.rb', line 152

def Restart service_name
  log.info "Restarting service '#{service_name}'"
  service = SystemdService.find(service_name)
  return failure(:not_found, service_name) unless service
  return failure(:restart, service_name, service.error) unless service.restart
  true
end

- (Fixnum) RunInitScript(name, param)

Deprecated.

Use specific method for service configuration

Run init script.

Parameters:

  • name (String)

    init service name

  • param (String)

    init script argument

Returns:

  • (Fixnum)

    exit value



350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
# File '../../src/modules/Service.rb', line 350

def RunInitScript name, param
  deprecate("use the specific unit command instead")

  service = SystemdService.find(name)
  if !service
    failure(:not_found, name)
    return -1
  end

  result =
    case param
    when 'start', 'stop', 'status', 'reload', 'restart', 'enable', 'disable'
      service.send(param)
    when 'try-restart'
      service.try_restart
    when 'reload-or-restart'
      service.reload_or_restart
    when 'reload-or-try-restart'
      service.reload_or_try_restart
    else
      log.error "Unknown action '#{param}' for service '#{name}'"
      false
    end

  result ? 0 : -1
end

- (Object) RunInitScriptOutput(name, param)

Deprecated.

Use a specific method instread

Run init script and also return its output (stdout and stderr merged).

Parameters:

  • name (String)

    init service name

  • param (String)

    init script argument

Returns:

  • A map of $[ “stdout” : “…”, “stderr” : “…”, “exit” : int]



398
399
400
401
402
403
404
405
406
407
408
409
410
# File '../../src/modules/Service.rb', line 398

def RunInitScriptOutput name, param
  deprecate("use `start` or `stop` instead")

  service = SystemdService.find(name)
  if !service
    failure(:not_found, name)
    success = false
  else
    success = service.send(param)
    self.error = service.error
  end
  {'stdout'=>'', 'stderr'=>error, 'exit'=> success ? 0 : 1 }
end

- (Fixnum) RunInitScriptWithTimeOut(name, param)

Deprecated.

Use specific unit methods for service configuration

Run init script with a time-out.

Parameters:

  • name (String)

    init service name

  • param (String)

    init script argument

Returns:

  • (Fixnum)

    exit value



382
383
384
385
386
387
388
389
390
391
# File '../../src/modules/Service.rb', line 382

def RunInitScriptWithTimeOut name, param
  deprecate("use `start` or `stop` instead")

  service = SystemdService.find(name)
  if !service
    failure(:not_found, name)
    return 1
  end
  service.send(param) ? 0 : 1
end

- (Object) serviceDisable(name, force)

Deprecated.

Use Disable instead

Disables a given service and records errors. Does not check if it exists.

Parameters:

  • name (String)

    service name

  • force (Boolean)

    pass “–force” (workaround for #17608, #27370)

Returns:

  • success state



290
291
292
293
294
295
# File '../../src/modules/Service.rb', line 290

def serviceDisable name, force
  deprecate("use `disable` instead")

  unit = SystemdService.find(name)
  !!(unit && unit.disable)
end

- (Object) Start(service_name) Also known as: start

Start service Logs error with output from systemctl if the command fails

Parameters:

  • service (String)

    service to be started

Returns:

  • true if operation is successful



138
139
140
141
142
143
144
# File '../../src/modules/Service.rb', line 138

def Start service_name
  log.info "Starting service '#{service_name}'"
  service = SystemdService.find(service_name)
  return failure(:not_found, service_name) unless service
  return failure(:start, service_name, service.error) unless service.start
  true
end

- (Object) Status(name)

Deprecated.

Use Active instead

Get service status. The status is the output from “service status”. It should conform to LSB. 0 means the service is running.

Parameters:

  • name (String)

    name of the service

Returns:

  • init script exit status or -1 if it does not exist



263
264
265
266
267
268
269
270
# File '../../src/modules/Service.rb', line 263

def Status name
  deprecate("use `active?` instead")

  unit = SystemdService.find(name)
  failure(:not_found, name) unless unit

  unit && unit.active? ? 0 : -1
end

- (Object) Stop(service_name) Also known as: stop

Stop service Logs error with output from systemctl if the command fails

Parameters:

  • service (String)

    service to be stopped

Returns:

  • true if operation is successful



180
181
182
183
184
185
186
# File '../../src/modules/Service.rb', line 180

def Stop service_name
  log.info "Stopping service '#{service_name}'"
  service = SystemdService.find(service_name)
  return failure(:not_found, service_name) unless service
  return failure(:stop, service_name, service.error) unless service.stop
  true
end