diff options
author | Josh Cooper <josh@puppet.com> | 2018-04-26 11:41:34 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-26 11:41:34 -0700 |
commit | 81d2cf81cd02c09f53774c1b95ae2de474b28b80 (patch) | |
tree | 4997f732281a7e0cb5ff33a745663cc5cffed741 /lib/puppet/provider | |
parent | 7c51be1c0d8ace7cb679f16ee4d8e3697ea95ae8 (diff) | |
parent | beb0aa2b549ed4b6f90d82a864a443e35c102b38 (diff) | |
download | puppet-mailalias_core-81d2cf81cd02c09f53774c1b95ae2de474b28b80.tar.gz puppet-mailalias_core-81d2cf81cd02c09f53774c1b95ae2de474b28b80.tar.bz2 |
Merge pull request #1 from melissa/maint/master/initial-commits
Maint/master/initial commits
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r-- | lib/puppet/provider/mailalias/aliases.rb | 52 |
1 files changed, 52 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..c8e5e3e --- /dev/null +++ b/lib/puppet/provider/mailalias/aliases.rb @@ -0,0 +1,52 @@ +require 'puppet/provider/parsedfile' + +Puppet::Type.type(:mailalias).provide( + :aliases, + parent: Puppet::Provider::ParsedFile, + default_target: '/etc/aliases', + filetype: :flat, +) do + + desc 'The alias provider for mailalias.' + + text_line :comment, match: %r{^#} + text_line :blank, match: %r{^\s*$} + + record_line :aliases, fields: %w[name recipient], separator: %r{\s*:\s*}, block_eval: :instance do + def post_parse(record) + if record[:recipient] + record[:recipient] = record[:recipient].split(%r{\s*,\s*}).map { |d| d.gsub(%r{^['"]|['"]$}, '') } + end + record + end + + def process(line) + ret = {} + records = line.split(':', 4) + ret[:name] = records[0].strip + if records.length == 4 && 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].map { |d| + # Quote aliases that have non-alpha chars + if d =~ %r{[^-+\w@.]} + '"%s"' % d + else + d + end + }.join(',') + "#{record[:name]}: #{dest}" + elsif record[:file] + "#{record[:name]}: :include: #{record[:file]}" + end + end + end +end |