summaryrefslogtreecommitdiffstats
path: root/lib/puppet/provider/mount/parsed.rb
blob: b30de2bc79227624d459ac2066107512614e5c6a (plain)
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
require 'puppet/provider/parsedfile'
require 'puppet/provider/mount'

fstab = nil
case Facter.value(:operatingsystem)
when "Solaris"; fstab = "/etc/vfstab"
else
    fstab = "/etc/fstab"
end

Puppet::Type.type(:mount).provide(:parsed,
    :parent => Puppet::Provider::ParsedFile,
    :default_target => fstab,
    :filetype => :flat
) do
    include Puppet::Provider::Mount
    #confine :exists => fstab

    commands :mountcmd => "mount", :umount => "umount"

    @platform = Facter["operatingsystem"].value
    case @platform
    when "Solaris"
        @fields = [:device, :blockdevice, :name, :fstype, :pass, :atboot,
               :options]
    else
        @fields = [:device, :name, :fstype, :options, :dump, :pass]
        @fielddefaults = [ nil ] * 4 + [ "0", "2" ]
    end

    text_line :comment, :match => /^\s*#/
    text_line :blank, :match => /^\s*$/

    optional_fields  = @fields - [:device, :name, :blockdevice]
    mandatory_fields = @fields - optional_fields

    # fstab will ignore lines that have fewer than the mandatory number of columns,
    # so we should, too.
    field_pattern = '(\s*(?>\S+))'
    text_line :incomplete, :match => /^(?!#{field_pattern}{#{mandatory_fields.length}})/

    record_line self.name, :fields => @fields, :separator => /\s+/, :joiner => "\t", :optional => optional_fields

end