puppetmodule-stdlib 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +253 -0
- data/CONTRIBUTING.md +65 -0
- data/Gemfile +33 -0
- data/LICENSE +19 -0
- data/Modulefile +11 -0
- data/README.markdown +1173 -0
- data/README_DEVELOPER.markdown +35 -0
- data/RELEASE_PROCESS.markdown +24 -0
- data/Rakefile +2 -0
- data/lib/facter/pe_version.rb +53 -0
- data/lib/facter/puppet_vardir.rb +26 -0
- data/lib/facter/root_home.rb +19 -0
- data/lib/facter/util/puppet_settings.rb +21 -0
- data/lib/puppet/parser/functions/abs.rb +36 -0
- data/lib/puppet/parser/functions/any2array.rb +33 -0
- data/lib/puppet/parser/functions/bool2num.rb +49 -0
- data/lib/puppet/parser/functions/capitalize.rb +34 -0
- data/lib/puppet/parser/functions/chomp.rb +35 -0
- data/lib/puppet/parser/functions/chop.rb +37 -0
- data/lib/puppet/parser/functions/concat.rb +37 -0
- data/lib/puppet/parser/functions/count.rb +22 -0
- data/lib/puppet/parser/functions/defined_with_params.rb +35 -0
- data/lib/puppet/parser/functions/delete.rb +46 -0
- data/lib/puppet/parser/functions/delete_at.rb +49 -0
- data/lib/puppet/parser/functions/downcase.rb +33 -0
- data/lib/puppet/parser/functions/empty.rb +28 -0
- data/lib/puppet/parser/functions/ensure_packages.rb +24 -0
- data/lib/puppet/parser/functions/ensure_resource.rb +35 -0
- data/lib/puppet/parser/functions/flatten.rb +33 -0
- data/lib/puppet/parser/functions/floor.rb +20 -0
- data/lib/puppet/parser/functions/fqdn_rotate.rb +46 -0
- data/lib/puppet/parser/functions/get_module_path.rb +17 -0
- data/lib/puppet/parser/functions/getparam.rb +35 -0
- data/lib/puppet/parser/functions/getvar.rb +26 -0
- data/lib/puppet/parser/functions/grep.rb +33 -0
- data/lib/puppet/parser/functions/has_interface_with.rb +52 -0
- data/lib/puppet/parser/functions/has_ip_address.rb +25 -0
- data/lib/puppet/parser/functions/has_ip_network.rb +25 -0
- data/lib/puppet/parser/functions/has_key.rb +28 -0
- data/lib/puppet/parser/functions/hash.rb +41 -0
- data/lib/puppet/parser/functions/is_array.rb +22 -0
- data/lib/puppet/parser/functions/is_domain_name.rb +47 -0
- data/lib/puppet/parser/functions/is_float.rb +27 -0
- data/lib/puppet/parser/functions/is_function_available.rb +23 -0
- data/lib/puppet/parser/functions/is_hash.rb +22 -0
- data/lib/puppet/parser/functions/is_integer.rb +27 -0
- data/lib/puppet/parser/functions/is_ip_address.rb +32 -0
- data/lib/puppet/parser/functions/is_mac_address.rb +27 -0
- data/lib/puppet/parser/functions/is_numeric.rb +27 -0
- data/lib/puppet/parser/functions/is_string.rb +26 -0
- data/lib/puppet/parser/functions/join.rb +41 -0
- data/lib/puppet/parser/functions/join_keys_to_values.rb +47 -0
- data/lib/puppet/parser/functions/keys.rb +26 -0
- data/lib/puppet/parser/functions/loadyaml.rb +20 -0
- data/lib/puppet/parser/functions/lstrip.rb +33 -0
- data/lib/puppet/parser/functions/max.rb +21 -0
- data/lib/puppet/parser/functions/member.rb +44 -0
- data/lib/puppet/parser/functions/merge.rb +33 -0
- data/lib/puppet/parser/functions/min.rb +21 -0
- data/lib/puppet/parser/functions/num2bool.rb +43 -0
- data/lib/puppet/parser/functions/parsejson.rb +24 -0
- data/lib/puppet/parser/functions/parseyaml.rb +24 -0
- data/lib/puppet/parser/functions/pick.rb +29 -0
- data/lib/puppet/parser/functions/prefix.rb +45 -0
- data/lib/puppet/parser/functions/range.rb +80 -0
- data/lib/puppet/parser/functions/reject.rb +31 -0
- data/lib/puppet/parser/functions/reverse.rb +28 -0
- data/lib/puppet/parser/functions/rstrip.rb +32 -0
- data/lib/puppet/parser/functions/shuffle.rb +46 -0
- data/lib/puppet/parser/functions/size.rb +48 -0
- data/lib/puppet/parser/functions/sort.rb +27 -0
- data/lib/puppet/parser/functions/squeeze.rb +36 -0
- data/lib/puppet/parser/functions/str2bool.rb +46 -0
- data/lib/puppet/parser/functions/str2saltedsha512.rb +32 -0
- data/lib/puppet/parser/functions/strftime.rb +107 -0
- data/lib/puppet/parser/functions/strip.rb +39 -0
- data/lib/puppet/parser/functions/suffix.rb +45 -0
- data/lib/puppet/parser/functions/swapcase.rb +39 -0
- data/lib/puppet/parser/functions/time.rb +49 -0
- data/lib/puppet/parser/functions/to_bytes.rb +28 -0
- data/lib/puppet/parser/functions/type.rb +50 -0
- data/lib/puppet/parser/functions/unique.rb +51 -0
- data/lib/puppet/parser/functions/upcase.rb +41 -0
- data/lib/puppet/parser/functions/uriescape.rb +36 -0
- data/lib/puppet/parser/functions/validate_absolute_path.rb +56 -0
- data/lib/puppet/parser/functions/validate_array.rb +33 -0
- data/lib/puppet/parser/functions/validate_augeas.rb +81 -0
- data/lib/puppet/parser/functions/validate_bool.rb +34 -0
- data/lib/puppet/parser/functions/validate_cmd.rb +47 -0
- data/lib/puppet/parser/functions/validate_hash.rb +33 -0
- data/lib/puppet/parser/functions/validate_re.rb +40 -0
- data/lib/puppet/parser/functions/validate_slength.rb +52 -0
- data/lib/puppet/parser/functions/validate_string.rb +33 -0
- data/lib/puppet/parser/functions/values.rb +39 -0
- data/lib/puppet/parser/functions/values_at.rb +98 -0
- data/lib/puppet/parser/functions/zip.rb +65 -0
- data/lib/puppet/provider/file_line/ruby.rb +59 -0
- data/lib/puppet/type/anchor.rb +41 -0
- data/lib/puppet/type/file_line.rb +70 -0
- data/manifests/init.pp +20 -0
- data/manifests/stages.pp +43 -0
- data/spec/functions/defined_with_params_spec.rb +37 -0
- data/spec/functions/ensure_packages_spec.rb +42 -0
- data/spec/functions/ensure_resource_spec.rb +40 -0
- data/spec/functions/getparam_spec.rb +34 -0
- data/spec/monkey_patches/alias_should_to_must.rb +8 -0
- data/spec/monkey_patches/publicize_methods.rb +10 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/unit/facter/pe_version_spec.rb +76 -0
- data/spec/unit/facter/root_home_spec.rb +40 -0
- data/spec/unit/facter/util/puppet_settings_spec.rb +35 -0
- data/spec/unit/puppet/parser/functions/abs_spec.rb +25 -0
- data/spec/unit/puppet/parser/functions/any2array_spec.rb +55 -0
- data/spec/unit/puppet/parser/functions/bool2num_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/capitalize_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/chomp_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/chop_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/concat_spec.rb +15 -0
- data/spec/unit/puppet/parser/functions/count_spec.rb +31 -0
- data/spec/unit/puppet/parser/functions/delete_at_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/delete_spec.rb +38 -0
- data/spec/unit/puppet/parser/functions/downcase_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/empty_spec.rb +23 -0
- data/spec/unit/puppet/parser/functions/flatten_spec.rb +27 -0
- data/spec/unit/puppet/parser/functions/floor_spec.rb +39 -0
- data/spec/unit/puppet/parser/functions/fqdn_rotate_spec.rb +33 -0
- data/spec/unit/puppet/parser/functions/get_module_path_spec.rb +46 -0
- data/spec/unit/puppet/parser/functions/getvar_spec.rb +37 -0
- data/spec/unit/puppet/parser/functions/grep_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/has_interface_with_spec.rb +64 -0
- data/spec/unit/puppet/parser/functions/has_ip_address_spec.rb +39 -0
- data/spec/unit/puppet/parser/functions/has_ip_network_spec.rb +36 -0
- data/spec/unit/puppet/parser/functions/has_key_spec.rb +42 -0
- data/spec/unit/puppet/parser/functions/hash_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/is_array_spec.rb +29 -0
- data/spec/unit/puppet/parser/functions/is_domain_name_spec.rb +64 -0
- data/spec/unit/puppet/parser/functions/is_float_spec.rb +33 -0
- data/spec/unit/puppet/parser/functions/is_function_available.rb +31 -0
- data/spec/unit/puppet/parser/functions/is_hash_spec.rb +29 -0
- data/spec/unit/puppet/parser/functions/is_integer_spec.rb +34 -0
- data/spec/unit/puppet/parser/functions/is_ip_address_spec.rb +39 -0
- data/spec/unit/puppet/parser/functions/is_mac_address_spec.rb +29 -0
- data/spec/unit/puppet/parser/functions/is_numeric_spec.rb +39 -0
- data/spec/unit/puppet/parser/functions/is_string_spec.rb +34 -0
- data/spec/unit/puppet/parser/functions/join_keys_to_values_spec.rb +40 -0
- data/spec/unit/puppet/parser/functions/join_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/keys_spec.rb +21 -0
- data/spec/unit/puppet/parser/functions/lstrip_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/max_spec.rb +27 -0
- data/spec/unit/puppet/parser/functions/member_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/merge_spec.rb +47 -0
- data/spec/unit/puppet/parser/functions/min_spec.rb +27 -0
- data/spec/unit/puppet/parser/functions/num2bool_spec.rb +67 -0
- data/spec/unit/puppet/parser/functions/parsejson_spec.rb +22 -0
- data/spec/unit/puppet/parser/functions/parseyaml_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/pick_spec.rb +34 -0
- data/spec/unit/puppet/parser/functions/prefix_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/range_spec.rb +34 -0
- data/spec/unit/puppet/parser/functions/reject_spec.rb +20 -0
- data/spec/unit/puppet/parser/functions/reverse_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/rstrip_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/shuffle_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/size_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/sort_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/squeeze_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/str2bool_spec.rb +31 -0
- data/spec/unit/puppet/parser/functions/str2saltedsha512_spec.rb +45 -0
- data/spec/unit/puppet/parser/functions/strftime_spec.rb +29 -0
- data/spec/unit/puppet/parser/functions/strip_spec.rb +18 -0
- data/spec/unit/puppet/parser/functions/suffix_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/swapcase_spec.rb +19 -0
- data/spec/unit/puppet/parser/functions/time_spec.rb +29 -0
- data/spec/unit/puppet/parser/functions/to_bytes_spec.rb +58 -0
- data/spec/unit/puppet/parser/functions/type_spec.rb +43 -0
- data/spec/unit/puppet/parser/functions/unique_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/upcase_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/uriescape_spec.rb +24 -0
- data/spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb +83 -0
- data/spec/unit/puppet/parser/functions/validate_array_spec.rb +38 -0
- data/spec/unit/puppet/parser/functions/validate_augeas_spec.rb +102 -0
- data/spec/unit/puppet/parser/functions/validate_bool_spec.rb +51 -0
- data/spec/unit/puppet/parser/functions/validate_cmd_spec.rb +81 -0
- data/spec/unit/puppet/parser/functions/validate_hash_spec.rb +43 -0
- data/spec/unit/puppet/parser/functions/validate_re_spec.rb +76 -0
- data/spec/unit/puppet/parser/functions/validate_slength_spec.rb +48 -0
- data/spec/unit/puppet/parser/functions/validate_string_spec.rb +60 -0
- data/spec/unit/puppet/parser/functions/values_at_spec.rb +38 -0
- data/spec/unit/puppet/parser/functions/values_spec.rb +31 -0
- data/spec/unit/puppet/parser/functions/zip_spec.rb +15 -0
- data/spec/unit/puppet/provider/file_line/ruby_spec.rb +127 -0
- data/spec/unit/puppet/type/anchor_spec.rb +11 -0
- data/spec/unit/puppet/type/file_line_spec.rb +69 -0
- data/spec/watchr.rb +86 -0
- data/tests/file_line.pp +9 -0
- data/tests/has_interface_with.pp +10 -0
- data/tests/has_ip_address.pp +3 -0
- data/tests/has_ip_network.pp +4 -0
- data/tests/init.pp +1 -0
- metadata +252 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#
|
|
2
|
+
# upcase.rb
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
module Puppet::Parser::Functions
|
|
6
|
+
newfunction(:upcase, :type => :rvalue, :doc => <<-EOS
|
|
7
|
+
Converts a string or an array of strings to uppercase.
|
|
8
|
+
|
|
9
|
+
*Examples:*
|
|
10
|
+
|
|
11
|
+
upcase("abcd")
|
|
12
|
+
|
|
13
|
+
Will return:
|
|
14
|
+
|
|
15
|
+
ASDF
|
|
16
|
+
EOS
|
|
17
|
+
) do |arguments|
|
|
18
|
+
|
|
19
|
+
raise(Puppet::ParseError, "upcase(): Wrong number of arguments " +
|
|
20
|
+
"given (#{arguments.size} for 1)") if arguments.size < 1
|
|
21
|
+
|
|
22
|
+
value = arguments[0]
|
|
23
|
+
klass = value.class
|
|
24
|
+
|
|
25
|
+
unless [Array, String].include?(klass)
|
|
26
|
+
raise(Puppet::ParseError, 'upcase(): Requires either ' +
|
|
27
|
+
'array or string to work with')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
if value.is_a?(Array)
|
|
31
|
+
# Numbers in Puppet are often string-encoded which is troublesome ...
|
|
32
|
+
result = value.collect { |i| i.is_a?(String) ? i.upcase : i }
|
|
33
|
+
else
|
|
34
|
+
result = value.upcase
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
return result
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# vim: set ts=2 sw=2 et :
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#
|
|
2
|
+
# uriescape.rb
|
|
3
|
+
#
|
|
4
|
+
require 'uri'
|
|
5
|
+
|
|
6
|
+
module Puppet::Parser::Functions
|
|
7
|
+
newfunction(:uriescape, :type => :rvalue, :doc => <<-EOS
|
|
8
|
+
Urlencodes a string or array of strings.
|
|
9
|
+
Requires either a single string or an array as an input.
|
|
10
|
+
EOS
|
|
11
|
+
) do |arguments|
|
|
12
|
+
|
|
13
|
+
raise(Puppet::ParseError, "uriescape(): Wrong number of arguments " +
|
|
14
|
+
"given (#{arguments.size} for 1)") if arguments.size < 1
|
|
15
|
+
|
|
16
|
+
value = arguments[0]
|
|
17
|
+
klass = value.class
|
|
18
|
+
unsafe = ":/?#[]@!$&'()*+,;= "
|
|
19
|
+
|
|
20
|
+
unless [Array, String].include?(klass)
|
|
21
|
+
raise(Puppet::ParseError, 'uriescape(): Requires either ' +
|
|
22
|
+
'array or string to work with')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
if value.is_a?(Array)
|
|
26
|
+
# Numbers in Puppet are often string-encoded which is troublesome ...
|
|
27
|
+
result = value.collect { |i| i.is_a?(String) ? URI.escape(i,unsafe) : i }
|
|
28
|
+
else
|
|
29
|
+
result = URI.escape(value,unsafe)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
return result
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# vim: set ts=2 sw=2 et :
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
module Puppet::Parser::Functions
|
|
2
|
+
newfunction(:validate_absolute_path, :doc => <<-'ENDHEREDOC') do |args|
|
|
3
|
+
Validate the string represents an absolute path in the filesystem. This function works
|
|
4
|
+
for windows and unix style paths.
|
|
5
|
+
|
|
6
|
+
The following values will pass:
|
|
7
|
+
|
|
8
|
+
$my_path = "C:/Program Files (x86)/Puppet Labs/Puppet"
|
|
9
|
+
validate_absolute_path($my_path)
|
|
10
|
+
$my_path2 = "/var/lib/puppet"
|
|
11
|
+
validate_absolute_path($my_path2)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
The following values will fail, causing compilation to abort:
|
|
15
|
+
|
|
16
|
+
validate_absolute_path(true)
|
|
17
|
+
validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])
|
|
18
|
+
validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])
|
|
19
|
+
$undefined = undef
|
|
20
|
+
validate_absolute_path($undefined)
|
|
21
|
+
|
|
22
|
+
ENDHEREDOC
|
|
23
|
+
|
|
24
|
+
require 'puppet/util'
|
|
25
|
+
|
|
26
|
+
unless args.length > 0 then
|
|
27
|
+
raise Puppet::ParseError, ("validate_absolute_path(): wrong number of arguments (#{args.length}; must be > 0)")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
args.each do |arg|
|
|
31
|
+
# This logic was borrowed from
|
|
32
|
+
# [lib/puppet/file_serving/base.rb](https://github.com/puppetlabs/puppet/blob/master/lib/puppet/file_serving/base.rb)
|
|
33
|
+
|
|
34
|
+
# Puppet 2.7 and beyond will have Puppet::Util.absolute_path? Fall back to a back-ported implementation otherwise.
|
|
35
|
+
if Puppet::Util.respond_to?(:absolute_path?) then
|
|
36
|
+
unless Puppet::Util.absolute_path?(arg, :posix) or Puppet::Util.absolute_path?(arg, :windows)
|
|
37
|
+
raise Puppet::ParseError, ("#{arg.inspect} is not an absolute path.")
|
|
38
|
+
end
|
|
39
|
+
else
|
|
40
|
+
# This code back-ported from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?
|
|
41
|
+
# Determine in a platform-specific way whether a path is absolute. This
|
|
42
|
+
# defaults to the local platform if none is specified.
|
|
43
|
+
# Escape once for the string literal, and once for the regex.
|
|
44
|
+
slash = '[\\\\/]'
|
|
45
|
+
name = '[^\\\\/]+'
|
|
46
|
+
regexes = {
|
|
47
|
+
:windows => %r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\?#{slash}#{name}))!i,
|
|
48
|
+
:posix => %r!^/!,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
rval = (!!(arg =~ regexes[:posix])) || (!!(arg =~ regexes[:windows]))
|
|
52
|
+
rval or raise Puppet::ParseError, ("#{arg.inspect} is not an absolute path.")
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Puppet::Parser::Functions
|
|
2
|
+
|
|
3
|
+
newfunction(:validate_array, :doc => <<-'ENDHEREDOC') do |args|
|
|
4
|
+
Validate that all passed values are array data structures. Abort catalog
|
|
5
|
+
compilation if any value fails this check.
|
|
6
|
+
|
|
7
|
+
The following values will pass:
|
|
8
|
+
|
|
9
|
+
$my_array = [ 'one', 'two' ]
|
|
10
|
+
validate_array($my_array)
|
|
11
|
+
|
|
12
|
+
The following values will fail, causing compilation to abort:
|
|
13
|
+
|
|
14
|
+
validate_array(true)
|
|
15
|
+
validate_array('some_string')
|
|
16
|
+
$undefined = undef
|
|
17
|
+
validate_array($undefined)
|
|
18
|
+
|
|
19
|
+
ENDHEREDOC
|
|
20
|
+
|
|
21
|
+
unless args.length > 0 then
|
|
22
|
+
raise Puppet::ParseError, ("validate_array(): wrong number of arguments (#{args.length}; must be > 0)")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
args.each do |arg|
|
|
26
|
+
unless arg.is_a?(Array)
|
|
27
|
+
raise Puppet::ParseError, ("#{arg.inspect} is not an Array. It looks to be a #{arg.class}")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module Puppet::Parser::Functions
|
|
2
|
+
newfunction(:validate_augeas, :doc => <<-'ENDHEREDOC') do |args|
|
|
3
|
+
Perform validation of a string using an Augeas lens
|
|
4
|
+
The first argument of this function should be a string to
|
|
5
|
+
test, and the second argument should be the name of the Augeas lens to use.
|
|
6
|
+
If Augeas fails to parse the string with the lens, the compilation will
|
|
7
|
+
abort with a parse error.
|
|
8
|
+
|
|
9
|
+
A third argument can be specified, listing paths which should
|
|
10
|
+
not be found in the file. The `$file` variable points to the location
|
|
11
|
+
of the temporary file being tested in the Augeas tree.
|
|
12
|
+
|
|
13
|
+
For example, if you want to make sure your passwd content never contains
|
|
14
|
+
a user `foo`, you could write:
|
|
15
|
+
|
|
16
|
+
validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])
|
|
17
|
+
|
|
18
|
+
Or if you wanted to ensure that no users used the '/bin/barsh' shell,
|
|
19
|
+
you could use:
|
|
20
|
+
|
|
21
|
+
validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell="/bin/barsh"]']
|
|
22
|
+
|
|
23
|
+
If a fourth argument is specified, this will be the error message raised and
|
|
24
|
+
seen by the user.
|
|
25
|
+
|
|
26
|
+
A helpful error message can be returned like this:
|
|
27
|
+
|
|
28
|
+
validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')
|
|
29
|
+
|
|
30
|
+
ENDHEREDOC
|
|
31
|
+
unless Puppet.features.augeas?
|
|
32
|
+
raise Puppet::ParseError, ("validate_augeas(): this function requires the augeas feature. See http://projects.puppetlabs.com/projects/puppet/wiki/Puppet_Augeas#Pre-requisites for how to activate it.")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if (args.length < 2) or (args.length > 4) then
|
|
36
|
+
raise Puppet::ParseError, ("validate_augeas(): wrong number of arguments (#{args.length}; must be 2, 3, or 4)")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
msg = args[3] || "validate_augeas(): Failed to validate content against #{args[1].inspect}"
|
|
40
|
+
|
|
41
|
+
require 'augeas'
|
|
42
|
+
aug = Augeas::open(nil, nil, Augeas::NO_MODL_AUTOLOAD)
|
|
43
|
+
begin
|
|
44
|
+
content = args[0]
|
|
45
|
+
|
|
46
|
+
# Test content in a temporary file
|
|
47
|
+
tmpfile = Tempfile.new("validate_augeas")
|
|
48
|
+
begin
|
|
49
|
+
tmpfile.write(content)
|
|
50
|
+
ensure
|
|
51
|
+
tmpfile.close
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Check for syntax
|
|
55
|
+
lens = args[1]
|
|
56
|
+
aug.transform(
|
|
57
|
+
:lens => lens,
|
|
58
|
+
:name => 'Validate_augeas',
|
|
59
|
+
:incl => tmpfile.path
|
|
60
|
+
)
|
|
61
|
+
aug.load!
|
|
62
|
+
|
|
63
|
+
unless aug.match("/augeas/files#{tmpfile.path}//error").empty?
|
|
64
|
+
error = aug.get("/augeas/files#{tmpfile.path}//error/message")
|
|
65
|
+
msg += " with error: #{error}"
|
|
66
|
+
raise Puppet::ParseError, (msg)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Launch unit tests
|
|
70
|
+
tests = args[2] || []
|
|
71
|
+
aug.defvar('file', "/files#{tmpfile.path}")
|
|
72
|
+
tests.each do |t|
|
|
73
|
+
msg += " testing path #{t}"
|
|
74
|
+
raise Puppet::ParseError, (msg) unless aug.match(t).empty?
|
|
75
|
+
end
|
|
76
|
+
ensure
|
|
77
|
+
aug.close
|
|
78
|
+
tmpfile.unlink
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Puppet::Parser::Functions
|
|
2
|
+
|
|
3
|
+
newfunction(:validate_bool, :doc => <<-'ENDHEREDOC') do |args|
|
|
4
|
+
Validate that all passed values are either true or false. Abort catalog
|
|
5
|
+
compilation if any value fails this check.
|
|
6
|
+
|
|
7
|
+
The following values will pass:
|
|
8
|
+
|
|
9
|
+
$iamtrue = true
|
|
10
|
+
validate_bool(true)
|
|
11
|
+
validate_bool(true, true, false, $iamtrue)
|
|
12
|
+
|
|
13
|
+
The following values will fail, causing compilation to abort:
|
|
14
|
+
|
|
15
|
+
$some_array = [ true ]
|
|
16
|
+
validate_bool("false")
|
|
17
|
+
validate_bool("true")
|
|
18
|
+
validate_bool($some_array)
|
|
19
|
+
|
|
20
|
+
ENDHEREDOC
|
|
21
|
+
|
|
22
|
+
unless args.length > 0 then
|
|
23
|
+
raise Puppet::ParseError, ("validate_bool(): wrong number of arguments (#{args.length}; must be > 0)")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
args.each do |arg|
|
|
27
|
+
unless (arg.is_a?(TrueClass) || arg.is_a?(FalseClass))
|
|
28
|
+
raise Puppet::ParseError, ("#{arg.inspect} is not a boolean. It looks to be a #{arg.class}")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'puppet/util/execution'
|
|
2
|
+
|
|
3
|
+
module Puppet::Parser::Functions
|
|
4
|
+
newfunction(:validate_cmd, :doc => <<-'ENDHEREDOC') do |args|
|
|
5
|
+
Perform validation of a string with an external command.
|
|
6
|
+
The first argument of this function should be a string to
|
|
7
|
+
test, and the second argument should be a path to a test command
|
|
8
|
+
taking a file as last argument. If the command, launched against
|
|
9
|
+
a tempfile containing the passed string, returns a non-null value,
|
|
10
|
+
compilation will abort with a parse error.
|
|
11
|
+
|
|
12
|
+
If a third argument is specified, this will be the error message raised and
|
|
13
|
+
seen by the user.
|
|
14
|
+
|
|
15
|
+
A helpful error message can be returned like this:
|
|
16
|
+
|
|
17
|
+
Example:
|
|
18
|
+
|
|
19
|
+
validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')
|
|
20
|
+
|
|
21
|
+
ENDHEREDOC
|
|
22
|
+
if (args.length < 2) or (args.length > 3) then
|
|
23
|
+
raise Puppet::ParseError, ("validate_cmd(): wrong number of arguments (#{args.length}; must be 2 or 3)")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
msg = args[2] || "validate_cmd(): failed to validate content with command #{args[1].inspect}"
|
|
27
|
+
|
|
28
|
+
content = args[0]
|
|
29
|
+
checkscript = args[1]
|
|
30
|
+
|
|
31
|
+
# Test content in a temporary file
|
|
32
|
+
tmpfile = Tempfile.new("validate_cmd")
|
|
33
|
+
begin
|
|
34
|
+
tmpfile.write(content)
|
|
35
|
+
if Puppet::Util::Execution.respond_to?('execute')
|
|
36
|
+
Puppet::Util::Execution.execute("#{checkscript} #{tmpfile.path}")
|
|
37
|
+
else
|
|
38
|
+
Puppet::Util.execute("#{checkscript} #{tmpfile.path}")
|
|
39
|
+
end
|
|
40
|
+
rescue Puppet::ExecutionFailure => detail
|
|
41
|
+
msg += "\n#{detail}"
|
|
42
|
+
raise Puppet::ParseError, msg
|
|
43
|
+
ensure
|
|
44
|
+
tmpfile.unlink
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Puppet::Parser::Functions
|
|
2
|
+
|
|
3
|
+
newfunction(:validate_hash, :doc => <<-'ENDHEREDOC') do |args|
|
|
4
|
+
Validate that all passed values are hash data structures. Abort catalog
|
|
5
|
+
compilation if any value fails this check.
|
|
6
|
+
|
|
7
|
+
The following values will pass:
|
|
8
|
+
|
|
9
|
+
$my_hash = { 'one' => 'two' }
|
|
10
|
+
validate_hash($my_hash)
|
|
11
|
+
|
|
12
|
+
The following values will fail, causing compilation to abort:
|
|
13
|
+
|
|
14
|
+
validate_hash(true)
|
|
15
|
+
validate_hash('some_string')
|
|
16
|
+
$undefined = undef
|
|
17
|
+
validate_hash($undefined)
|
|
18
|
+
|
|
19
|
+
ENDHEREDOC
|
|
20
|
+
|
|
21
|
+
unless args.length > 0 then
|
|
22
|
+
raise Puppet::ParseError, ("validate_hash(): wrong number of arguments (#{args.length}; must be > 0)")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
args.each do |arg|
|
|
26
|
+
unless arg.is_a?(Hash)
|
|
27
|
+
raise Puppet::ParseError, ("#{arg.inspect} is not a Hash. It looks to be a #{arg.class}")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Puppet::Parser::Functions
|
|
2
|
+
newfunction(:validate_re, :doc => <<-'ENDHEREDOC') do |args|
|
|
3
|
+
Perform simple validation of a string against one or more regular
|
|
4
|
+
expressions. The first argument of this function should be a string to
|
|
5
|
+
test, and the second argument should be a stringified regular expression
|
|
6
|
+
(without the // delimiters) or an array of regular expressions. If none
|
|
7
|
+
of the regular expressions match the string passed in, compilation will
|
|
8
|
+
abort with a parse error.
|
|
9
|
+
|
|
10
|
+
If a third argument is specified, this will be the error message raised and
|
|
11
|
+
seen by the user.
|
|
12
|
+
|
|
13
|
+
The following strings will validate against the regular expressions:
|
|
14
|
+
|
|
15
|
+
validate_re('one', '^one$')
|
|
16
|
+
validate_re('one', [ '^one', '^two' ])
|
|
17
|
+
|
|
18
|
+
The following strings will fail to validate, causing compilation to abort:
|
|
19
|
+
|
|
20
|
+
validate_re('one', [ '^two', '^three' ])
|
|
21
|
+
|
|
22
|
+
A helpful error message can be returned like this:
|
|
23
|
+
|
|
24
|
+
validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
|
|
25
|
+
|
|
26
|
+
ENDHEREDOC
|
|
27
|
+
if (args.length < 2) or (args.length > 3) then
|
|
28
|
+
raise Puppet::ParseError, ("validate_re(): wrong number of arguments (#{args.length}; must be 2 or 3)")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
msg = args[2] || "validate_re(): #{args[0].inspect} does not match #{args[1].inspect}"
|
|
32
|
+
|
|
33
|
+
# We're using a flattened array here because we can't call String#any? in
|
|
34
|
+
# Ruby 1.9 like we can in Ruby 1.8
|
|
35
|
+
raise Puppet::ParseError, (msg) unless [args[1]].flatten.any? do |re_str|
|
|
36
|
+
args[0] =~ Regexp.compile(re_str)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Puppet::Parser::Functions
|
|
2
|
+
|
|
3
|
+
newfunction(:validate_slength, :doc => <<-'ENDHEREDOC') do |args|
|
|
4
|
+
Validate that the first argument is a string (or an array of strings), and
|
|
5
|
+
less/equal to than the length of the second argument. It fails if the first
|
|
6
|
+
argument is not a string or array of strings, and if arg 2 is not convertable
|
|
7
|
+
to a number.
|
|
8
|
+
|
|
9
|
+
The following values will pass:
|
|
10
|
+
|
|
11
|
+
validate_slength("discombobulate",17)
|
|
12
|
+
validate_slength(["discombobulate","moo"],17)
|
|
13
|
+
|
|
14
|
+
The following valueis will not:
|
|
15
|
+
|
|
16
|
+
validate_slength("discombobulate",1)
|
|
17
|
+
validate_slength(["discombobulate","thermometer"],5)
|
|
18
|
+
|
|
19
|
+
ENDHEREDOC
|
|
20
|
+
|
|
21
|
+
raise Puppet::ParseError, ("validate_slength(): Wrong number of arguments (#{args.length}; must be = 2)") unless args.length == 2
|
|
22
|
+
|
|
23
|
+
unless (args[0].is_a?(String) or args[0].is_a?(Array))
|
|
24
|
+
raise Puppet::ParseError, ("validate_slength(): please pass a string, or an array of strings - what you passed didn't work for me at all - #{args[0].class}")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
begin
|
|
28
|
+
max_length = args[1].to_i
|
|
29
|
+
rescue NoMethodError => e
|
|
30
|
+
raise Puppet::ParseError, ("validate_slength(): Couldn't convert whatever you passed as the length parameter to an integer - sorry: " + e.message )
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
raise Puppet::ParseError, ("validate_slength(): please pass a positive number as max_length") unless max_length > 0
|
|
34
|
+
|
|
35
|
+
case args[0]
|
|
36
|
+
when String
|
|
37
|
+
raise Puppet::ParseError, ("validate_slength(): #{args[0].inspect} is #{args[0].length} characters. It should have been less than or equal to #{max_length} characters") unless args[0].length <= max_length
|
|
38
|
+
when Array
|
|
39
|
+
args[0].each do |arg|
|
|
40
|
+
if arg.is_a?(String)
|
|
41
|
+
unless ( arg.is_a?(String) and arg.length <= max_length )
|
|
42
|
+
raise Puppet::ParseError, ("validate_slength(): #{arg.inspect} is #{arg.length} characters. It should have been less than or equal to #{max_length} characters")
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
raise Puppet::ParseError, ("validate_slength(): #{arg.inspect} is not a string, it's a #{arg.class}")
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
else
|
|
49
|
+
raise Puppet::ParseError, ("validate_slength(): please pass a string, or an array of strings - what you passed didn't work for me at all - #{args[0].class}")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|