diff options
author | Melissa Stone <melissa@puppet.com> | 2018-04-13 13:32:32 -0700 |
---|---|---|
committer | Melissa Stone <melissa@puppet.com> | 2018-04-16 16:19:30 -0700 |
commit | 759ad74f328af3e0ff16cfb9f341ea7fdca31313 (patch) | |
tree | 921c4d63668ec120e2fb722322cd0474b357684f /lib | |
parent | e7978ebb8e36bea5b90c21cdb4c0b9e7f4e5c8d4 (diff) | |
download | puppet-mailalias_core-759ad74f328af3e0ff16cfb9f341ea7fdca31313.tar.gz puppet-mailalias_core-759ad74f328af3e0ff16cfb9f341ea7fdca31313.tar.bz2 |
Initial mailalias import from bc8e56000fcd585d2197e1ad9e6f741bec56c174
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/provider/mailalias/aliases.rb | 50 | ||||
-rw-r--r-- | lib/puppet/type/mailalias.rb | 46 |
2 files changed, 96 insertions, 0 deletions
diff --git a/lib/puppet/provider/mailalias/aliases.rb b/lib/puppet/provider/mailalias/aliases.rb new file mode 100644 index 0000000..038d450 --- /dev/null +++ b/lib/puppet/provider/mailalias/aliases.rb @@ -0,0 +1,50 @@ +require 'puppet/provider/parsedfile' + +Puppet::Type.type(:mailalias).provide( + :aliases, + :parent => Puppet::Provider::ParsedFile, + :default_target => "/etc/aliases", + :filetype => :flat +) do + text_line :comment, :match => /^#/ + text_line :blank, :match => /^\s*$/ + + record_line :aliases, :fields => %w{name recipient}, :separator => /\s*:\s*/, :block_eval => :instance do + def post_parse(record) + if record[:recipient] + record[:recipient] = record[:recipient].split(/\s*,\s*/).collect { |d| d.gsub(/^['"]|['"]$/, '') } + end + record + end + + def process(line) + ret = {} + records = line.split(':',4) + ret[:name] = records[0].strip + if records.length == 4 and records[2].strip == 'include' + ret[:file] = records[3].strip + else + records = line.split(':',2) + ret[:recipient] = records[1].strip + end + ret + end + + def to_line(record) + if record[:recipient] + dest = record[:recipient].collect do |d| + # Quote aliases that have non-alpha chars + if d =~ /[^-+\w@.]/ + '"%s"' % d + else + d + end + end.join(",") + "#{record[:name]}: #{dest}" + elsif record[:file] + "#{record[:name]}: :include: #{record[:file]}" + end + end + end +end + diff --git a/lib/puppet/type/mailalias.rb b/lib/puppet/type/mailalias.rb new file mode 100644 index 0000000..b5df7b8 --- /dev/null +++ b/lib/puppet/type/mailalias.rb @@ -0,0 +1,46 @@ +module Puppet + Type.newtype(:mailalias) do + @doc = "Creates an email alias in the local alias database." + + ensurable + + newparam(:name, :namevar => true) do + desc "The alias name." + end + + newproperty(:recipient, :array_matching => :all) do + desc "Where email should be sent. Multiple values + should be specified as an array. The file and the + recipient entries are mutually exclusive." + end + + newproperty(:file) do + desc "A file containing the alias's contents. The file and the + recipient entries are mutually exclusive." + + validate do |value| + unless Puppet::Util.absolute_path?(value) + fail Puppet::Error, _("File paths must be fully qualified, not '%{value}'") % { value: value } + end + end + end + + newproperty(:target) do + desc "The file in which to store the aliases. Only used by + those providers that write to disk." + + defaultto { if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) + @resource.class.defaultprovider.default_target + else + nil + end + } + end + + validate do + if self[:recipient] && self[:file] + self.fail _("You cannot specify both a recipient and a file") + end + end + end +end |