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

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

Direct Known Subclasses

Init, Upstart, Windows

Instance Attribute Summary

Attributes inherited from Chef::Provider

#current_resource, #new_resource, #run_context

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

#chdir_or_tmpdir, #handle_command_failures, #not_if, #only_if, #output_of_command, #run_command, #run_command_with_systems_locale

Methods included from Mixin::Command::Windows

#popen4

Methods included from Mixin::Command::Unix

#popen4

Methods inherited from Chef::Provider

#action_nothing, build_from_file, #cookbook_name, #initialize, #node, #resource_collection

Methods included from Mixin::ConvertToClassName

#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename

Methods included from Mixin::RecipeDefinitionDSLCore

#method_missing

Methods included from Mixin::Language

#data_bag, #data_bag_item, #platform?, #search, #value_for_platform

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
# 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
  else
    Chef::Log.debug "#{@new_resource}: falling back to process table inspection"
    if ps_cmd.nil? or ps_cmd.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(ps_cmd) do |pid, stdin, stdout, stderr|
      r = Regexp.new(@new_resource.pattern)
      Chef::Log.debug "#{@new_resource}: attempting to match '#{@new_resource.pattern}' (#{r.inspect}) 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 #{ps_cmd} failed"
    else
      Chef::Log.debug "#{@new_resource}: running: #{@current_resource.running}"
    end
  end

  @current_resource
end

#ps_cmdObject



112
113
114
# File 'lib/chef/provider/service/simple.rb', line 112

def ps_cmd
  @run_context.node[:command] && @run_context.node[:command][:ps]
end

#reload_serviceObject



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

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



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

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



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

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



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

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