summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortkishel <tkishel@gmail.com>2017-07-13 15:16:04 -0700
committertkishel <tkishel@gmail.com>2017-07-13 15:16:04 -0700
commit81d7d35fd78917ee1a5e66cb7459ea341bc452ea (patch)
tree2fb0c17db35201b46b831edc43652ea539fc1cad
parent54d4937c5b2d8918ee9f89f728c0c29e0d9e774f (diff)
(MODULES-5003) file_line_does_not_change_multiple_lines_when_one_matches
The exists? method is called to determine the need to call the create and destroy methods. When the ensure, match, and multiple attributes are defined, the exists? method needs to return false unless all the lines that match the match attribute equal the line attribute. The first commit is minimal, and implements this change. The second commit normalizes the code, which I needed for comprehension.
-rw-r--r--lib/puppet/provider/file_line/ruby.rb27
-rwxr-xr-xspec/unit/puppet/provider/file_line/ruby_spec.rb4
2 files changed, 17 insertions, 14 deletions
diff --git a/lib/puppet/provider/file_line/ruby.rb b/lib/puppet/provider/file_line/ruby.rb
index 1d27424..aa99986 100644
--- a/lib/puppet/provider/file_line/ruby.rb
+++ b/lib/puppet/provider/file_line/ruby.rb
@@ -1,18 +1,21 @@
Puppet::Type.type(:file_line).provide(:ruby) do
def exists?
- found = true
- if resource[:replace].to_s != 'true' and count_matches(match_regex) > 0
- found = true
+ found = false
+ lines_count = 0
+ lines.each do |line|
+ found = line.chomp == resource[:line]
+ if found
+ lines_count += 1
+ end
+ end
+ if resource[:match] == nil
+ found = lines_count > 0
else
- lines.find do |line|
- if resource[:ensure].to_s == 'absent' and resource[:match_for_absence].to_s == 'true'
- found = line.chomp =~ Regexp.new(resource[:match])
- else
- found = line.chomp == resource[:line].chomp
- end
- if found == false then
- break
- end
+ match_count = count_matches(match_regex)
+ if resource[:replace].to_s == 'true'
+ found = lines_count > 0 && lines_count == match_count
+ else
+ found = match_count > 0
end
end
found
diff --git a/spec/unit/puppet/provider/file_line/ruby_spec.rb b/spec/unit/puppet/provider/file_line/ruby_spec.rb
index dcf8509..ab6edf9 100755
--- a/spec/unit/puppet/provider/file_line/ruby_spec.rb
+++ b/spec/unit/puppet/provider/file_line/ruby_spec.rb
@@ -190,7 +190,7 @@ describe provider_class, :unless => Puppet::Util::Platform.windows? do
File.open(@tmpfile, 'w') do |fh|
fh.write("foo1\nfoo = bar\nfoo2")
end
- expect(@provider.exists?).to eql(false)
+ expect(@provider.exists?).to eql(true)
@provider.create
expect(File.read(@tmpfile).chomp).to eql("foo1\nfoo = bar\nfoo2")
end
@@ -387,7 +387,7 @@ describe provider_class, :unless => Puppet::Util::Platform.windows? do
File.open(@tmpfile, 'w') do |fh|
fh.write("foo1\nfoo\nfoo2")
end
- expect(@provider.exists?).to be_nil
+ expect(@provider.exists?).to eql (true)
end
it 'should remove one line if it matches' do