Class: Chef::Provider::Service::Daemontools

Inherits:
Chef::Provider::Service show all
Includes:
Mixin::ShellOut
Defined in:
lib/chef/provider/service/daemontools.rb,
lib/chef/provider/service/daemontools/version.rb

Constant Summary collapse

VERSION =
"1.0.5"

Instance Method Summary collapse

Constructor Details

#initialize(new_resource, run_context = nil) ⇒ Daemontools

Returns a new instance of Daemontools.



34
35
36
37
38
# File 'lib/chef/provider/service/daemontools.rb', line 34

def initialize(new_resource, run_context=nil)
  super
  @svc_command    = 'svc'
  @svstat_command = 'svstat'
end

Instance Method Details

#disable_serviceObject



54
55
56
57
58
59
# File 'lib/chef/provider/service/daemontools.rb', line 54

def disable_service
  if @current_resource.enabled
    service_link = "#{@new_resource.service_dir}/#{@new_resource.service_name}"
    shell_out!("rm -f #{service_link} && #{@svc_command} -dx . log", :cwd => service_link)
  end
end

#enable_serviceObject



48
49
50
51
52
# File 'lib/chef/provider/service/daemontools.rb', line 48

def enable_service
  if !@current_resource.enabled
    ::File.symlink(@new_resource.directory, "#{@new_resource.service_dir}/#{@new_resource.service_name}")
  end
end

#load_current_resourceObject



40
41
42
43
44
45
46
# File 'lib/chef/provider/service/daemontools.rb', line 40

def load_current_resource
  @current_resource = Chef::Resource::Service.new(@new_resource.name)
  @current_resource.service_name(@new_resource.service_name)

  service_status!
  @current_resource
end

#reload_serviceObject



73
74
75
76
77
# File 'lib/chef/provider/service/daemontools.rb', line 73

def reload_service
  if @current_resource.enabled && @current_resource.running
    shell_out!("#{@svc_command} -h #{@new_resource.service_dir}/#{@new_resource.service_name}")
  end
end

#restart_serviceObject



79
80
81
82
83
# File 'lib/chef/provider/service/daemontools.rb', line 79

def restart_service
  if @current_resource.enabled && @current_resource.running
    shell_out!("#{@svc_command} -t #{@new_resource.service_dir}/#{@new_resource.service_name}")
  end
end

#service_status!Object



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/chef/provider/service/daemontools.rb', line 85

def service_status!
  service_link = "#{@current_resource.service_dir}/#{@current_resource.service_name}"
  if ::File.symlink?(service_link) && ::File.exist?("#{service_link}/run")
    @current_resource.enabled(true)
    status = shell_out!("#{@svstat_command} #{service_link}")
    if status.exitstatus == 0

      retry_count = 4
      while status.stdout =~ /: supervise not running/ or status.stdout =~ /: unable to open supervise\/ok/
        sleep 1
        retry_count -= 1
        status = shell_out!("#{@svstat_command} #{service_link}")
        break if retry_count < 0
      end

      if status.stdout =~ /: up \(pid [1-9]/
        @current_resource.running(true)
      elsif status.stdout =~ /: down [1-9]/
        @current_resource.running(false)
      else
        @current_resource.running(false)
      end
    else
      @current_resource.running(false)
    end
  else
    @current_resource.enabled(false)
    @current_resource.running(false)
  end

  @current_resource
end

#start_serviceObject



61
62
63
64
65
# File 'lib/chef/provider/service/daemontools.rb', line 61

def start_service
  if @current_resource.enabled && !@current_resource.running
    shell_out!("#{@svc_command} -u #{@new_resource.service_dir}/#{@new_resource.service_name}")
  end
end

#stop_serviceObject



67
68
69
70
71
# File 'lib/chef/provider/service/daemontools.rb', line 67

def stop_service
  if @current_resource.enabled && @current_resource.running
    shell_out!("#{@svc_command} -d #{@new_resource.service_dir}/#{@new_resource.service_name}")
  end
end