]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
First version. A function for Puppet that allows to retrieve a fact from Facter
authorKrzysztof Wilczynski <krzysztof.wilczynski@linux.com>
Sat, 23 Apr 2011 00:19:43 +0000 (01:19 +0100)
committerKrzysztof Wilczynski <krzysztof.wilczynski@linux.com>
Sat, 23 Apr 2011 00:28:11 +0000 (01:28 +0100)
easily instead of resorting to awful "inline_template" use-and-abuse practices.

Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
fact.rb [new file with mode: 0644]

diff --git a/fact.rb b/fact.rb
new file mode 100644 (file)
index 0000000..7d170c8
--- /dev/null
+++ b/fact.rb
@@ -0,0 +1,63 @@
+#
+# fact.rb
+#
+
+module Puppet::Parser::Functions
+  newfunction(:fact, :type => :rvalue, :doc => <<-EOS
+This function will retrieve fact from Facter based on the fact name
+and expose it for further use within Puppet manifest file ...
+
+For example:
+
+Given the following sample manifest:
+
+  define partitions {
+    $result = split(fact("partitions_${name}"), ',')
+
+    notice $result
+
+    partition { $result: }
+  }
+
+  define partition {
+    notice $name
+  }
+
+  $available_disks = split($disks, ',')
+
+  partitions { $available_disks: }
+
+This will produce the following:
+
+  notice: Scope(Partitions[hda]): hda1 hda2
+  notice: Scope(Partition[hda1]): hda1
+  notice: Scope(Partition[hda2]): hda2
+
+
+Which allows you to avoid resorting to the following:
+
+  $fact   = "partitions_${name}"
+  $result = split(inline_template("<%= scope.lookupvar(fact) %>"), ',')
+
+Taking out the need for using "inline_template" in the "partitions" define above.
+    EOS
+  ) do |arguments|
+
+    raise(Puppet::ParseError, "Wrong number of arguments " +
+      "given (#{arguments.size} for 1)") if arguments.size < 1
+
+    fact = arguments[0]
+
+    raise(Puppet::ParseError, 'You must provide fact name') if fact.empty?
+
+    result = lookupvar(fact) # Get the value of interest from Facter ...
+
+    if not result or result.empty?
+      raise(Puppet::ParseError, "Unable to retrieve fact `#{fact}'")
+    end
+
+    return result
+  end
+end
+
+# vim: set ts=2 sw=2 et :