Merge pull request #25 from bodepd/feature/master/10802_get_module_path
(#10802) add new function get_module_path
This commit is contained in:
commit
aa9948bfb3
2 changed files with 59 additions and 0 deletions
17
lib/puppet/parser/functions/get_module_path.rb
Normal file
17
lib/puppet/parser/functions/get_module_path.rb
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
module Puppet::Parser::Functions
|
||||||
|
newfunction(:get_module_path, :type =>:rvalue, :doc => <<-EOT
|
||||||
|
Returns the absolute path of the specified module for the current
|
||||||
|
environment.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
$module_path = get_module_path('stdlib')
|
||||||
|
EOT
|
||||||
|
) do |args|
|
||||||
|
raise(Puppet::ParseError, "get_module_name(): Wrong number of arguments, expects one") unless args.size == 1
|
||||||
|
if module_path = Puppet::Module.find(args[0], compiler.environment.to_s)
|
||||||
|
module_path.path
|
||||||
|
else
|
||||||
|
raise(Puppet::ParseError, "Could not find module #{args[0]} in environment #{compiler.environment}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
42
spec/unit/puppet/parser/functions/get_module_path_spec.rb
Normal file
42
spec/unit/puppet/parser/functions/get_module_path_spec.rb
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#!/usr/bin/env rspec
|
||||||
|
require 'puppet'
|
||||||
|
require 'fileutils'
|
||||||
|
require 'spec_helper'
|
||||||
|
describe Puppet::Parser::Functions.function(:get_module_path) do
|
||||||
|
include PuppetSpec::Files
|
||||||
|
|
||||||
|
def get_scope(environment = 'production')
|
||||||
|
scope = Puppet::Parser::Scope.new
|
||||||
|
scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => environment))
|
||||||
|
scope
|
||||||
|
end
|
||||||
|
it 'should only allow one argument' do
|
||||||
|
expect { get_scope.function_get_module_path([]) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
|
||||||
|
expect { get_scope.function_get_module_path(['1','2','3']) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
|
||||||
|
end
|
||||||
|
it 'should raise an exception when the module cannot be found' do
|
||||||
|
expect { get_scope.function_get_module_path(['foo']) }.should raise_error(Puppet::ParseError, /Could not find module/)
|
||||||
|
end
|
||||||
|
describe 'when locating a module' do
|
||||||
|
let(:modulepath) { tmpdir('modulepath') }
|
||||||
|
let(:foo_path) { File.join(modulepath, 'foo') }
|
||||||
|
before(:each) { FileUtils.mkdir(foo_path) }
|
||||||
|
it 'should be able to find module paths from the modulepath setting' do
|
||||||
|
Puppet[:modulepath] = modulepath
|
||||||
|
get_scope.function_get_module_path(['foo']).should == foo_path
|
||||||
|
end
|
||||||
|
it 'should be able to find module paths when the modulepath is a list' do
|
||||||
|
Puppet[:modulepath] = modulepath + ":/tmp"
|
||||||
|
get_scope.function_get_module_path(['foo']).should == foo_path
|
||||||
|
end
|
||||||
|
it 'should be able to find module paths from the environment' do
|
||||||
|
conf_file = tmpfile('conffile')
|
||||||
|
File.open(conf_file, 'w') do |fh|
|
||||||
|
fh.write("[dansenvironment]\nmodulepath = #{modulepath}")
|
||||||
|
end
|
||||||
|
Puppet[:config] = conf_file
|
||||||
|
Puppet.parse_config
|
||||||
|
get_scope('dansenvironment').function_get_module_path(['foo']).should ==foo_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue