diff options
author | Dan Bode <dan@puppetlabs.com> | 2011-07-26 15:35:52 -0700 |
---|---|---|
committer | Dan Bode <dan@puppetlabs.com> | 2011-07-26 15:35:52 -0700 |
commit | 436c925e8a0a8bdaf616120030e3d55e8c0aea46 (patch) | |
tree | 42d12c5726f9a59a95cb77b40aec4cc8c9b84e6b /lib/puppet | |
parent | a6ed9fbca3f256304df17b1cfae157728d60bb1d (diff) | |
parent | e82370a26d15181b6c3b17b25c2349752e41ed38 (diff) |
Merge branch 'feature/master/8628_append_line'
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/provider/append_line/ruby.rb | 15 | ||||
-rw-r--r-- | lib/puppet/type/append_line.rb | 44 |
2 files changed, 59 insertions, 0 deletions
diff --git a/lib/puppet/provider/append_line/ruby.rb b/lib/puppet/provider/append_line/ruby.rb new file mode 100644 index 0000000..5e78659 --- /dev/null +++ b/lib/puppet/provider/append_line/ruby.rb @@ -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 diff --git a/lib/puppet/type/append_line.rb b/lib/puppet/type/append_line.rb new file mode 100644 index 0000000..b3f926c --- /dev/null +++ b/lib/puppet/type/append_line.rb @@ -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 |