diff options
author | Bryan Jen <bryan.jen@gmail.com> | 2015-07-30 13:34:26 -0700 |
---|---|---|
committer | Bryan Jen <bryan.jen@gmail.com> | 2015-07-30 13:34:26 -0700 |
commit | ebf73482e55c827bcb46b7d6b479ae7afd3628af (patch) | |
tree | 0cbc3b9ca06e8057c220131ef5d06d95ae29c139 /lib/puppet/provider | |
parent | 41a7297cb73e48a9548d7d0137f2ffe4108f248a (diff) | |
parent | 35e92645f727f02ef9ace8948154079bc0fff05a (diff) | |
download | puppet-stdlib-ebf73482e55c827bcb46b7d6b479ae7afd3628af.tar.gz puppet-stdlib-ebf73482e55c827bcb46b7d6b479ae7afd3628af.tar.bz2 |
Merge pull request #494 from CENGN/fix/master/file_line_replace
[#puppethack] Adding replace attribute to file_line
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r-- | lib/puppet/provider/file_line/ruby.rb | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/lib/puppet/provider/file_line/ruby.rb b/lib/puppet/provider/file_line/ruby.rb index c58e27e..ea1d44d 100644 --- a/lib/puppet/provider/file_line/ruby.rb +++ b/lib/puppet/provider/file_line/ruby.rb @@ -1,17 +1,23 @@ Puppet::Type.type(:file_line).provide(:ruby) do def exists? - lines.find do |line| - line.chomp == resource[:line].chomp + if !resource[:replace] and count_matches(match_regex) > 0 + true + else + lines.find do |line| + line.chomp == resource[:line].chomp + end end end def create - if resource[:match] - handle_create_with_match - elsif resource[:after] - handle_create_with_after - else - append_line + unless !resource[:replace] and count_matches(match_regex) > 0 + if resource[:match] + handle_create_with_match + elsif resource[:after] + handle_create_with_after + else + append_line + end end end @@ -32,10 +38,13 @@ Puppet::Type.type(:file_line).provide(:ruby) do @lines ||= File.readlines(resource[:path]) end + def match_regex + resource[:match] ? Regexp.new(resource[:match]) : nil + end + def handle_create_with_match() - regex = resource[:match] ? Regexp.new(resource[:match]) : nil regex_after = resource[:after] ? Regexp.new(resource[:after]) : nil - match_count = count_matches(regex) + match_count = count_matches(match_regex) if match_count > 1 && resource[:multiple].to_s != 'true' raise Puppet::Error, "More than one line in file '#{resource[:path]}' matches pattern '#{resource[:match]}'" @@ -43,7 +52,7 @@ Puppet::Type.type(:file_line).provide(:ruby) do File.open(resource[:path], 'w') do |fh| lines.each do |l| - fh.puts(regex.match(l) ? resource[:line] : l) + fh.puts(match_regex.match(l) ? resource[:line] : l) if (match_count == 0 and regex_after) if regex_after.match(l) fh.puts(resource[:line]) |