diff options
Diffstat (limited to 'puppet/modules/common/lib')
11 files changed, 163 insertions, 0 deletions
diff --git a/puppet/modules/common b/puppet/modules/common deleted file mode 160000 -Subproject ae149624f9bc551865b93b9b7155af2de8deeb7 diff --git a/puppet/modules/common/lib/puppet/parser/functions/basename.rb b/puppet/modules/common/lib/puppet/parser/functions/basename.rb new file mode 100644 index 00000000..dc725375 --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/basename.rb @@ -0,0 +1,22 @@ +# This function has two modes of operation: +# +#  basename(string) : string +# +# Returns the last component of the filename given as argument, which must be +# formed using forward slashes ("/") regardless of the separator used on the +# local file system. +# +#  basename(string[]) : string[] +# +# Returns an array of strings with the basename of each item from the argument. +# +module Puppet::Parser::Functions +	newfunction(:basename, :type => :rvalue) do |args| +		if args[0].is_a?(Array) +			args.collect do |a| File.basename(a) end +		else +			File.basename(args[0]) +		end +	end +end + diff --git a/puppet/modules/common/lib/puppet/parser/functions/dirname.rb b/puppet/modules/common/lib/puppet/parser/functions/dirname.rb new file mode 100644 index 00000000..ea0d50b4 --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/dirname.rb @@ -0,0 +1,22 @@ +# This function has two modes of operation: +#  +#  dirname(string) : string +# +# Returns all components of the filename given as argument except the last +# one. The filename must be formed using forward slashes (``/..) regardless of +# the separator used on the local file system. +# +#  dirname(string[]) : string[] +# +# Returns an array of strings with the basename of each item from the argument.  +# +module Puppet::Parser::Functions +	newfunction(:dirname, :type => :rvalue) do |args| +		if args[0].is_a?(Array) +			args.collect do |a| File.dirname(a) end +		else +			File.dirname(args[0]) +		end +	end +end + diff --git a/puppet/modules/common/lib/puppet/parser/functions/get_default.rb b/puppet/modules/common/lib/puppet/parser/functions/get_default.rb new file mode 100644 index 00000000..3f4359bd --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/get_default.rb @@ -0,0 +1,15 @@ +# get_default($value, $default) : $value +# +# return $value || $default. +module Puppet::Parser::Functions +    newfunction(:get_default, :type => :rvalue) do |args| +        value = nil +        args.each { |x| +            if ! x.nil? and x.length > 0 +                value = x +                break +            end +        } +        return value +    end +end diff --git a/puppet/modules/common/lib/puppet/parser/functions/hostname.rb b/puppet/modules/common/lib/puppet/parser/functions/hostname.rb new file mode 100644 index 00000000..7bc477f2 --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/hostname.rb @@ -0,0 +1,13 @@ +# get an uniq array of ipaddresses for a hostname +require 'resolv' + +module Puppet::Parser::Functions +	newfunction(:hostname, :type => :rvalue) do |args| +        res = Array.new +        Resolv::DNS.new.each_address(args[0]){ |addr| +            res << addr +        } +        res.uniq +	end +end + diff --git a/puppet/modules/common/lib/puppet/parser/functions/multi_source_template.rb b/puppet/modules/common/lib/puppet/parser/functions/multi_source_template.rb new file mode 100644 index 00000000..e0753205 --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/multi_source_template.rb @@ -0,0 +1,29 @@ +module Puppet::Parser::Functions +    require 'erb' + +    newfunction(:multi_source_template, :type => :rvalue) do |args| +        contents = nil +        environment = compiler.environment +        sources = args + +        sources.each do |file| +            Puppet.debug("Looking for #{file} in #{environment}") +            if filename = Puppet::Parser::Files.find_template(file, environment.to_s) +                wrapper = Puppet::Parser::TemplateWrapper.new(self) +                wrapper.file = file + +                begin +                     contents = wrapper.result +                rescue => detail +                     raise Puppet::ParseError, "Failed to parse template %s: %s" % [file, detail] +                end + +                break +            end +        end + +        raise Puppet::ParseError, "multi_source_template: No match found for files: #{sources.join(', ')}" if contents == nil + +        contents +    end +end diff --git a/puppet/modules/common/lib/puppet/parser/functions/prefix_with.rb b/puppet/modules/common/lib/puppet/parser/functions/prefix_with.rb new file mode 100644 index 00000000..6e64a4a8 --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/prefix_with.rb @@ -0,0 +1,9 @@ +# prefix arguments 2..n with first argument + +module Puppet::Parser::Functions +	newfunction(:prefix_with, :type => :rvalue) do |args| +		prefix = args.shift +		args.collect {|v| "%s%s" % [prefix, v] } +	end +end + diff --git a/puppet/modules/common/lib/puppet/parser/functions/re_escape.rb b/puppet/modules/common/lib/puppet/parser/functions/re_escape.rb new file mode 100644 index 00000000..7bee90a8 --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/re_escape.rb @@ -0,0 +1,7 @@ +# apply ruby regexp escaping to a string +module Puppet::Parser::Functions +	newfunction(:re_escape, :type => :rvalue) do |args| +		Regexp.escape(args[0]) +	end +end + diff --git a/puppet/modules/common/lib/puppet/parser/functions/slash_escape.rb b/puppet/modules/common/lib/puppet/parser/functions/slash_escape.rb new file mode 100644 index 00000000..04d3b95e --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/slash_escape.rb @@ -0,0 +1,7 @@ +# escape slashes in a String +module Puppet::Parser::Functions +	newfunction(:slash_escape, :type => :rvalue) do |args| +		args[0].gsub(/\//, '\\/') +	end +end + diff --git a/puppet/modules/common/lib/puppet/parser/functions/substitute.rb b/puppet/modules/common/lib/puppet/parser/functions/substitute.rb new file mode 100644 index 00000000..4c97def3 --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/substitute.rb @@ -0,0 +1,20 @@ +# subsititute($string, $regex, $replacement) : $string +# subsititute($string[], $regex, $replacement) : $string[] +# +# Replace all ocurrences of $regex in $string by $replacement. +# $regex is interpreted as Ruby regular expression. +# +# For long-term portability it is recommended to refrain from using Ruby's +# extended RE features. +module Puppet::Parser::Functions +	newfunction(:substitute, :type => :rvalue) do |args| +		if args[0].is_a?(Array) +			args[0].collect do |val| +				val.gsub(/#{args[1]}/, args[2]) +			end +		else +			args[0].gsub(/#{args[1]}/, args[2]) +		end +	end +end + diff --git a/puppet/modules/common/lib/puppet/parser/functions/tfile.rb b/puppet/modules/common/lib/puppet/parser/functions/tfile.rb new file mode 100644 index 00000000..acb6609b --- /dev/null +++ b/puppet/modules/common/lib/puppet/parser/functions/tfile.rb @@ -0,0 +1,19 @@ +Puppet::Parser::Functions::newfunction( +  :tfile, +  :type => :rvalue, +  :doc => "Returns the content of a file. If the file or the path does not +    yet exist, it will create the path and touch the file." +) do |args| +  raise Puppet::ParseError, 'tfile() needs one argument' if args.length != 1 +  path = args.to_a.first +  unless File.exists?(path) +    dir = File.dirname(path) +    unless File.directory?(dir) +      require 'fileutils' +      FileUtils.mkdir_p(dir, :mode => 0700) +    end +    require 'fileutils' +    FileUtils.touch(path) +  end +  File.read(path) +end  | 
