Class: Chef::Provider::Service::Solaris

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

Constant Summary

Constants included from Mixin::ShellOut

Mixin::ShellOut::DEPRECATED_OPTIONS

Instance Attribute Summary collapse

Attributes inherited from Chef::Provider

#action, #cookbook_name, #current_resource, #new_resource, #recipe_name, #run_context

Instance Method Summary collapse

Methods inherited from Chef::Provider::Service

#action_disable, #action_enable, #action_mask, #action_reload, #action_restart, #action_start, #action_stop, #action_unmask, #load_new_resource_state, #mask_service, #shared_resource_requirements, #supports, #unmask_service, #user_services_requirements, #whyrun_supported?

Methods included from Mixin::Command

#chdir_or_tmpdir, #handle_command_failures, #output_of_command, #run_command, #run_command_and_return_stdout_stderr, #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, #check_resource_semantics!, #cleanup_after_converge, #converge_by, #converge_if_changed, #events, include_resource_dsl, include_resource_dsl_module, #node, #process_resource_requirements, provides, provides?, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use_inline_resources, #whyrun_mode?, #whyrun_supported?

Methods included from Mixin::Provides

#provided_as, #provides, #provides?

Methods included from Mixin::DescendantsTracker

#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited

Methods included from DeprecatedLWRPClass

#const_missing, #deprecated_constants, #register_deprecated_lwrp_class

Methods included from Mixin::LazyModuleInclude

#descendants, #include, #included

Methods included from Mixin::NotifyingBlock

#notifying_block, #subcontext_block

Methods included from DSL::DeclareResource

#build_resource, #declare_resource, #delete_resource, #delete_resource!, #edit_resource, #edit_resource!, #find_resource, #find_resource!, #with_run_context

Methods included from Mixin::ShellOut

#run_command_compatible_options, #shell_out, #shell_out!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!

Methods included from Mixin::PowershellOut

#powershell_out, #powershell_out!

Methods included from Mixin::WindowsArchitectureHelper

#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory

Methods included from DSL::PlatformIntrospection

#docker?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family

Constructor Details

#initialize(new_resource, run_context = nil) ⇒ Solaris

Returns a new instance of Solaris.



31
32
33
34
35
36
# File 'lib/chef/provider/service/solaris.rb', line 31

def initialize(new_resource, run_context = nil)
  super
  @init_command   = "/usr/sbin/svcadm"
  @status_command = "/bin/svcs"
  @maintenace     = false
end

Instance Attribute Details

#maintenanceObject (readonly)

Returns the value of attribute maintenance.



27
28
29
# File 'lib/chef/provider/service/solaris.rb', line 27

def maintenance
  @maintenance
end

Instance Method Details

#define_resource_requirementsObject



52
53
54
55
# File 'lib/chef/provider/service/solaris.rb', line 52

def define_resource_requirements
  # FIXME? need reload from service.rb
  shared_resource_requirements
end

#disable_serviceObject Also known as: stop_service



62
63
64
# File 'lib/chef/provider/service/solaris.rb', line 62

def disable_service
  shell_out!(default_init_command, "disable", "-s", @new_resource.service_name)
end

#enable_serviceObject Also known as: start_service



57
58
59
60
# File 'lib/chef/provider/service/solaris.rb', line 57

def enable_service
  shell_out!(default_init_command, "clear", @new_resource.service_name) if @maintenance
  shell_out!(default_init_command, "enable", "-s", @new_resource.service_name)
end

#load_current_resourceObject



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/chef/provider/service/solaris.rb', line 38

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

  [@init_command, @status_command].each do |cmd|
    unless ::File.executable? cmd then
      raise Chef::Exceptions::Service, "#{cmd} not executable!"
    end
  end
  @status = service_status.enabled

  @current_resource
end

#reload_serviceObject



69
70
71
# File 'lib/chef/provider/service/solaris.rb', line 69

def reload_service
  shell_out!(default_init_command, "refresh", @new_resource.service_name)
end

#restart_serviceObject



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

def restart_service
  ## svcadm restart doesn't supports sync(-s) option
  disable_service
  return enable_service
end

#service_statusObject



79
80
81
82
83
84
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
117
# File 'lib/chef/provider/service/solaris.rb', line 79

def service_status
  cmd = shell_out!(@status_command, "-l", @current_resource.service_name, :returns => [0, 1])
  # Example output
  # $ svcs -l rsyslog
  # fmri         svc:/application/rsyslog:default
  # name         rsyslog logging utility
  # enabled      true
  # state        online
  # next_state   none
  # state_time   April  2, 2015 04:25:19 PM EDT
  # logfile      /var/svc/log/application-rsyslog:default.log
  # restarter    svc:/system/svc/restarter:default
  # contract_id  1115271
  # dependency   require_all/error svc:/milestone/multi-user:default (online)
  # $

  # load output into hash
  status = {}
  cmd.stdout.each_line do |line|
    key, value = line.strip.split(/\s+/, 2)
    status[key] = value
  end

  # check service state
  @maintenance = false
  case status["state"]
  when "online"
    @current_resource.enabled(true)
    @current_resource.running(true)
  when "maintenance"
    @maintenance = true
  end

  unless @current_resource.enabled
    @current_resource.enabled(false)
    @current_resource.running(false)
  end
  @current_resource
end