diff --git a/lib/puppet/util/run_mode.rb b/lib/puppet/util/run_mode.rb index eb9c511dc..450cbf1a6 100644 --- a/lib/puppet/util/run_mode.rb +++ b/lib/puppet/util/run_mode.rb @@ -1,81 +1,81 @@ module Puppet module Util class RunMode def initialize(name) @name = name.to_sym end @@run_modes = Hash.new {|h, k| h[k] = RunMode.new(k)} attr :name def self.[](name) @@run_modes[name] end def master? name == :master end def agent? name == :agent end def user? name == :user end def conf_dir which_dir( (Puppet.features.microsoft_windows? ? File.join(Dir::WINDOWS, "puppet", "etc") : "/etc/puppet"), "~/.puppet" ) end def var_dir which_dir( (Puppet.features.microsoft_windows? ? File.join(Dir::WINDOWS, "puppet", "var") : "/var/lib/puppet"), "~/.puppet/var" ) end def run_dir - which_dir("/var/run/puppet", "~/.puppet/var") + "$vardir/run" end def logopts - if name == :master + if master? { :default => "$vardir/log", - :mode => 0750, - :owner => "service", - :group => "service", - :desc => "The Puppet log directory." + :mode => 0750, + :owner => "service", + :group => "service", + :desc => "The Puppet log directory." } else ["$vardir/log", "The Puppet log directory."] end end private def which_dir( global, user ) #FIXME: we should test if we're user "puppet" # there's a comment that suggests that we do that # and we currently don't. expand_path case - when name == :master; global - when Puppet.features.root?; global - else user + when name == :master; global + when Puppet.features.root?; global + else user end end def expand_path( dir ) require 'etc' ENV["HOME"] ||= Etc.getpwuid(Process.uid).dir File.expand_path(dir) end end end end diff --git a/spec/unit/util/run_mode_spec.rb b/spec/unit/util/run_mode_spec.rb new file mode 100644 index 000000000..d6ab08a10 --- /dev/null +++ b/spec/unit/util/run_mode_spec.rb @@ -0,0 +1,51 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../spec_helper' + +describe Puppet::Util::RunMode do + before do + @run_mode = Puppet::Util::RunMode.new('fake') + end + + it "should have confdir /etc/puppet when run as root" do + Puppet.features.stubs(:root?).returns(true) + @run_mode.conf_dir.should == '/etc/puppet' + end + + it "should have confdir ~/.puppet when run as non-root" do + Puppet.features.stubs(:root?).returns(false) + @run_mode.expects(:expand_path).with("~/.puppet").returns("~/.puppet") + @run_mode.conf_dir.should == "~/.puppet" + end + + it "should have vardir /var/lib/puppet when run as root" do + Puppet.features.stubs(:root?).returns(true) + @run_mode.var_dir.should == '/var/lib/puppet' + end + + it "should have vardir ~/.puppet/var when run as non-root" do + Puppet.features.stubs(:root?).returns(false) + @run_mode.expects(:expand_path).with("~/.puppet/var").returns("~/.puppet/var") + @run_mode.var_dir.should == "~/.puppet/var" + end + + it "should have rundir depend on vardir" do + @run_mode.run_dir.should == '$vardir/run' + end + + it "should have logopts return an array with $vardir/log if runmode is not master" do + @run_mode.expects(:master?).returns false + @run_mode.logopts.should == ["$vardir/log", "The Puppet log directory."] + end + + it "should have logopts return a hash with $vardir/log and other metadata if runmode is master" do + @run_mode.expects(:master?).returns true + @run_mode.logopts.should == { + :default => "$vardir/log", + :mode => 0750, + :owner => "service", + :group => "service", + :desc => "The Puppet log directory.", + } + end +end