41b07232e4
I've seen a number of times the following error displayed to the end user: validate_re(): "" does not match "^true$|^false$" at /p/t/f.pp:40 This is an absolutely horrific error message. I'm to blame for it. Users stumble over this quite often and they shouldn't have to go read the code to sort out what's happening. This patch makes an effort to fix the problem by adding a third, optional, argument to validate_re(). This third argument will be the message thrown back in the exception which will be displayed to the end user. This sets the stage for nicer error messages coming from modules we write. This patch is backwards compatible but is a new feature.
38 lines
1.4 KiB
Ruby
38 lines
1.4 KiB
Ruby
module Puppet::Parser::Functions
|
|
newfunction(:validate_re, :doc => <<-'ENDHEREDOC') do |args|
|
|
Perform simple validation of a string against one or more regular
|
|
expressions. The first argument of this function should be a string to
|
|
test, and the second argument should be a stringified regular expression
|
|
(without the // delimiters) or an array of regular expressions. If none
|
|
of the regular expressions match the string passed in, compilation will
|
|
abort with a parse error.
|
|
|
|
If a third argument is specified, this will be the error message raised and
|
|
seen by the user.
|
|
|
|
The following strings will validate against the regular expressions:
|
|
|
|
validate_re('one', '^one$')
|
|
validate_re('one', [ '^one', '^two' ])
|
|
|
|
The following strings will fail to validate, causing compilation to abort:
|
|
|
|
validate_re('one', [ '^two', '^three' ])
|
|
|
|
A helpful error message can be returned like this:
|
|
|
|
validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
|
|
|
|
ENDHEREDOC
|
|
if (args.length < 2) or (args.length > 3) then
|
|
raise Puppet::ParseError, ("validate_re(): wrong number of arguments (#{args.length}; must be 2 or 3)")
|
|
end
|
|
|
|
msg = args[2] || "validate_re(): #{args[0].inspect} does not match #{args[1].inspect}"
|
|
|
|
raise Puppet::ParseError, (msg) unless args[1].any? do |re_str|
|
|
args[0] =~ Regexp.compile(re_str)
|
|
end
|
|
|
|
end
|
|
end
|