diff options
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/provider/file_line/ruby.rb | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/lib/puppet/provider/file_line/ruby.rb b/lib/puppet/provider/file_line/ruby.rb index 7ddb39f..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,22 +49,13 @@ Puppet::Type.type(:file_line).provide(:ruby) do end end - def handle_create_without_match - - regex = resource[:after] ? Regexp.new(resource[:after]) : nil - after_count = File.exists?(resource[:path]) ? lines.select { |l| regex.match(l) }.size : 0 - if after_count > 1 then - raise Puppet::Error, "More than one line in file '#{resource[:path]}' matches after pattern '#{resource[:after]}'" - end - - if (after_count == 0) - - File.open(resource[:path], 'a') do |fh| - fh.puts resource[:line] - end + def handle_create_with_after + regex = Regexp.new(resource[:after]) - else + 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) @@ -72,9 +64,20 @@ Puppet::Type.type(:file_line).provide(:ruby) do 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 |