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

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

Instance Attribute Summary collapse

Attributes inherited from Chef::Provider

#action, #current_resource, #logger, #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

Methods inherited from Chef::Provider

action, #action_nothing, #check_resource_semantics!, #cleanup_after_converge, #compile_and_converge_action, #converge_by, #converge_if_changed, #cookbook_name, #description, #events, include_resource_dsl?, include_resource_dsl_module, #introduced, #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 Mixin::LazyModuleInclude

#descendants, #include, #included

Methods included from Mixin::ShellOut

apply_default_env, maybe_add_timeout, #shell_out, #shell_out!

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 Mixin::PowershellExec

#powershell_exec

Methods included from DSL::Powershell

#ps_credential

Methods included from DSL::RegistryHelper

#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?

Methods included from DSL::DataQuery

#data_bag, #data_bag_item, #search, #tagged?

Methods included from EncryptedDataBagItem::CheckEncrypted

#encrypted?

Methods included from DSL::PlatformIntrospection

#older_than_win_2012_or_8?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family

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!, #resources, #with_run_context

Constructor Details

#initialize(new_resource, run_context = nil) ⇒ Solaris

Returns a new instance of Solaris.



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

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

Instance Attribute Details

#maintenanceObject (readonly)

Returns the value of attribute maintenance.



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

def maintenance
  @maintenance
end

Instance Method Details

#define_resource_requirementsObject



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

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

#disable_serviceObject Also known as: stop_service



64
65
66
67
# File 'lib/chef/provider/service/solaris.rb', line 64

def disable_service
  disable_flags = [ "-s", @new_resource.options ].flatten.compact
  shell_out!(default_init_command, "disable", *disable_flags, @new_resource.service_name)
end

#enable_serviceObject Also known as: start_service



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

def enable_service
  # Running service status to update maintenance status to invoke svcadm clear
  service_status
  shell_out!(default_init_command, "clear", @new_resource.service_name) if @maintenance
  enable_flags = [ "-s", @new_resource.options ].flatten.compact
  shell_out!(default_init_command, "enable", *enable_flags, @new_resource.service_name)
end

#load_current_resourceObject



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

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
      raise Chef::Exceptions::Service, "#{cmd} not executable!"
    end
  end
  @status = service_status.enabled

  @current_resource
end

#reload_serviceObject



72
73
74
# File 'lib/chef/provider/service/solaris.rb', line 72

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

#restart_serviceObject



76
77
78
79
80
# File 'lib/chef/provider/service/solaris.rb', line 76

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

#service_statusObject



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
118
119
120
121
122
# File 'lib/chef/provider/service/solaris.rb', line 82

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)
  # $

  # Set the default value for maintenance
  @maintenance = false

  # 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
  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