(#13610) Add is_function_available to stdlib
This function provides a simple wrapper around Puppet::Parser::Functions.function for access within Puppet manifests. This will allow users to check whether or not a plugin or functionality such as hiera is installed on the server.
This commit is contained in:
parent
6dfd7f6b73
commit
961dcab15d
2 changed files with 54 additions and 0 deletions
23
lib/puppet/parser/functions/is_function_available.rb
Normal file
23
lib/puppet/parser/functions/is_function_available.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
#
|
||||
# is_function_available.rb
|
||||
#
|
||||
|
||||
module Puppet::Parser::Functions
|
||||
newfunction(:is_function_available, :type => :rvalue, :doc => <<-EOS
|
||||
This function accepts a string as an argument, determines whether the
|
||||
Puppet runtime has access to a function by that name. It returns a
|
||||
true if the function exists, false if not.
|
||||
EOS
|
||||
) do |arguments|
|
||||
|
||||
if (arguments.size != 1) then
|
||||
raise(Puppet::ParseError, "is_function_available?(): Wrong number of arguments "+
|
||||
"given #{arguments.size} for 1")
|
||||
end
|
||||
|
||||
function = Puppet::Parser::Functions.function(arguments[0].to_sym)
|
||||
function.is_a?(String) and not function.empty?
|
||||
end
|
||||
end
|
||||
|
||||
# vim: set ts=2 sw=2 et :
|
31
spec/unit/puppet/parser/functions/is_function_available.rb
Normal file
31
spec/unit/puppet/parser/functions/is_function_available.rb
Normal file
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env rspec
|
||||
require 'spec_helper'
|
||||
|
||||
describe "the is_function_available function" do
|
||||
before :all do
|
||||
Puppet::Parser::Functions.autoloader.loadall
|
||||
end
|
||||
|
||||
before :each do
|
||||
@scope = Puppet::Parser::Scope.new
|
||||
end
|
||||
|
||||
it "should exist" do
|
||||
Puppet::Parser::Functions.function("is_function_available").should == "function_is_function_available"
|
||||
end
|
||||
|
||||
it "should raise a ParseError if there is less than 1 arguments" do
|
||||
lambda { @scope.function_is_function_available([]) }.should( raise_error(Puppet::ParseError))
|
||||
end
|
||||
|
||||
it "should return false if a nonexistent function is passed" do
|
||||
result = @scope.function_is_function_available(['jeff_mccunes_left_sock'])
|
||||
result.should(eq(false))
|
||||
end
|
||||
|
||||
it "should return true if an available function is passed" do
|
||||
result = @scope.function_is_function_available(['require'])
|
||||
result.should(eq(true))
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in a new issue