diff --git a/lib/puppet/defaults.rb b/lib/puppet/defaults.rb index 97fed251066..4da81cf620d 100644 --- a/lib/puppet/defaults.rb +++ b/lib/puppet/defaults.rb @@ -47,29 +47,11 @@ def self.default_cadir end def self.default_basemodulepath - if Puppet::Util::Platform.windows? - path = ['$codedir/modules'] - installdir = ENV.fetch("FACTER_env_windows_installdir", nil) - if installdir - path << "#{installdir}/puppet/modules" - end - path.join(File::PATH_SEPARATOR) - else - '$codedir/modules:/opt/puppetlabs/puppet/modules' - end - end - - def self.default_vendormoduledir - if Puppet::Util::Platform.windows? - installdir = ENV.fetch("FACTER_env_windows_installdir", nil) - if installdir - "#{installdir}\\puppet\\vendor_modules" - else - nil - end - else - '/opt/puppetlabs/puppet/vendor_modules' + path = ['$codedir/modules'] + if (run_mode_dir = Puppet.run_mode.common_module_dir) + path << run_mode_dir end + path.join(File::PATH_SEPARATOR) end ############################################################################################ @@ -1437,7 +1419,7 @@ def self.initialize_default_settings!(settings) ", }, :vendormoduledir => { - :default => -> { default_vendormoduledir }, + :default => -> { Puppet.run_mode.vendor_module_dir }, :type => :string, :desc => "The directory containing **vendored** modules. These modules will be used by _all_ environments like those in the `basemodulepath`. The only diff --git a/lib/puppet/provider/package/puppet_gem.rb b/lib/puppet/provider/package/puppet_gem.rb index 3adde08a2d9..3578a05c197 100644 --- a/lib/puppet/provider/package/puppet_gem.rb +++ b/lib/puppet/provider/package/puppet_gem.rb @@ -8,20 +8,7 @@ confine :true => Puppet.runtime[:facter].value(:aio_agent_version) - def self.windows_gemcmd - puppet_dir = ENV.fetch('PUPPET_DIR', nil) - if puppet_dir - File.join(puppet_dir.to_s, 'bin', 'gem.bat') - else - File.join(Gem.default_bindir, 'gem.bat') - end - end - - if Puppet::Util::Platform.windows? - commands :gemcmd => windows_gemcmd - else - commands :gemcmd => "/opt/puppetlabs/puppet/bin/gem" - end + commands :gemcmd => Puppet.run_mode.gem_cmd def uninstall super @@ -30,7 +17,9 @@ def uninstall end def self.execute_gem_command(command, command_options, custom_environment = {}) - custom_environment['PKG_CONFIG_PATH'] = '/opt/puppetlabs/puppet/lib/pkgconfig' unless Puppet::Util::Platform.windows? + if (pkg_config_path = Puppet.run_mode.pkg_config_path) + custom_environment['PKG_CONFIG_PATH'] = pkg_config_path + end super(command, command_options, custom_environment) end end diff --git a/lib/puppet/util/run_mode.rb b/lib/puppet/util/run_mode.rb index 06af3eea006..51297e3f846 100644 --- a/lib/puppet/util/run_mode.rb +++ b/lib/puppet/util/run_mode.rb @@ -87,6 +87,22 @@ def run_dir def log_dir which_dir("/var/log/puppetlabs/puppet", "~/.puppetlabs/var/log") end + + def pkg_config_path + '/opt/puppetlabs/puppet/lib/pkgconfig' + end + + def gem_cmd + '/opt/puppetlabs/puppet/bin/gem' + end + + def common_module_dir + '/opt/puppetlabs/puppet/modules' + end + + def vendor_module_dir + '/opt/puppetlabs/puppet/vendor_modules' + end end class WindowsRunMode < RunMode @@ -114,8 +130,32 @@ def log_dir which_dir(File.join(windows_common_base("puppet/var/log")), "~/.puppetlabs/var/log") end + def pkg_config_path + nil + end + + def gem_cmd + if (puppet_dir = Puppet::Util.get_env('PUPPET_DIR')) + File.join(puppet_dir.to_s, 'bin', 'gem.bat') + else + File.join(Gem.default_bindir, 'gem.bat') + end + end + + def common_module_dir + "#{installdir}/puppet/modules" if installdir + end + + def vendor_module_dir + File.join(installdir, 'puppet', 'vendor_modules') if installdir + end + private + def installdir + ENV.fetch('FACTER_env_windows_installdir', nil) + end + def windows_common_base(*extra) [ENV.fetch('ALLUSERSPROFILE', nil), "PuppetLabs"] + extra end diff --git a/spec/unit/defaults_spec.rb b/spec/unit/defaults_spec.rb index 9f322b38ec9..d42e5ef91eb 100644 --- a/spec/unit/defaults_spec.rb +++ b/spec/unit/defaults_spec.rb @@ -132,14 +132,14 @@ allow(ENV).to receive(:fetch).with("FACTER_env_windows_installdir", anything).and_return(installdir) expect( - Puppet.default_vendormoduledir + Puppet[:vendormoduledir] ).to eq('C:\Program Files\Puppet Labs\Puppet\puppet\vendor_modules') end it 'is nil if installdir fact is missing' do allow(ENV).to receive(:[]).with("FACTER_env_windows_installdir").and_return(nil) - expect(Puppet.default_vendormoduledir).to be_nil + expect(Puppet[:vendormoduledir]).to be_nil end end end diff --git a/spec/unit/provider/package/puppet_gem_spec.rb b/spec/unit/provider/package/puppet_gem_spec.rb index ea95d7aec1a..d6240589173 100644 --- a/spec/unit/provider/package/puppet_gem_spec.rb +++ b/spec/unit/provider/package/puppet_gem_spec.rb @@ -27,37 +27,11 @@ before :each do resource.provider = provider - allow(described_class).to receive(:command).with(:gemcmd).and_return(provider_gem_cmd) + allow(provider.class).to receive(:which).with(provider_gem_cmd).and_return(provider_gem_cmd) + allow(Puppet.run_mode).to receive(:gem_cmd).and_return(provider_gem_cmd) allow(Puppet::Util::Platform).to receive(:windows?).and_return(false) end - - describe '.windows_gemcmd' do - context 'when PUPPET_DIR is not set' do - before do - # allow(ENV).to receive(:fetch, anything).and_call_original - allow(ENV).to receive(:fetch).with('PUPPET_DIR', anything).and_return(nil) - allow(Gem).to receive(:default_bindir).and_return('default_gem_bin') - end - - it 'uses Gem.default_bindir' do - expected_path = File.join('default_gem_bin', 'gem.bat') - expect(described_class.windows_gemcmd).to eql(expected_path) - end - end - - context 'when PUPPET_DIR is set' do - before do - allow(ENV).to receive(:fetch).with('PUPPET_DIR', anything).and_return('puppet_dir') - end - - it 'uses Gem.default_bindir' do - expected_path = File.join('puppet_dir', 'bin', 'gem.bat') - expect(described_class.windows_gemcmd).to eql(expected_path) - end - end - end - context "when installing" do before :each do allow(provider).to receive(:rubygem_version).and_return('1.9.9') diff --git a/spec/unit/util/run_mode_spec.rb b/spec/unit/util/run_mode_spec.rb index 46a0a55008e..ec77d1e7985 100644 --- a/spec/unit/util/run_mode_spec.rb +++ b/spec/unit/util/run_mode_spec.rb @@ -97,6 +97,22 @@ end end end + + describe "#pkg_config_path" do + it { expect(@run_mode.pkg_config_path).to eq('/opt/puppetlabs/puppet/lib/pkgconfig') } + end + + describe "#gem_cmd" do + it { expect(@run_mode.gem_cmd).to eq('/opt/puppetlabs/puppet/bin/gem') } + end + + describe "#common_module_dir" do + it { expect(@run_mode.common_module_dir).to eq('/opt/puppetlabs/puppet/modules') } + end + + describe "#vendor_module_dir" do + it { expect(@run_mode.vendor_module_dir).to eq('/opt/puppetlabs/puppet/vendor_modules') } + end end describe Puppet::Util::WindowsRunMode, :if => Puppet::Util::Platform.windows? do @@ -171,6 +187,81 @@ end end end + + describe '#gem_cmd' do + context 'when PUPPET_DIR is not set' do + before do + allow(Puppet::Util).to receive(:get_env).and_call_original + allow(Puppet::Util).to receive(:get_env).with('PUPPET_DIR').and_return(nil) + allow(Gem).to receive(:default_bindir).and_return('default_gem_bin') + end + + it 'uses Gem.default_bindir' do + expected_path = File.join('default_gem_bin', 'gem.bat') + expect(@run_mode.gem_cmd).to eql(expected_path) + end + end + + context 'when PUPPET_DIR is set' do + before do + allow(Puppet::Util).to receive(:get_env).and_call_original + allow(Puppet::Util).to receive(:get_env).with('PUPPET_DIR').and_return('puppet_dir') + end + + it 'uses Gem.default_bindir' do + expected_path = File.join('puppet_dir', 'bin', 'gem.bat') + expect(@run_mode.gem_cmd).to eql(expected_path) + end + end + end + + describe '#common_module_dir' do + context 'when installdir is not set' do + before do + allow(ENV).to receive(:[]).and_call_original + allow(ENV).to receive(:[]).with('FACTER_env_windows_installdir').and_return(nil) + end + + it 'returns nil' do + expect(@run_mode.common_module_dir).to be(nil) + end + end + + context 'with installdir' do + before do + allow(ENV).to receive(:[]).and_call_original + allow(ENV).to receive(:[]).with('FACTER_env_windows_installdir').and_return('C:\Program Files\Puppet Labs\Puppet') + end + + it 'returns INSTALLDIR/puppet/modules' do + expect(@run_mode.common_module_dir).to eq('C:\Program Files\Puppet Labs\Puppet/puppet/modules') + end + end + end + + describe '#vendor_module_dir' do + context 'when installdir is not set' do + before do + allow(ENV).to receive(:[]).and_call_original + allow(ENV).to receive(:[]).with('FACTER_env_windows_installdir').and_return(nil) + end + + it 'returns nil' do + expect(@run_mode.vendor_module_dir).to be(nil) + end + end + + context 'with installdir' do + before do + allow(ENV).to receive(:[]).and_call_original + allow(ENV).to receive(:[]).with('FACTER_env_windows_installdir').and_return('C:\Program Files\Puppet Labs\Puppet') + end + + it 'returns INSTALLDIR\puppet\vendor_modules' do + expect(@run_mode.vendor_module_dir).to eq('C:\Program Files\Puppet Labs\Puppet\puppet\vendor_modules') + end + end + end end def as_root