diff --git a/shared/lib/puppet/provider/sudoers_d/install.rb b/shared/lib/puppet/provider/sudoers_d/install.rb new file mode 100644 index 0000000..a21c09d --- /dev/null +++ b/shared/lib/puppet/provider/sudoers_d/install.rb @@ -0,0 +1,33 @@ +require 'pathname' + +Puppet::Type.type(:sudoers_d).provide(:install) do + desc "Install a sudoers.d file" + + def create + temp_target.open('w') { |fh| fh.puts content } + temp_target.chmod 0440 + temp_target.rename(target) + end + + def destroy + target.unlink + end + + def exists? + target.file? and target.read == content + end + + private + def target + @target ||= Pathname("/etc/sudoers.d/#{@resource[:name]}") + end + + def temp_target + @temp_target ||= Pathname("/tmp/sudoers.d-#{@resource[:name]}-#{Time.now.to_f}") + end + + def content + @resource[:content] + end +end + diff --git a/shared/lib/puppet/type/sudoers_d.rb b/shared/lib/puppet/type/sudoers_d.rb new file mode 100644 index 0000000..4b91d53 --- /dev/null +++ b/shared/lib/puppet/type/sudoers_d.rb @@ -0,0 +1,14 @@ +Puppet::Type.newtype(:sudoers_d) do + @doc = "Add a file to /etc/sudoers.d" + + ensurable + + newparam(:name) do + desc "The file to create" + end + + newparam(:content) do + desc "The content of the file" + end +end +