class Chef::Provider::Service

Public Class Methods

new(new_resource, run_context) click to toggle source
Calls superclass method Chef::Provider::new
# File lib/chef/provider/service.rb, line 30
def initialize(new_resource, run_context)
  super
  @enabled = nil
end

Public Instance Methods

action_disable() click to toggle source
# File lib/chef/provider/service.rb, line 93
def action_disable
  if current_resource.enabled
    converge_by("disable service #{new_resource}") do
      disable_service
      logger.info("#{new_resource} disabled")
    end
  else
    logger.trace("#{new_resource} already disabled - nothing to do")
  end
  load_new_resource_state
  new_resource.enabled(false)
end
action_enable() click to toggle source
# File lib/chef/provider/service.rb, line 80
def action_enable
  if current_resource.enabled
    logger.trace("#{new_resource} already enabled - nothing to do")
  else
    converge_by("enable service #{new_resource}") do
      enable_service
      logger.info("#{new_resource} enabled")
    end
  end
  load_new_resource_state
  new_resource.enabled(true)
end
action_mask() click to toggle source
# File lib/chef/provider/service.rb, line 106
def action_mask
  if current_resource.masked
    logger.trace("#{new_resource} already masked - nothing to do")
  else
    converge_by("mask service #{new_resource}") do
      mask_service
      logger.info("#{new_resource} masked")
    end
  end
  load_new_resource_state
  new_resource.masked(true)
end
action_reload() click to toggle source
# File lib/chef/provider/service.rb, line 167
def action_reload
  if current_resource.running
    converge_by("reload service #{new_resource}") do
      reload_service
      logger.info("#{new_resource} reloaded")
    end
  end
  load_new_resource_state
end
action_restart() click to toggle source
# File lib/chef/provider/service.rb, line 158
def action_restart
  converge_by("restart service #{new_resource}") do
    restart_service
    logger.info("#{new_resource} restarted")
  end
  load_new_resource_state
  new_resource.running(true)
end
action_start() click to toggle source
# File lib/chef/provider/service.rb, line 132
def action_start
  unless current_resource.running
    converge_by("start service #{new_resource}") do
      start_service
      logger.info("#{new_resource} started")
    end
  else
    logger.trace("#{new_resource} already running - nothing to do")
  end
  load_new_resource_state
  new_resource.running(true)
end
action_stop() click to toggle source
# File lib/chef/provider/service.rb, line 145
def action_stop
  if current_resource.running
    converge_by("stop service #{new_resource}") do
      stop_service
      logger.info("#{new_resource} stopped")
    end
  else
    logger.trace("#{new_resource} already stopped - nothing to do")
  end
  load_new_resource_state
  new_resource.running(false)
end
action_unmask() click to toggle source
# File lib/chef/provider/service.rb, line 119
def action_unmask
  if current_resource.masked
    converge_by("unmask service #{new_resource}") do
      unmask_service
      logger.info("#{new_resource} unmasked")
    end
  else
    logger.trace("#{new_resource} already unmasked - nothing to do")
  end
  load_new_resource_state
  new_resource.masked(false)
end
define_resource_requirements() click to toggle source
# File lib/chef/provider/service.rb, line 70
def define_resource_requirements
  requirements.assert(:reload) do |a|
    a.assertion { supports[:reload] || new_resource.reload_command }
    a.failure_message Chef::Exceptions::UnsupportedAction, "#{self} does not support :reload"
    # if a service is not declared to support reload, that won't
    # typically change during the course of a run - so no whyrun
    # alternative here.
  end
end
disable_service() click to toggle source
# File lib/chef/provider/service.rb, line 181
def disable_service
  raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :disable"
end
enable_service() click to toggle source
# File lib/chef/provider/service.rb, line 177
def enable_service
  raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :enable"
end
load_current_resource() click to toggle source
# File lib/chef/provider/service.rb, line 35
def load_current_resource
  supports[:status] = false if supports[:status].nil?
  supports[:reload] = false if supports[:reload].nil?
  supports[:restart] = false if supports[:restart].nil?
end
load_new_resource_state() click to toggle source

the new_resource#enabled and running variables are not user input, but when we do (e.g.) action_enable we want to set new_resource.enabled so that the comparison between desired and current state produces the correct change in reporting. XXX?: the nil? check below will likely fail if this is a cloned resource or if we just run multiple actions.

# File lib/chef/provider/service.rb, line 46
def load_new_resource_state
  if new_resource.enabled.nil?
    new_resource.enabled(current_resource.enabled)
  end
  if new_resource.running.nil?
    new_resource.running(current_resource.running)
  end
  if new_resource.masked.nil?
    new_resource.masked(current_resource.masked)
  end
end
mask_service() click to toggle source
# File lib/chef/provider/service.rb, line 185
def mask_service
  raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :mask"
end
reload_service() click to toggle source
# File lib/chef/provider/service.rb, line 205
def reload_service
  raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :reload"
end
restart_service() click to toggle source
# File lib/chef/provider/service.rb, line 201
def restart_service
  raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :restart"
end
shared_resource_requirements() click to toggle source
# File lib/chef/provider/service.rb, line 66
def shared_resource_requirements
  user_services_requirements
end
start_service() click to toggle source
# File lib/chef/provider/service.rb, line 193
def start_service
  raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :start"
end
stop_service() click to toggle source
# File lib/chef/provider/service.rb, line 197
def stop_service
  raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :stop"
end
supports() click to toggle source
# File lib/chef/provider/service.rb, line 26
def supports
  @supports ||= new_resource.supports.dup
end
unmask_service() click to toggle source
# File lib/chef/provider/service.rb, line 189
def unmask_service
  raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :unmask"
end
user_services_requirements() click to toggle source

subclasses should override this if they do implement user services

# File lib/chef/provider/service.rb, line 59
def user_services_requirements
  requirements.assert(:all_actions) do |a|
    a.assertion { new_resource.user.nil? }
    a.failure_message Chef::Exceptions::UnsupportedAction, "#{self} does not support user services"
  end
end

Protected Instance Methods

custom_command_for_action?(action) click to toggle source
# File lib/chef/provider/service.rb, line 219
def custom_command_for_action?(action)
  method_name = "#{action}_command".to_sym
  new_resource.respond_to?(method_name) &&
    !!new_resource.send(method_name)
end
default_init_command() click to toggle source
# File lib/chef/provider/service.rb, line 211
def default_init_command
  if new_resource.init_command
    new_resource.init_command
  elsif instance_variable_defined?(:@init_command)
    @init_command
  end
end