summaryrefslogtreecommitdiff
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/parser/functions/delete.rb2
-rw-r--r--lib/puppet/parser/functions/delete_undef_values.rb12
-rw-r--r--lib/puppet/parser/functions/delete_values.rb2
-rw-r--r--lib/puppet/parser/functions/pick.rb2
-rw-r--r--lib/puppet/provider/file_line/ruby.rb37
-rw-r--r--lib/puppet/type/file_line.rb4
6 files changed, 44 insertions, 15 deletions
diff --git a/lib/puppet/parser/functions/delete.rb b/lib/puppet/parser/functions/delete.rb
index f814344..d03a293 100644
--- a/lib/puppet/parser/functions/delete.rb
+++ b/lib/puppet/parser/functions/delete.rb
@@ -27,7 +27,7 @@ string, or key from a hash.
"given #{arguments.size} for 2.")
end
- collection = arguments[0]
+ collection = arguments[0].dup
item = arguments[1]
case collection
diff --git a/lib/puppet/parser/functions/delete_undef_values.rb b/lib/puppet/parser/functions/delete_undef_values.rb
index 4eecab2..532639e 100644
--- a/lib/puppet/parser/functions/delete_undef_values.rb
+++ b/lib/puppet/parser/functions/delete_undef_values.rb
@@ -18,16 +18,16 @@ Would return: ['A','',false]
raise(Puppet::ParseError,
"delete_undef_values(): Wrong number of arguments given " +
"(#{args.size})") if args.size < 1
-
- result = args[0]
+
+ unless args[0].is_a? Array or args[0].is_a? Hash
+ raise(Puppet::ParseError,
+ "delete_undef_values(): expected an array or hash, got #{args[0]} type #{args[0].class} ")
+ end
+ result = args[0].dup
if result.is_a?(Hash)
result.delete_if {|key, val| val.equal? :undef}
elsif result.is_a?(Array)
result.delete :undef
- else
- raise(Puppet::ParseError,
- "delete_undef_values(): Wrong argument type #{args[0].class} " +
- "for first argument")
end
result
end
diff --git a/lib/puppet/parser/functions/delete_values.rb b/lib/puppet/parser/functions/delete_values.rb
index 17b9d37..ca8eef5 100644
--- a/lib/puppet/parser/functions/delete_values.rb
+++ b/lib/puppet/parser/functions/delete_values.rb
@@ -21,6 +21,6 @@ Would return: {'a'=>'A','c'=>'C','B'=>'D'}
raise(TypeError, "delete_values(): First argument must be a Hash. " + \
"Given an argument of class #{hash.class}.")
end
- hash.delete_if { |key, val| item == val }
+ hash.dup.delete_if { |key, val| item == val }
end
end
diff --git a/lib/puppet/parser/functions/pick.rb b/lib/puppet/parser/functions/pick.rb
index cbc0300..e9e5d66 100644
--- a/lib/puppet/parser/functions/pick.rb
+++ b/lib/puppet/parser/functions/pick.rb
@@ -21,7 +21,7 @@ EOS
args.delete(:undefined)
args.delete("")
if args[0].to_s.empty? then
- fail "Must provide non empty value."
+ fail Puppet::ParseError, "pick(): must receive at last one non empty value"
else
return args[0]
end
diff --git a/lib/puppet/provider/file_line/ruby.rb b/lib/puppet/provider/file_line/ruby.rb
index 3cb9f6e..94e7fac 100644
--- a/lib/puppet/provider/file_line/ruby.rb
+++ b/lib/puppet/provider/file_line/ruby.rb
@@ -1,5 +1,4 @@
Puppet::Type.type(:file_line).provide(:ruby) do
-
def exists?
lines.find do |line|
line.chomp == resource[:line].chomp
@@ -8,9 +7,11 @@ Puppet::Type.type(:file_line).provide(:ruby) do
def create
if resource[:match]
- handle_create_with_match()
+ handle_create_with_match
+ elsif resource[:after]
+ handle_create_with_after
else
- handle_create_without_match()
+ append_line
end
end
@@ -48,11 +49,35 @@ Puppet::Type.type(:file_line).provide(:ruby) do
end
end
- def handle_create_without_match
+ def handle_create_with_after
+ regex = Regexp.new(resource[:after])
+
+ count = lines.count {|l| l.match(regex)}
+
+ case count
+ when 1 # find the line to put our line after
+ File.open(resource[:path], 'w') do |fh|
+ lines.each do |l|
+ fh.puts(l)
+ if regex.match(l) then
+ fh.puts(resource[:line])
+ end
+ end
+ end
+ when 0 # append the line to the end of the file
+ append_line
+ else
+ raise Puppet::Error, "#{count} lines match pattern '#{resource[:after]}' in file '#{resource[:path]}'. One or no line must match the pattern."
+ end
+ end
+
+ ##
+ # append the line to the file.
+ #
+ # @api private
+ def append_line
File.open(resource[:path], 'a') do |fh|
fh.puts resource[:line]
end
end
-
-
end
diff --git a/lib/puppet/type/file_line.rb b/lib/puppet/type/file_line.rb
index 14946bb..323fc4c 100644
--- a/lib/puppet/type/file_line.rb
+++ b/lib/puppet/type/file_line.rb
@@ -42,6 +42,10 @@ Puppet::Type.newtype(:file_line) do
newvalues(true, false)
end
+ newparam(:after) do
+ desc 'An optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)'
+ end
+
newparam(:line) do
desc 'The line to be appended to the file located by the path parameter.'
end