Class: Chef::Provider::Service::Windows
- Inherits:
-
Chef::Provider::Service
- Object
- Chef::Provider
- Chef::Provider::Service
- Chef::Provider::Service::Windows
- Includes:
- Mixin::ShellOut
- Defined in:
- lib/chef/provider/service/windows.rb
Constant Summary collapse
- AUTO_START =
Win32::Service.get_start_type
'auto start'
- MANUAL =
'demand start'
- DISABLED =
'disabled'
- RUNNING =
Win32::Service.get_current_state
'running'
- STOPPED =
'stopped'
- CONTINUE_PENDING =
'continue pending'
- PAUSE_PENDING =
'pause pending'
- PAUSED =
'paused'
- START_PENDING =
'start pending'
- STOP_PENDING =
'stop pending'
- TIMEOUT =
60
Constants included from Mixin::ShellOut
Mixin::ShellOut::DEPRECATED_OPTIONS
Instance Attribute Summary
Attributes inherited from Chef::Provider
#action, #cookbook_name, #current_resource, #new_resource, #recipe_name, #run_context
Instance Method Summary collapse
- #action_configure_startup ⇒ Object
- #action_disable ⇒ Object
- #action_enable ⇒ Object
- #disable_service ⇒ Object
- #enable_service ⇒ Object
- #load_current_resource ⇒ Object
- #restart_service ⇒ Object
- #start_service ⇒ Object
- #stop_service ⇒ Object
- #whyrun_supported? ⇒ Boolean
Methods included from Mixin::ShellOut
#run_command_compatible_options, #shell_out, #shell_out!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!
Methods inherited from Chef::Provider::Service
#action_reload, #action_restart, #action_start, #action_stop, #define_resource_requirements, #initialize, #load_new_resource_state, #reload_service, #shared_resource_requirements
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
Methods included from Mixin::Command::Unix
Methods inherited from Chef::Provider
#action_nothing, #cleanup_after_converge, #converge_by, #define_resource_requirements, #events, #initialize, #node, node_map, #process_resource_requirements, provides, provides?, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, #whyrun_mode?
Methods included from Mixin::DescendantsTracker
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
Constructor Details
This class inherits a constructor from Chef::Provider::Service
Instance Method Details
#action_configure_startup ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/chef/provider/service/windows.rb', line 179 def action_configure_startup case @new_resource.startup_type when :automatic if current_start_type != AUTO_START converge_by("set service #{@new_resource} startup type to automatic") do set_startup_type(:automatic) end else Chef::Log.debug("#{@new_resource} startup_type already automatic - nothing to do") end when :manual if current_start_type != MANUAL converge_by("set service #{@new_resource} startup type to manual") do set_startup_type(:manual) end else Chef::Log.debug("#{@new_resource} startup_type already manual - nothing to do") end when :disabled if current_start_type != DISABLED converge_by("set service #{@new_resource} startup type to disabled") do set_startup_type(:disabled) end else Chef::Log.debug("#{@new_resource} startup_type already disabled - nothing to do") end end # Avoid changing enabled from true/false for now @new_resource.enabled(nil) end |
#action_disable ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/chef/provider/service/windows.rb', line 166 def action_disable if current_start_type != DISABLED converge_by("disable service #{@new_resource}") do disable_service Chef::Log.info("#{@new_resource} disabled") end else Chef::Log.debug("#{@new_resource} already disabled - nothing to do") end load_new_resource_state @new_resource.enabled(false) end |
#action_enable ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/chef/provider/service/windows.rb', line 153 def action_enable if current_start_type != AUTO_START converge_by("enable service #{@new_resource}") do enable_service Chef::Log.info("#{@new_resource} enabled") end else Chef::Log.debug("#{@new_resource} already enabled - nothing to do") end load_new_resource_state @new_resource.enabled(true) end |
#disable_service ⇒ Object
145 146 147 148 149 150 151 |
# File 'lib/chef/provider/service/windows.rb', line 145 def disable_service if Win32::Service.exists?(@new_resource.service_name) set_startup_type(:disabled) else Chef::Log.debug "#{@new_resource} does not exist - nothing to do" end end |
#enable_service ⇒ Object
137 138 139 140 141 142 143 |
# File 'lib/chef/provider/service/windows.rb', line 137 def enable_service if Win32::Service.exists?(@new_resource.service_name) set_startup_type(:automatic) else Chef::Log.debug "#{@new_resource} does not exist - nothing to do" end end |
#load_current_resource ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/chef/provider/service/windows.rb', line 53 def load_current_resource @current_resource = Chef::Resource::WindowsService.new(@new_resource.name) @current_resource.service_name(@new_resource.service_name) @current_resource.running(current_state == RUNNING) Chef::Log.debug "#{@new_resource} running: #{@current_resource.running}" case current_start_type when AUTO_START @current_resource.enabled(true) when DISABLED @current_resource.enabled(false) end Chef::Log.debug "#{@new_resource} enabled: #{@current_resource.enabled}" @current_resource end |
#restart_service ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/chef/provider/service/windows.rb', line 122 def restart_service if Win32::Service.exists?(@new_resource.service_name) if @new_resource.restart_command Chef::Log.debug "#{@new_resource} restarting service using the given restart_command" shell_out!(@new_resource.restart_command) else stop_service start_service end @new_resource.updated_by_last_action(true) else Chef::Log.debug "#{@new_resource} does not exist - nothing to do" end end |
#start_service ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/chef/provider/service/windows.rb', line 68 def start_service if Win32::Service.exists?(@new_resource.service_name) state = current_state if state == RUNNING Chef::Log.debug "#{@new_resource} already started - nothing to do" elsif state == START_PENDING Chef::Log.debug "#{@new_resource} already sent start signal - waiting for start" wait_for_state(RUNNING) elsif state == STOPPED if @new_resource.start_command Chef::Log.debug "#{@new_resource} starting service using the given start_command" shell_out!(@new_resource.start_command) else spawn_command_thread do Win32::Service.start(@new_resource.service_name) end wait_for_state(RUNNING) end @new_resource.updated_by_last_action(true) else raise Chef::Exceptions::Service, "Service #{@new_resource} can't be started from state [#{state}]" end else Chef::Log.debug "#{@new_resource} does not exist - nothing to do" end end |
#stop_service ⇒ Object
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 |
# File 'lib/chef/provider/service/windows.rb', line 95 def stop_service if Win32::Service.exists?(@new_resource.service_name) state = current_state if state == RUNNING if @new_resource.stop_command Chef::Log.debug "#{@new_resource} stopping service using the given stop_command" shell_out!(@new_resource.stop_command) else spawn_command_thread do Win32::Service.stop(@new_resource.service_name) end wait_for_state(STOPPED) end @new_resource.updated_by_last_action(true) elsif state == STOPPED Chef::Log.debug "#{@new_resource} already stopped - nothing to do" elsif state == STOP_PENDING Chef::Log.debug "#{@new_resource} already sent stop signal - waiting for stop" wait_for_state(STOPPED) else raise Chef::Exceptions::Service, "Service #{@new_resource} can't be stopped from state [#{state}]" end else Chef::Log.debug "#{@new_resource} does not exist - nothing to do" end end |
#whyrun_supported? ⇒ Boolean
49 50 51 |
# File 'lib/chef/provider/service/windows.rb', line 49 def whyrun_supported? false end |