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