aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/provider/mailalias/aliases.rb50
-rw-r--r--lib/puppet/type/mailalias.rb46
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