Running "/etc/rc.d/SERVICE rcvar" outputs different formats for different versions of FreeBSD. This patch adds support for those formats, as well as tests.
Based on patches from: o Joost van Beurden o Russell Jackson Paired-With: Matt Robinson Signed-off-by: Nick Lewis <[email protected]> --- lib/puppet/provider/service/freebsd.rb | 5 ++- spec/unit/provider/service/freebsd_spec.rb | 50 ++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletions(-) create mode 100644 spec/unit/provider/service/freebsd_spec.rb diff --git a/lib/puppet/provider/service/freebsd.rb b/lib/puppet/provider/service/freebsd.rb index c75c3c9..f8c7134 100644 --- a/lib/puppet/provider/service/freebsd.rb +++ b/lib/puppet/provider/service/freebsd.rb @@ -18,6 +18,9 @@ Puppet::Type.type(:service).provide :freebsd, :parent => :init do def rcvar rcvar = execute([self.initscript, :rcvar], :failonfail => true, :squelch => false) rcvar = rcvar.split("\n") + rcvar.delete_if {|str| str =~ /^#\s*$/} + rcvar[1] = rcvar[1].gsub(/^\$/, '') + rcvar end # Extract service name @@ -44,7 +47,7 @@ Puppet::Type.type(:service).provide :freebsd, :parent => :init do def rcvar_value value = self.rcvar[1] self.error("No rcvar value found in rcvar") if value.nil? - value = value.gsub!(/(.*)_enable=\"?(.*)\"?/, '\2') + value = value.gsub!(/(.*)_enable="?(\w+)"?/, '\2') self.error("rcvar value is empty") if value.nil? self.debug("rcvar value is #{value}") value diff --git a/spec/unit/provider/service/freebsd_spec.rb b/spec/unit/provider/service/freebsd_spec.rb new file mode 100644 index 0000000..0330adb --- /dev/null +++ b/spec/unit/provider/service/freebsd_spec.rb @@ -0,0 +1,50 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../../spec_helper' + +provider_class = Puppet::Type.type(:service).provider(:freebsd) + +describe provider_class do + before :each do + @provider = provider_class.new + @provider.stubs(:initscript) + end + + it "should correctly parse rcvar for FreeBSD < 7" do + @provider.stubs(:execute).returns <<OUTPUT +# ntpd +$ntpd_enable=YES +OUTPUT + @provider.rcvar.should == ['# ntpd', 'ntpd_enable=YES'] + end + + it "should correctly parse rcvar for FreeBSD 7 to 8" do + @provider.stubs(:execute).returns <<OUTPUT +# ntpd +ntpd_enable=YES +OUTPUT + @provider.rcvar.should == ['# ntpd', 'ntpd_enable=YES'] + end + + it "should correctly parse rcvar for FreeBSD >= 8.1" do + @provider.stubs(:execute).returns <<OUTPUT +# ntpd +# +ntpd_enable="YES" +# (default: "") +OUTPUT + @provider.rcvar.should == ['# ntpd', 'ntpd_enable="YES"', '# (default: "")'] + end + + it "should find the right rcvar_value for FreeBSD < 7" do + @provider.stubs(:rcvar).returns(['# ntpd', 'ntpd_enable=YES']) + + @provider.rcvar_value.should == "YES" + end + + it "should find the right rcvar_value for FreeBSD >= 7" do + @provider.stubs(:rcvar).returns(['# ntpd', 'ntpd_enable="YES"', '# (default: "")']) + + @provider.rcvar_value.should == "YES" + end +end -- 1.7.2.3 -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
