summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/provider/service/windows.rb13
-rwxr-xr-xspec/unit/provider/service/windows_spec.rb27
2 files changed, 40 insertions, 0 deletions
diff --git a/lib/puppet/provider/service/windows.rb b/lib/puppet/provider/service/windows.rb
index d77f3b44a..f1485f268 100644
--- a/lib/puppet/provider/service/windows.rb
+++ b/lib/puppet/provider/service/windows.rb
@@ -59,6 +59,19 @@ Puppet::Type.type(:service).provide :windows do
end
def start
+ if enabled? == :false
+ # If disabled and not managing enable, respect disabled and fail.
+ if @resource[:enable].nil?
+ raise Puppet::Error, "Will not start disabled service #{@resource[:name]} without managing enable. Specify 'enable => false' to override."
+ # Otherwise start. If enable => false, we will later sync enable and
+ # disable the service again.
+ elsif @resource[:enable] == :true
+ enable
+ else
+ manual_start
+ end
+ end
+
Win32::Service.start( @resource[:name] )
rescue Win32::Service::Error => detail
raise Puppet::Error.new("Cannot start #{@resource[:name]}, error was: #{detail}" )
diff --git a/spec/unit/provider/service/windows_spec.rb b/spec/unit/provider/service/windows_spec.rb
index 0667d4694..2012a184a 100755
--- a/spec/unit/provider/service/windows_spec.rb
+++ b/spec/unit/provider/service/windows_spec.rb
@@ -50,6 +50,33 @@ describe Puppet::Type.type(:service).provider(:windows), :if => Puppet.features.
/Cannot start snmptrap, error was: The service cannot be started, either/
)
end
+
+ describe "when the service is disabled" do
+ before :each do
+ @config.start_type = Win32::Service.get_start_type(Win32::Service::SERVICE_DISABLED)
+ Win32::Service.stubs(:start).with(@resource[:name])
+ end
+
+ it "should refuse to start if not managing enable" do
+ expect { @resource.provider.start }.to raise_error(Puppet::Error, /Will not start disabled service/)
+ end
+
+ it "should enable if managing enable and enable is true" do
+ @resource[:enable] = :true
+
+ Win32::Service.expects(:configure).with('service_name' => @resource[:name], 'start_type' => Win32::Service::SERVICE_AUTO_START).returns(Win32::Service)
+
+ @resource.provider.start
+ end
+
+ it "should manual start if managing enable and enable is false" do
+ @resource[:enable] = :false
+
+ Win32::Service.expects(:configure).with('service_name' => @resource[:name], 'start_type' => Win32::Service::SERVICE_DEMAND_START).returns(Win32::Service)
+
+ @resource.provider.start
+ end
+ end
end
describe "#stop" do