File: mount.rb

package info (click to toggle)
puppet-agent 8.10.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 27,392 kB
  • sloc: ruby: 286,820; sh: 492; xml: 116; makefile: 88; cs: 68
file content (76 lines) | stat: -rw-r--r-- 2,253 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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
require 'puppet'

# A module just to store the mount/unmount methods.  Individual providers
# still need to add the mount commands manually.
module Puppet::Provider::Mount
  # This only works when the mount point is synced to the fstab.
  def mount
    args = []

    # In general we do not have to pass mountoptions because we always
    # flush /etc/fstab before attempting to mount. But old code suggests
    # that MacOS always needs the mount options to be explicitly passed to
    # the mount command
    if Facter.value(:kernel) == 'Darwin'
      args << '-o' << options if options && options != :absent
    end
    args << resource[:name]

    mountcmd(*args)
    case get(:ensure)
    when :absent then set(ensure: :ghost)
    when :unmounted then set(ensure: :mounted)
    end
  end

  def remount
    # TRANSLATORS refers to remounting a file system
    info _('Remounting')
    os = Facter.value('os.name')
    supports_remounts = (resource[:remounts] == :true)
    if supports_remounts && os == 'AIX'
      remount_with_option('remount')
    elsif %r{^(FreeBSD|DragonFly|OpenBSD)$}.match?(os)
      remount_with_option('update')
    elsif supports_remounts
      mountcmd '-o', 'remount', resource[:name]
    else
      unmount
      mount
    end
  end

  # Remount by appending the supplied param "option" to any existing explicitly
  # defined options. If resource has no explicitly defined options, will mount
  # with only "option".
  # @param [String] option A remount option to use or append with existing options
  #
  def remount_with_option(option)
    options = if using_explicit_options?
                self.options + ',' + option
              else
                option
              end
    mountcmd '-o', options, resource[:name]
  end

  def using_explicit_options?
    !options.nil? && !options.empty?
  end

  # This only works when the mount point is synced to the fstab.
  def unmount
    umount resource[:name]

    # Update property hash for future queries (e.g. refresh is called)
    case get(:ensure)
    when :mounted then set(ensure: :unmounted)
    when :ghost then set(ensure: :absent)
    end
  end

  # Is the mount currently mounted?
  def mounted?
    [:mounted, :ghost].include?(get(:ensure))
  end
end