File: aliases.rb

package info (click to toggle)
puppet-module-puppetlabs-mailalias-core 1.0.6-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 236 kB
  • sloc: ruby: 431; sh: 10; makefile: 4
file content (52 lines) | stat: -rw-r--r-- 1,375 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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: ['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