Class: Chef::Provider::Service::Simple

Inherits:
Chef::Provider::Service show all
Defined in:
lib/chef/provider/service/simple.rb

Direct Known Subclasses

Init

Instance Attribute Summary

Attributes inherited from Chef::Provider

#current_resource, #new_resource, #node

Instance Method Summary collapse

Methods inherited from Chef::Provider::Service

#action_disable, #action_enable, #action_reload, #action_restart, #action_start, #action_stop, #disable_service, #enable_service, #initialize

Methods included from Mixin::Command

handle_command_failures, not_if, only_if, output_of_command, popen4, run_command, run_command_with_systems_locale

Methods inherited from Chef::Provider

#action_nothing, build_from_file, #initialize

Methods included from Mixin::ConvertToClassName

#convert_to_class_name, #filename_to_qualified_string

Methods included from Mixin::RecipeDefinitionDSLCore

#method_missing

Constructor Details

This class inherits a constructor from Chef::Provider::Service

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Chef::Mixin::RecipeDefinitionDSLCore

Instance Method Details

#load_current_resourceObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/chef/provider/service/simple.rb', line 26

def load_current_resource
  @current_resource = Chef::Resource::Service.new(@new_resource.name)
  @current_resource.service_name(@new_resource.service_name)
  if @new_resource.status_command
    Chef::Log.debug("#{@new_resource} you have specified a status command, running..")

    begin
      if run_command(:command => @new_resource.status_command) == 0
        @current_resource.running true
      end
    rescue Chef::Exceptions::Exec
      @current_resource.running false
      nil
    end

  elsif @new_resource.supports[:status]
    Chef::Log.debug("#{@new_resource} supports status, running")

    begin
      if run_command(:command => "#{@init_command} status") == 0
        @current_resource.running true
      end
    rescue Chef::Exceptions::Exec
      @current_resource.running false
      nil
    end
  elsif
    Chef::Log.warn "#{@new_resource}: falling back to process table inspection"
    if @node[:command][:ps].nil? or @node[:command][:ps].empty?
      raise Chef::Exceptions::Service, "#{@new_resource}: could not determine how to inspect the process table, please set this nodes 'command.ps' attribute"
    end
    status = popen4(@node[:command][:ps]) do |pid, stdin, stdout, stderr|
      stdin.close rescue nil
      r = Regexp.new(@new_resource.pattern)
      Chef::Log.warn "#{@new_resource}: attempting to match '#{@new_resource.pattern}' (#{r}) against process list"
      stdout.each_line do |line|
        if r.match(line)
          @current_resource.running true
          break
        end
      end
      @current_resource.running false unless @current_resource.running
    end
    unless status.exitstatus == 0
      raise Chef::Exceptions::Service, "Command #{@node[:command][:ps]} failed"
    else
      Chef::Log.debug "#{@new_resource}: running: #{@current_resource.running}"
    end
  end

  @current_resource
end

#reload_serviceObject



105
106
107
108
109
110
111
# File 'lib/chef/provider/service/simple.rb', line 105

def reload_service
  if @new_resource.reload_command
    run_command(:command => @new_resource.reload_command)
  else
    raise Chef::Exceptions::Service, "#{self.to_s} requires that reload_command to be set"
  end
end

#restart_serviceObject



95
96
97
98
99
100
101
102
103
# File 'lib/chef/provider/service/simple.rb', line 95

def restart_service
  if @new_resource.restart_command
    run_command(:command => @new_resource.restart_command)
  else
    stop_service
    sleep 1
    start_service
  end
end

#start_serviceObject



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

def start_service
  if @new_resource.start_command
    run_command(:command => @new_resource.start_command)
  else
    raise Chef::Exceptions::Service, "#{self.to_s} requires that start_command to be set"
  end
end

#stop_serviceObject



87
88
89
90
91
92
93
# File 'lib/chef/provider/service/simple.rb', line 87

def stop_service
  if @new_resource.stop_command
    run_command(:command => @new_resource.stop_command)
  else
    raise Chef::Exceptions::Service, "#{self.to_s} requires that stop_command to be set"
  end
end