class PoiseService::ServiceProviders::Inittab

Public Class Methods

provides_auto?(node, resource) click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 27
def self.provides_auto?(node, resource)
  ::File.exist?('/etc/inittab')
end

Public Instance Methods

action_disable() click to toggle source

Don't try to stop when disabling because we can't.

# File lib/poise_service/service_providers/inittab.rb, line 36
def action_disable
  disable_service
  notifying_block do
    destroy_service
  end
end
action_reload() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 57
def action_reload
  return if options['never_reload']
  Process.kill(new_resource.reload_signal, pid) if pid
end
action_restart() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 51
def action_restart
  return if options['never_restart']
  # Just kill it and let init restart it.
  Process.kill(new_resource.stop_signal, pid) if pid
end
action_start() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 43
def action_start
  Chef::Log.debug("[#{new_resource}] Inittab services are always started.")
end
action_stop() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 47
def action_stop
  raise NotImplementedError.new("[#{new_resource}] Inittab services cannot be stopped")
end
pid() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 31
def pid
  IO.read(pid_file).to_i if ::File.exist?(pid_file)
end

Private Instance Methods

create_service() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 75
def create_service
  # Sigh scoping.
  pid_file_ = pid_file
  # Inittab only allows 127 characters for the command, so cram stuff in
  # a file. Writing to a file is gross, but so is using inittab so ¯\_(ツ)_/¯.
  service_template("/sbin/poise_service_#{new_resource.service_name}", 'inittab.sh.erb') do
    mode '755'
    variables.update(
      pid_file: pid_file_,
    )
  end
  # Add to inittab.
  edit_inittab do |content|
    inittab_line = "#{service_id}:2345:respawn:/sbin/poise_service_#{new_resource.service_name}"
    if content =~ /^# #{Regexp.escape(service_tag)}$/
      # Existing line, update in place.
      content.gsub!(/^(# #{Regexp.escape(service_tag)}\n)(.*)$/, "\\1#{inittab_line}")
    else
      # Add to the end.
      content << "# #{service_tag}\n#{inittab_line}\n"
    end
  end
end
destroy_service() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 99
def destroy_service
  # Remove from inittab.
  edit_inittab do |content|
    content.gsub!(/^# #{Regexp.escape(service_tag)}\n.*?\n$/, '')
  end

  file "/sbin/poise_service_#{new_resource.service_name}" do
    action :delete
  end

  file pid_file do
    action :delete
  end
end
disable_service() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 72
def disable_service
end
edit_inittab(&block) click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 136
def edit_inittab(&block)
  inittab = IO.read('/etc/inittab')
  original_inittab = inittab.dup
  block.call(inittab)
  if inittab != original_inittab
    file '/etc/inittab' do
      content inittab
    end

    execute 'telinit q'
  end
end
enable_service() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 69
def enable_service
end
pid_file() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 132
def pid_file
  options['pid_file'] || "/var/run/#{new_resource.service_name}.pid"
end
service_id() click to toggle source

The shortened ID because sysvinit only allows 4 characters.

# File lib/poise_service/service_providers/inittab.rb, line 115
def service_id
  # This is a terrible hash, but it should be good enough.
  options['service_id'] || begin
    sum = new_resource.service_name.sum(20).to_s(36)
    if sum.length < 4
      'p' + sum
    else
      sum
    end
  end
end
service_resource() click to toggle source
# File lib/poise_service/service_providers/inittab.rb, line 64
def service_resource
  # Intentionally not implemented.
  raise NotImplementedError
end
service_tag() click to toggle source

Tag to put in a comment in inittab for tracking.

# File lib/poise_service/service_providers/inittab.rb, line 128
def service_tag
  "poise_service(#{new_resource.service_name})"
end