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.
Files changed (200) hide show
  1. data/CHANGELOG +253 -0
  2. data/CONTRIBUTING.md +65 -0
  3. data/Gemfile +33 -0
  4. data/LICENSE +19 -0
  5. data/Modulefile +11 -0
  6. data/README.markdown +1173 -0
  7. data/README_DEVELOPER.markdown +35 -0
  8. data/RELEASE_PROCESS.markdown +24 -0
  9. data/Rakefile +2 -0
  10. data/lib/facter/pe_version.rb +53 -0
  11. data/lib/facter/puppet_vardir.rb +26 -0
  12. data/lib/facter/root_home.rb +19 -0
  13. data/lib/facter/util/puppet_settings.rb +21 -0
  14. data/lib/puppet/parser/functions/abs.rb +36 -0
  15. data/lib/puppet/parser/functions/any2array.rb +33 -0
  16. data/lib/puppet/parser/functions/bool2num.rb +49 -0
  17. data/lib/puppet/parser/functions/capitalize.rb +34 -0
  18. data/lib/puppet/parser/functions/chomp.rb +35 -0
  19. data/lib/puppet/parser/functions/chop.rb +37 -0
  20. data/lib/puppet/parser/functions/concat.rb +37 -0
  21. data/lib/puppet/parser/functions/count.rb +22 -0
  22. data/lib/puppet/parser/functions/defined_with_params.rb +35 -0
  23. data/lib/puppet/parser/functions/delete.rb +46 -0
  24. data/lib/puppet/parser/functions/delete_at.rb +49 -0
  25. data/lib/puppet/parser/functions/downcase.rb +33 -0
  26. data/lib/puppet/parser/functions/empty.rb +28 -0
  27. data/lib/puppet/parser/functions/ensure_packages.rb +24 -0
  28. data/lib/puppet/parser/functions/ensure_resource.rb +35 -0
  29. data/lib/puppet/parser/functions/flatten.rb +33 -0
  30. data/lib/puppet/parser/functions/floor.rb +20 -0
  31. data/lib/puppet/parser/functions/fqdn_rotate.rb +46 -0
  32. data/lib/puppet/parser/functions/get_module_path.rb +17 -0
  33. data/lib/puppet/parser/functions/getparam.rb +35 -0
  34. data/lib/puppet/parser/functions/getvar.rb +26 -0
  35. data/lib/puppet/parser/functions/grep.rb +33 -0
  36. data/lib/puppet/parser/functions/has_interface_with.rb +52 -0
  37. data/lib/puppet/parser/functions/has_ip_address.rb +25 -0
  38. data/lib/puppet/parser/functions/has_ip_network.rb +25 -0
  39. data/lib/puppet/parser/functions/has_key.rb +28 -0
  40. data/lib/puppet/parser/functions/hash.rb +41 -0
  41. data/lib/puppet/parser/functions/is_array.rb +22 -0
  42. data/lib/puppet/parser/functions/is_domain_name.rb +47 -0
  43. data/lib/puppet/parser/functions/is_float.rb +27 -0
  44. data/lib/puppet/parser/functions/is_function_available.rb +23 -0
  45. data/lib/puppet/parser/functions/is_hash.rb +22 -0
  46. data/lib/puppet/parser/functions/is_integer.rb +27 -0
  47. data/lib/puppet/parser/functions/is_ip_address.rb +32 -0
  48. data/lib/puppet/parser/functions/is_mac_address.rb +27 -0
  49. data/lib/puppet/parser/functions/is_numeric.rb +27 -0
  50. data/lib/puppet/parser/functions/is_string.rb +26 -0
  51. data/lib/puppet/parser/functions/join.rb +41 -0
  52. data/lib/puppet/parser/functions/join_keys_to_values.rb +47 -0
  53. data/lib/puppet/parser/functions/keys.rb +26 -0
  54. data/lib/puppet/parser/functions/loadyaml.rb +20 -0
  55. data/lib/puppet/parser/functions/lstrip.rb +33 -0
  56. data/lib/puppet/parser/functions/max.rb +21 -0
  57. data/lib/puppet/parser/functions/member.rb +44 -0
  58. data/lib/puppet/parser/functions/merge.rb +33 -0
  59. data/lib/puppet/parser/functions/min.rb +21 -0
  60. data/lib/puppet/parser/functions/num2bool.rb +43 -0
  61. data/lib/puppet/parser/functions/parsejson.rb +24 -0
  62. data/lib/puppet/parser/functions/parseyaml.rb +24 -0
  63. data/lib/puppet/parser/functions/pick.rb +29 -0
  64. data/lib/puppet/parser/functions/prefix.rb +45 -0
  65. data/lib/puppet/parser/functions/range.rb +80 -0
  66. data/lib/puppet/parser/functions/reject.rb +31 -0
  67. data/lib/puppet/parser/functions/reverse.rb +28 -0
  68. data/lib/puppet/parser/functions/rstrip.rb +32 -0
  69. data/lib/puppet/parser/functions/shuffle.rb +46 -0
  70. data/lib/puppet/parser/functions/size.rb +48 -0
  71. data/lib/puppet/parser/functions/sort.rb +27 -0
  72. data/lib/puppet/parser/functions/squeeze.rb +36 -0
  73. data/lib/puppet/parser/functions/str2bool.rb +46 -0
  74. data/lib/puppet/parser/functions/str2saltedsha512.rb +32 -0
  75. data/lib/puppet/parser/functions/strftime.rb +107 -0
  76. data/lib/puppet/parser/functions/strip.rb +39 -0
  77. data/lib/puppet/parser/functions/suffix.rb +45 -0
  78. data/lib/puppet/parser/functions/swapcase.rb +39 -0
  79. data/lib/puppet/parser/functions/time.rb +49 -0
  80. data/lib/puppet/parser/functions/to_bytes.rb +28 -0
  81. data/lib/puppet/parser/functions/type.rb +50 -0
  82. data/lib/puppet/parser/functions/unique.rb +51 -0
  83. data/lib/puppet/parser/functions/upcase.rb +41 -0
  84. data/lib/puppet/parser/functions/uriescape.rb +36 -0
  85. data/lib/puppet/parser/functions/validate_absolute_path.rb +56 -0
  86. data/lib/puppet/parser/functions/validate_array.rb +33 -0
  87. data/lib/puppet/parser/functions/validate_augeas.rb +81 -0
  88. data/lib/puppet/parser/functions/validate_bool.rb +34 -0
  89. data/lib/puppet/parser/functions/validate_cmd.rb +47 -0
  90. data/lib/puppet/parser/functions/validate_hash.rb +33 -0
  91. data/lib/puppet/parser/functions/validate_re.rb +40 -0
  92. data/lib/puppet/parser/functions/validate_slength.rb +52 -0
  93. data/lib/puppet/parser/functions/validate_string.rb +33 -0
  94. data/lib/puppet/parser/functions/values.rb +39 -0
  95. data/lib/puppet/parser/functions/values_at.rb +98 -0
  96. data/lib/puppet/parser/functions/zip.rb +65 -0
  97. data/lib/puppet/provider/file_line/ruby.rb +59 -0
  98. data/lib/puppet/type/anchor.rb +41 -0
  99. data/lib/puppet/type/file_line.rb +70 -0
  100. data/manifests/init.pp +20 -0
  101. data/manifests/stages.pp +43 -0
  102. data/spec/functions/defined_with_params_spec.rb +37 -0
  103. data/spec/functions/ensure_packages_spec.rb +42 -0
  104. data/spec/functions/ensure_resource_spec.rb +40 -0
  105. data/spec/functions/getparam_spec.rb +34 -0
  106. data/spec/monkey_patches/alias_should_to_must.rb +8 -0
  107. data/spec/monkey_patches/publicize_methods.rb +10 -0
  108. data/spec/spec.opts +6 -0
  109. data/spec/spec_helper.rb +28 -0
  110. data/spec/unit/facter/pe_version_spec.rb +76 -0
  111. data/spec/unit/facter/root_home_spec.rb +40 -0
  112. data/spec/unit/facter/util/puppet_settings_spec.rb +35 -0
  113. data/spec/unit/puppet/parser/functions/abs_spec.rb +25 -0
  114. data/spec/unit/puppet/parser/functions/any2array_spec.rb +55 -0
  115. data/spec/unit/puppet/parser/functions/bool2num_spec.rb +24 -0
  116. data/spec/unit/puppet/parser/functions/capitalize_spec.rb +19 -0
  117. data/spec/unit/puppet/parser/functions/chomp_spec.rb +19 -0
  118. data/spec/unit/puppet/parser/functions/chop_spec.rb +19 -0
  119. data/spec/unit/puppet/parser/functions/concat_spec.rb +15 -0
  120. data/spec/unit/puppet/parser/functions/count_spec.rb +31 -0
  121. data/spec/unit/puppet/parser/functions/delete_at_spec.rb +19 -0
  122. data/spec/unit/puppet/parser/functions/delete_spec.rb +38 -0
  123. data/spec/unit/puppet/parser/functions/downcase_spec.rb +24 -0
  124. data/spec/unit/puppet/parser/functions/empty_spec.rb +23 -0
  125. data/spec/unit/puppet/parser/functions/flatten_spec.rb +27 -0
  126. data/spec/unit/puppet/parser/functions/floor_spec.rb +39 -0
  127. data/spec/unit/puppet/parser/functions/fqdn_rotate_spec.rb +33 -0
  128. data/spec/unit/puppet/parser/functions/get_module_path_spec.rb +46 -0
  129. data/spec/unit/puppet/parser/functions/getvar_spec.rb +37 -0
  130. data/spec/unit/puppet/parser/functions/grep_spec.rb +19 -0
  131. data/spec/unit/puppet/parser/functions/has_interface_with_spec.rb +64 -0
  132. data/spec/unit/puppet/parser/functions/has_ip_address_spec.rb +39 -0
  133. data/spec/unit/puppet/parser/functions/has_ip_network_spec.rb +36 -0
  134. data/spec/unit/puppet/parser/functions/has_key_spec.rb +42 -0
  135. data/spec/unit/puppet/parser/functions/hash_spec.rb +19 -0
  136. data/spec/unit/puppet/parser/functions/is_array_spec.rb +29 -0
  137. data/spec/unit/puppet/parser/functions/is_domain_name_spec.rb +64 -0
  138. data/spec/unit/puppet/parser/functions/is_float_spec.rb +33 -0
  139. data/spec/unit/puppet/parser/functions/is_function_available.rb +31 -0
  140. data/spec/unit/puppet/parser/functions/is_hash_spec.rb +29 -0
  141. data/spec/unit/puppet/parser/functions/is_integer_spec.rb +34 -0
  142. data/spec/unit/puppet/parser/functions/is_ip_address_spec.rb +39 -0
  143. data/spec/unit/puppet/parser/functions/is_mac_address_spec.rb +29 -0
  144. data/spec/unit/puppet/parser/functions/is_numeric_spec.rb +39 -0
  145. data/spec/unit/puppet/parser/functions/is_string_spec.rb +34 -0
  146. data/spec/unit/puppet/parser/functions/join_keys_to_values_spec.rb +40 -0
  147. data/spec/unit/puppet/parser/functions/join_spec.rb +19 -0
  148. data/spec/unit/puppet/parser/functions/keys_spec.rb +21 -0
  149. data/spec/unit/puppet/parser/functions/lstrip_spec.rb +19 -0
  150. data/spec/unit/puppet/parser/functions/max_spec.rb +27 -0
  151. data/spec/unit/puppet/parser/functions/member_spec.rb +24 -0
  152. data/spec/unit/puppet/parser/functions/merge_spec.rb +47 -0
  153. data/spec/unit/puppet/parser/functions/min_spec.rb +27 -0
  154. data/spec/unit/puppet/parser/functions/num2bool_spec.rb +67 -0
  155. data/spec/unit/puppet/parser/functions/parsejson_spec.rb +22 -0
  156. data/spec/unit/puppet/parser/functions/parseyaml_spec.rb +24 -0
  157. data/spec/unit/puppet/parser/functions/pick_spec.rb +34 -0
  158. data/spec/unit/puppet/parser/functions/prefix_spec.rb +19 -0
  159. data/spec/unit/puppet/parser/functions/range_spec.rb +34 -0
  160. data/spec/unit/puppet/parser/functions/reject_spec.rb +20 -0
  161. data/spec/unit/puppet/parser/functions/reverse_spec.rb +19 -0
  162. data/spec/unit/puppet/parser/functions/rstrip_spec.rb +24 -0
  163. data/spec/unit/puppet/parser/functions/shuffle_spec.rb +24 -0
  164. data/spec/unit/puppet/parser/functions/size_spec.rb +24 -0
  165. data/spec/unit/puppet/parser/functions/sort_spec.rb +24 -0
  166. data/spec/unit/puppet/parser/functions/squeeze_spec.rb +24 -0
  167. data/spec/unit/puppet/parser/functions/str2bool_spec.rb +31 -0
  168. data/spec/unit/puppet/parser/functions/str2saltedsha512_spec.rb +45 -0
  169. data/spec/unit/puppet/parser/functions/strftime_spec.rb +29 -0
  170. data/spec/unit/puppet/parser/functions/strip_spec.rb +18 -0
  171. data/spec/unit/puppet/parser/functions/suffix_spec.rb +19 -0
  172. data/spec/unit/puppet/parser/functions/swapcase_spec.rb +19 -0
  173. data/spec/unit/puppet/parser/functions/time_spec.rb +29 -0
  174. data/spec/unit/puppet/parser/functions/to_bytes_spec.rb +58 -0
  175. data/spec/unit/puppet/parser/functions/type_spec.rb +43 -0
  176. data/spec/unit/puppet/parser/functions/unique_spec.rb +24 -0
  177. data/spec/unit/puppet/parser/functions/upcase_spec.rb +24 -0
  178. data/spec/unit/puppet/parser/functions/uriescape_spec.rb +24 -0
  179. data/spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb +83 -0
  180. data/spec/unit/puppet/parser/functions/validate_array_spec.rb +38 -0
  181. data/spec/unit/puppet/parser/functions/validate_augeas_spec.rb +102 -0
  182. data/spec/unit/puppet/parser/functions/validate_bool_spec.rb +51 -0
  183. data/spec/unit/puppet/parser/functions/validate_cmd_spec.rb +81 -0
  184. data/spec/unit/puppet/parser/functions/validate_hash_spec.rb +43 -0
  185. data/spec/unit/puppet/parser/functions/validate_re_spec.rb +76 -0
  186. data/spec/unit/puppet/parser/functions/validate_slength_spec.rb +48 -0
  187. data/spec/unit/puppet/parser/functions/validate_string_spec.rb +60 -0
  188. data/spec/unit/puppet/parser/functions/values_at_spec.rb +38 -0
  189. data/spec/unit/puppet/parser/functions/values_spec.rb +31 -0
  190. data/spec/unit/puppet/parser/functions/zip_spec.rb +15 -0
  191. data/spec/unit/puppet/provider/file_line/ruby_spec.rb +127 -0
  192. data/spec/unit/puppet/type/anchor_spec.rb +11 -0
  193. data/spec/unit/puppet/type/file_line_spec.rb +69 -0
  194. data/spec/watchr.rb +86 -0
  195. data/tests/file_line.pp +9 -0
  196. data/tests/has_interface_with.pp +10 -0
  197. data/tests/has_ip_address.pp +3 -0
  198. data/tests/has_ip_network.pp +4 -0
  199. data/tests/init.pp +1 -0
  200. metadata +252 -0
@@ -0,0 +1,35 @@
1
+ Puppet Specific Facts
2
+ =====================
3
+
4
+ Facter is meant to stand alone and apart from Puppet. However, Facter often
5
+ runs inside Puppet and all custom facts included in the stdlib module will
6
+ almost always be evaluated in the context of Puppet and Facter working
7
+ together.
8
+
9
+ Still, we don't want to write custom facts that blow up in the users face if
10
+ Puppet is not loaded in memory. This is often the case if the user runs
11
+ `facter` without also supplying the `--puppet` flag.
12
+
13
+ Ah! But Jeff, the custom fact won't be in the `$LOAD_PATH` unless the user
14
+ supplies `--facter`! You might say...
15
+
16
+ Not (always) true I say! If the user happens to have a CWD of
17
+ `<modulepath>/stdlib/lib` then the facts will automatically be evaluated and
18
+ blow up.
19
+
20
+ In any event, it's pretty easy to write a fact that has no value if Puppet is
21
+ not loaded. Simply do it like this:
22
+
23
+ Facter.add(:node_vardir) do
24
+ setcode do
25
+ # This will be nil if Puppet is not available.
26
+ Facter::Util::PuppetSettings.with_puppet do
27
+ Puppet[:vardir]
28
+ end
29
+ end
30
+ end
31
+
32
+ The `Facter::Util::PuppetSettings.with_puppet` method accepts a block and
33
+ yields to it only if the Puppet library is loaded. If the Puppet library is
34
+ not loaded, then the method silently returns `nil` which Facter interprets as
35
+ an undefined fact value. The net effect is that the fact won't be set.
@@ -0,0 +1,24 @@
1
+ # Contributing to this module #
2
+
3
+ * Work in a topic branch
4
+ * Submit a github pull request
5
+ * Address any comments / feeback
6
+ * Merge into master using --no-ff
7
+
8
+ # Releasing this module #
9
+
10
+ * This module adheres to http://semver.org/
11
+ * Look for API breaking changes using git diff vX.Y.Z..master
12
+ * If no API breaking changes, the minor version may be bumped.
13
+ * If there are API breaking changes, the major version must be bumped.
14
+ * If there are only small minor changes, the patch version may be bumped.
15
+ * Update the CHANGELOG
16
+ * Update the Modulefile
17
+ * Commit these changes with a message along the lines of "Update CHANGELOG and
18
+ Modulefile for release"
19
+ * Create an annotated tag with git tag -a vX.Y.Z -m 'version X.Y.Z' (NOTE the
20
+ leading v as per semver.org)
21
+ * Push the tag with git push origin --tags
22
+ * Build a new package with puppet-module or the rake build task if it exists
23
+ * Publish the new package to the forge
24
+ * Bonus points for an announcement to puppet-users.
@@ -0,0 +1,2 @@
1
+ require 'rubygems'
2
+ require 'puppetlabs_spec_helper/rake_tasks'
@@ -0,0 +1,53 @@
1
+ # Fact: is_pe, pe_version, pe_major_version, pe_minor_version, pe_patch_version
2
+ #
3
+ # Purpose: Return various facts about the PE state of the system
4
+ #
5
+ # Resolution: Uses a regex match against puppetversion to determine whether the
6
+ # machine has Puppet Enterprise installed, and what version (overall, major,
7
+ # minor, patch) is installed.
8
+ #
9
+ # Caveats:
10
+ #
11
+ Facter.add("pe_version") do
12
+ setcode do
13
+ pe_ver = Facter.value("puppetversion").match(/Puppet Enterprise (\d+\.\d+\.\d+)/)
14
+ pe_ver[1] if pe_ver
15
+ end
16
+ end
17
+
18
+ Facter.add("is_pe") do
19
+ setcode do
20
+ if Facter.value(:pe_version).to_s.empty? then
21
+ false
22
+ else
23
+ true
24
+ end
25
+ end
26
+ end
27
+
28
+ Facter.add("pe_major_version") do
29
+ confine :is_pe => true
30
+ setcode do
31
+ if pe_version = Facter.value(:pe_version)
32
+ pe_version.to_s.split('.')[0]
33
+ end
34
+ end
35
+ end
36
+
37
+ Facter.add("pe_minor_version") do
38
+ confine :is_pe => true
39
+ setcode do
40
+ if pe_version = Facter.value(:pe_version)
41
+ pe_version.to_s.split('.')[1]
42
+ end
43
+ end
44
+ end
45
+
46
+ Facter.add("pe_patch_version") do
47
+ confine :is_pe => true
48
+ setcode do
49
+ if pe_version = Facter.value(:pe_version)
50
+ pe_version.to_s.split('.')[2]
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,26 @@
1
+ # This facter fact returns the value of the Puppet vardir setting for the node
2
+ # running puppet or puppet agent. The intent is to enable Puppet modules to
3
+ # automatically have insight into a place where they can place variable data,
4
+ # regardless of the node's platform.
5
+ #
6
+ # The value should be directly usable in a File resource path attribute.
7
+
8
+
9
+ begin
10
+ require 'facter/util/puppet_settings'
11
+ rescue LoadError => e
12
+ # puppet apply does not add module lib directories to the $LOAD_PATH (See
13
+ # #4248). It should (in the future) but for the time being we need to be
14
+ # defensive which is what this rescue block is doing.
15
+ rb_file = File.join(File.dirname(__FILE__), 'util', 'puppet_settings.rb')
16
+ load rb_file if File.exists?(rb_file) or raise e
17
+ end
18
+
19
+ Facter.add(:puppet_vardir) do
20
+ setcode do
21
+ # This will be nil if Puppet is not available.
22
+ Facter::Util::PuppetSettings.with_puppet do
23
+ Puppet[:vardir]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ # A facter fact to determine the root home directory.
2
+ # This varies on PE supported platforms and may be
3
+ # reconfigured by the end user.
4
+
5
+ module Facter::Util::RootHome
6
+ class << self
7
+ def get_root_home
8
+ root_ent = Facter::Util::Resolution.exec("getent passwd root")
9
+ # The home directory is the sixth element in the passwd entry
10
+ # If the platform doesn't have getent, root_ent will be nil and we should
11
+ # return it straight away.
12
+ root_ent && root_ent.split(":")[5]
13
+ end
14
+ end
15
+ end
16
+
17
+ Facter.add(:root_home) do
18
+ setcode { Facter::Util::RootHome.get_root_home }
19
+ end
@@ -0,0 +1,21 @@
1
+ module Facter
2
+ module Util
3
+ module PuppetSettings
4
+ # This method is intended to provide a convenient way to evaluate a
5
+ # Facter code block only if Puppet is loaded. This is to account for the
6
+ # situation where the fact happens to be in the load path, but Puppet is
7
+ # not loaded for whatever reason. Perhaps the user is simply running
8
+ # facter without the --puppet flag and they happen to be working in a lib
9
+ # directory of a module.
10
+ def self.with_puppet
11
+ begin
12
+ Module.const_get("Puppet")
13
+ rescue NameError
14
+ nil
15
+ else
16
+ yield
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ #
2
+ # abs.rb
3
+ #
4
+
5
+ module Puppet::Parser::Functions
6
+ newfunction(:abs, :type => :rvalue, :doc => <<-EOS
7
+ Returns the absolute value of a number, for example -34.56 becomes
8
+ 34.56. Takes a single integer and float value as an argument.
9
+ EOS
10
+ ) do |arguments|
11
+
12
+ raise(Puppet::ParseError, "abs(): Wrong number of arguments " +
13
+ "given (#{arguments.size} for 1)") if arguments.size < 1
14
+
15
+ value = arguments[0]
16
+
17
+ # Numbers in Puppet are often string-encoded which is troublesome ...
18
+ if value.is_a?(String)
19
+ if value.match(/^-?(?:\d+)(?:\.\d+){1}$/)
20
+ value = value.to_f
21
+ elsif value.match(/^-?\d+$/)
22
+ value = value.to_i
23
+ else
24
+ raise(Puppet::ParseError, 'abs(): Requires float or ' +
25
+ 'integer to work with')
26
+ end
27
+ end
28
+
29
+ # We have numeric value to handle ...
30
+ result = value.abs
31
+
32
+ return result
33
+ end
34
+ end
35
+
36
+ # vim: set ts=2 sw=2 et :
@@ -0,0 +1,33 @@
1
+ #
2
+ # any2array.rb
3
+ #
4
+
5
+ module Puppet::Parser::Functions
6
+ newfunction(:any2array, :type => :rvalue, :doc => <<-EOS
7
+ This converts any object to an array containing that object. Empty argument
8
+ lists are converted to an empty array. Arrays are left untouched. Hashes are
9
+ converted to arrays of alternating keys and values.
10
+ EOS
11
+ ) do |arguments|
12
+
13
+ if arguments.empty?
14
+ return []
15
+ end
16
+
17
+ if arguments.length == 1
18
+ if arguments[0].kind_of?(Array)
19
+ return arguments[0]
20
+ elsif arguments[0].kind_of?(Hash)
21
+ result = []
22
+ arguments[0].each do |key, value|
23
+ result << key << value
24
+ end
25
+ return result
26
+ end
27
+ end
28
+
29
+ return arguments
30
+ end
31
+ end
32
+
33
+ # vim: set ts=2 sw=2 et :
@@ -0,0 +1,49 @@
1
+ #
2
+ # bool2num.rb
3
+ #
4
+
5
+ module Puppet::Parser::Functions
6
+ newfunction(:bool2num, :type => :rvalue, :doc => <<-EOS
7
+ Converts a boolean to a number. Converts the values:
8
+ false, f, 0, n, and no to 0
9
+ true, t, 1, y, and yes to 1
10
+ Requires a single boolean or string as an input.
11
+ EOS
12
+ ) do |arguments|
13
+
14
+ raise(Puppet::ParseError, "bool2num(): Wrong number of arguments " +
15
+ "given (#{arguments.size} for 1)") if arguments.size < 1
16
+
17
+ value = arguments[0]
18
+ klass = value.class
19
+
20
+ # We can have either true or false, or string which resembles boolean ...
21
+ unless [FalseClass, TrueClass, String].include?(klass)
22
+ raise(Puppet::ParseError, 'bool2num(): Requires either ' +
23
+ 'boolean or string to work with')
24
+ end
25
+
26
+ if value.is_a?(String)
27
+ # We consider all the yes, no, y, n and so on too ...
28
+ value = case value
29
+ #
30
+ # This is how undef looks like in Puppet ...
31
+ # We yield 0 (or false if you wish) in this case.
32
+ #
33
+ when /^$/, '' then false # Empty string will be false ...
34
+ when /^(1|t|y|true|yes)$/ then true
35
+ when /^(0|f|n|false|no)$/ then false
36
+ when /^(undef|undefined)$/ then false # This is not likely to happen ...
37
+ else
38
+ raise(Puppet::ParseError, 'bool2num(): Unknown type of boolean given')
39
+ end
40
+ end
41
+
42
+ # We have real boolean values as well ...
43
+ result = value ? 1 : 0
44
+
45
+ return result
46
+ end
47
+ end
48
+
49
+ # vim: set ts=2 sw=2 et :
@@ -0,0 +1,34 @@
1
+ #
2
+ # capitalize.rb
3
+ #
4
+
5
+ module Puppet::Parser::Functions
6
+ newfunction(:capitalize, :type => :rvalue, :doc => <<-EOS
7
+ Capitalizes the first letter of a string or array of strings.
8
+ Requires either a single string or an array as an input.
9
+ EOS
10
+ ) do |arguments|
11
+
12
+ raise(Puppet::ParseError, "capitalize(): Wrong number of arguments " +
13
+ "given (#{arguments.size} for 1)") if arguments.size < 1
14
+
15
+ value = arguments[0]
16
+ klass = value.class
17
+
18
+ unless [Array, String].include?(klass)
19
+ raise(Puppet::ParseError, 'capitalize(): Requires either ' +
20
+ 'array or string to work with')
21
+ end
22
+
23
+ if value.is_a?(Array)
24
+ # Numbers in Puppet are often string-encoded which is troublesome ...
25
+ result = value.collect { |i| i.is_a?(String) ? i.capitalize : i }
26
+ else
27
+ result = value.capitalize
28
+ end
29
+
30
+ return result
31
+ end
32
+ end
33
+
34
+ # vim: set ts=2 sw=2 et :
@@ -0,0 +1,35 @@
1
+ #
2
+ # chomp.rb
3
+ #
4
+
5
+ module Puppet::Parser::Functions
6
+ newfunction(:chomp, :type => :rvalue, :doc => <<-'EOS'
7
+ Removes the record separator from the end of a string or an array of
8
+ strings, for example `hello\n` becomes `hello`.
9
+ Requires a single string or array as an input.
10
+ EOS
11
+ ) do |arguments|
12
+
13
+ raise(Puppet::ParseError, "chomp(): Wrong number of arguments " +
14
+ "given (#{arguments.size} for 1)") if arguments.size < 1
15
+
16
+ value = arguments[0]
17
+ klass = value.class
18
+
19
+ unless [Array, String].include?(klass)
20
+ raise(Puppet::ParseError, 'chomp(): Requires either ' +
21
+ 'array or string to work with')
22
+ end
23
+
24
+ if value.is_a?(Array)
25
+ # Numbers in Puppet are often string-encoded which is troublesome ...
26
+ result = value.collect { |i| i.is_a?(String) ? i.chomp : i }
27
+ else
28
+ result = value.chomp
29
+ end
30
+
31
+ return result
32
+ end
33
+ end
34
+
35
+ # vim: set ts=2 sw=2 et :
@@ -0,0 +1,37 @@
1
+ #
2
+ # chop.rb
3
+ #
4
+
5
+ module Puppet::Parser::Functions
6
+ newfunction(:chop, :type => :rvalue, :doc => <<-'EOS'
7
+ Returns a new string with the last character removed. If the string ends
8
+ with `\r\n`, both characters are removed. Applying chop to an empty
9
+ string returns an empty string. If you wish to merely remove record
10
+ separators then you should use the `chomp` function.
11
+ Requires a string or array of strings as input.
12
+ EOS
13
+ ) do |arguments|
14
+
15
+ raise(Puppet::ParseError, "chop(): Wrong number of arguments " +
16
+ "given (#{arguments.size} for 1)") if arguments.size < 1
17
+
18
+ value = arguments[0]
19
+ klass = value.class
20
+
21
+ unless [Array, String].include?(klass)
22
+ raise(Puppet::ParseError, 'chop(): Requires either an ' +
23
+ 'array or string to work with')
24
+ end
25
+
26
+ if value.is_a?(Array)
27
+ # Numbers in Puppet are often string-encoded which is troublesome ...
28
+ result = value.collect { |i| i.is_a?(String) ? i.chop : i }
29
+ else
30
+ result = value.chop
31
+ end
32
+
33
+ return result
34
+ end
35
+ end
36
+
37
+ # vim: set ts=2 sw=2 et :
@@ -0,0 +1,37 @@
1
+ #
2
+ # concat.rb
3
+ #
4
+
5
+ module Puppet::Parser::Functions
6
+ newfunction(:concat, :type => :rvalue, :doc => <<-EOS
7
+ Appends the contents of array 2 onto array 1.
8
+
9
+ *Example:*
10
+
11
+ concat(['1','2','3'],['4','5','6'])
12
+
13
+ Would result in:
14
+
15
+ ['1','2','3','4','5','6']
16
+ EOS
17
+ ) do |arguments|
18
+
19
+ # Check that 2 arguments have been given ...
20
+ raise(Puppet::ParseError, "concat(): Wrong number of arguments " +
21
+ "given (#{arguments.size} for 2)") if arguments.size != 2
22
+
23
+ a = arguments[0]
24
+ b = arguments[1]
25
+
26
+ # Check that both args are arrays.
27
+ unless a.is_a?(Array) and b.is_a?(Array)
28
+ raise(Puppet::ParseError, 'concat(): Requires array to work with')
29
+ end
30
+
31
+ result = a.concat(b)
32
+
33
+ return result
34
+ end
35
+ end
36
+
37
+ # vim: set ts=2 sw=2 et :