Merge branch 'feature/master/8628_append_line'
This commit is contained in:
commit
436c925e8a
5 changed files with 120 additions and 0 deletions
15
lib/puppet/provider/append_line/ruby.rb
Normal file
15
lib/puppet/provider/append_line/ruby.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
Puppet::Type.type(:append_line).provide(:ruby) do
|
||||
|
||||
def exists?
|
||||
File.readlines(resource[:path]).find do |line|
|
||||
line.chomp == resource[:line].chomp
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
File.open(resource[:path], 'a') do |fh|
|
||||
fh.puts resource[:line]
|
||||
end
|
||||
end
|
||||
|
||||
end
|
44
lib/puppet/type/append_line.rb
Normal file
44
lib/puppet/type/append_line.rb
Normal file
|
@ -0,0 +1,44 @@
|
|||
Puppet::Type.newtype(:append_line) do
|
||||
|
||||
desc <<-EOT
|
||||
Type that can append a line to a file if it does not already contain it.
|
||||
|
||||
Example:
|
||||
|
||||
append_line { 'sudo_rule':
|
||||
path => '/etc/sudoers',
|
||||
line => '%admin ALL=(ALL) ALL',
|
||||
}
|
||||
|
||||
EOT
|
||||
|
||||
ensurable do
|
||||
defaultto :present
|
||||
newvalue(:present) do
|
||||
provider.create
|
||||
end
|
||||
end
|
||||
|
||||
newparam(:name, :namevar => true) do
|
||||
desc 'arbitrary name used as identity'
|
||||
end
|
||||
|
||||
newparam(:line) do
|
||||
desc 'The line to be appended to the path.'
|
||||
end
|
||||
|
||||
newparam(:path) do
|
||||
desc 'File to possibly append a line to.'
|
||||
validate do |value|
|
||||
unless (Puppet.features.posix? and value =~ /^\//) or (Puppet.features.microsoft_windows? and (value =~ /^.:\// or value =~ /^\/\/[^\/]+\/[^\/]+/))
|
||||
raise(Puppet::Error, "File paths must be fully qualified, not '#{value}'")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
validate do
|
||||
unless self[:line] and self[:path]
|
||||
raise(Puppet::Error, "Both line and path are required attributes")
|
||||
end
|
||||
end
|
||||
end
|
30
spec/unit/puppet/provider/append_line/ruby_spec.rb
Normal file
30
spec/unit/puppet/provider/append_line/ruby_spec.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
require 'puppet'
|
||||
require 'tempfile'
|
||||
provider_class = Puppet::Type.type(:append_line).provider(:ruby)
|
||||
describe provider_class do
|
||||
before :each do
|
||||
tmp = Tempfile.new('tmp')
|
||||
@tmpfile = tmp.path
|
||||
tmp.close!
|
||||
@resource = Puppet::Type::Append_line.new(
|
||||
{:name => 'foo', :path => @tmpfile, :line => 'foo'}
|
||||
)
|
||||
@provider = provider_class.new(@resource)
|
||||
end
|
||||
it 'should detect if the line exists in the file' do
|
||||
File.open(@tmpfile, 'w') do |fh|
|
||||
fh.write('foo')
|
||||
end
|
||||
@provider.exists?.should be_true
|
||||
end
|
||||
it 'should detect if the line does not exist in the file' do
|
||||
File.open(@tmpfile, 'w') do |fh|
|
||||
fh.write('foo1')
|
||||
end
|
||||
@provider.exists?.should be_nil
|
||||
end
|
||||
it 'should append to an existing file when creating' do
|
||||
@provider.create
|
||||
File.read(@tmpfile).chomp.should == 'foo'
|
||||
end
|
||||
end
|
24
spec/unit/puppet/type/append_line_spec.rb
Normal file
24
spec/unit/puppet/type/append_line_spec.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
require 'puppet'
|
||||
require 'tempfile'
|
||||
describe Puppet::Type.type(:append_line) do
|
||||
before :each do
|
||||
@append_line = Puppet::Type.type(:append_line).new(:name => 'foo', :line => 'line', :path => '/tmp/path')
|
||||
end
|
||||
it 'should accept a line and path' do
|
||||
@append_line[:line] = 'my_line'
|
||||
@append_line[:line].should == 'my_line'
|
||||
end
|
||||
it 'should accept posix filenames' do
|
||||
@append_line[:path] = '/tmp/path'
|
||||
@append_line[:path].should == '/tmp/path'
|
||||
end
|
||||
it 'should not accept unqualified path' do
|
||||
expect { @append_line[:path] = 'file' }.should raise_error(Puppet::Error, /File paths must be fully qualified/)
|
||||
end
|
||||
it 'should require that a line is specified' do
|
||||
expect { Puppet::Type.type(:append_line).new(:name => 'foo', :path => '/tmp/file') }.should raise_error(Puppet::Error, /Both line and path are required attributes/)
|
||||
end
|
||||
it 'should require that a file is specified' do
|
||||
expect { Puppet::Type.type(:append_line).new(:name => 'foo', :line => 'path') }.should raise_error(Puppet::Error, /Both line and path are required attributes/)
|
||||
end
|
||||
end
|
7
tests/append_line.pp
Normal file
7
tests/append_line.pp
Normal file
|
@ -0,0 +1,7 @@
|
|||
file { '/tmp/dansfile':
|
||||
ensure => present
|
||||
}->
|
||||
append_line { 'dans_line':
|
||||
line => 'dan is awesome',
|
||||
#path => '/tmp/dansfile',
|
||||
}
|
Loading…
Reference in a new issue