Merge branch 'pull-163'
This closes GH-163
This commit is contained in:
commit
e0d4588bd2
3 changed files with 40 additions and 3 deletions
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
Puppet::Type.type(:file_line).provide(:ruby) do
|
Puppet::Type.type(:file_line).provide(:ruby) do
|
||||||
|
|
||||||
def exists?
|
def exists?
|
||||||
|
@ -35,8 +34,8 @@ Puppet::Type.type(:file_line).provide(:ruby) do
|
||||||
def handle_create_with_match()
|
def handle_create_with_match()
|
||||||
regex = resource[:match] ? Regexp.new(resource[:match]) : nil
|
regex = resource[:match] ? Regexp.new(resource[:match]) : nil
|
||||||
match_count = lines.select { |l| regex.match(l) }.size
|
match_count = lines.select { |l| regex.match(l) }.size
|
||||||
if match_count > 1
|
if match_count > 1 && resource[:multiple].to_s != 'true'
|
||||||
raise Puppet::Error, "More than one line in file '#{resource[:path]}' matches pattern '#{resource[:match]}'"
|
raise Puppet::Error, "More than one line in file '#{resource[:path]}' matches pattern '#{resource[:match]}'"
|
||||||
end
|
end
|
||||||
File.open(resource[:path], 'w') do |fh|
|
File.open(resource[:path], 'w') do |fh|
|
||||||
lines.each do |l|
|
lines.each do |l|
|
||||||
|
|
|
@ -37,6 +37,11 @@ Puppet::Type.newtype(:file_line) do
|
||||||
'if a match is found, we replace that line rather than adding a new line.'
|
'if a match is found, we replace that line rather than adding a new line.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
newparam(:multiple) do
|
||||||
|
desc 'An optional value to determine if match can change multiple lines.'
|
||||||
|
newvalues(true, false)
|
||||||
|
end
|
||||||
|
|
||||||
newparam(:line) do
|
newparam(:line) do
|
||||||
desc 'The line to be appended to the file located by the path parameter.'
|
desc 'The line to be appended to the file located by the path parameter.'
|
||||||
end
|
end
|
||||||
|
|
|
@ -61,6 +61,39 @@ describe provider_class do
|
||||||
File.read(@tmpfile).should eql("foo1\nfoo=blah\nfoo2\nfoo=baz")
|
File.read(@tmpfile).should eql("foo1\nfoo=blah\nfoo2\nfoo=baz")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should replace all lines that matches' do
|
||||||
|
@resource = Puppet::Type::File_line.new(
|
||||||
|
{
|
||||||
|
:name => 'foo',
|
||||||
|
:path => @tmpfile,
|
||||||
|
:line => 'foo = bar',
|
||||||
|
:match => '^foo\s*=.*$',
|
||||||
|
:multiple => true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@provider = provider_class.new(@resource)
|
||||||
|
File.open(@tmpfile, 'w') do |fh|
|
||||||
|
fh.write("foo1\nfoo=blah\nfoo2\nfoo=baz")
|
||||||
|
end
|
||||||
|
@provider.exists?.should be_nil
|
||||||
|
@provider.create
|
||||||
|
File.read(@tmpfile).chomp.should eql("foo1\nfoo = bar\nfoo2\nfoo = bar")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should raise an error with invalid values' do
|
||||||
|
expect {
|
||||||
|
@resource = Puppet::Type::File_line.new(
|
||||||
|
{
|
||||||
|
:name => 'foo',
|
||||||
|
:path => @tmpfile,
|
||||||
|
:line => 'foo = bar',
|
||||||
|
:match => '^foo\s*=.*$',
|
||||||
|
:multiple => 'asgadga'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}.to raise_error(Puppet::Error, /Invalid value "asgadga"\. Valid values are true, false\./)
|
||||||
|
end
|
||||||
|
|
||||||
it 'should replace a line that matches' do
|
it 'should replace a line that matches' do
|
||||||
File.open(@tmpfile, 'w') do |fh|
|
File.open(@tmpfile, 'w') do |fh|
|
||||||
fh.write("foo1\nfoo=blah\nfoo2")
|
fh.write("foo1\nfoo=blah\nfoo2")
|
||||||
|
|
Loading…
Reference in a new issue