class Chef::Provider::Mount::Linux

Public Instance Methods

loop_mount_points() click to toggle source

Check to see if the volume is mounted. “findmnt” outputs the mount points with volume. Convert the mount_point of the resource to a real path in case it contains symlinks in its parents dirs.

# File lib/chef/provider/mount/linux.rb, line 32
def loop_mount_points
  # get loop_mount_points only if not initialized earlier
  @loop_mount_points ||= shell_out!("losetup -a").stdout

rescue Errno::ENOENT
  @loop_mount_points = ""
end
mounted?() click to toggle source
# File lib/chef/provider/mount/linux.rb, line 40
def mounted?
  mounted = false
  real_mount_point = if ::TargetIO::File.exist? @new_resource.mount_point
                       ::TargetIO::File.realpath(@new_resource.mount_point)
                     else
                       @new_resource.mount_point
                     end

  shell_out!("findmnt -rn").stdout.each_line do |line|
    case line
    # Permalink for device already mounted to mount point for : https://rubular.com/r/L0RNnD4gf2DJGl
    when /\A#{Regexp.escape(real_mount_point)}\s+#{device_mount_regex}\s/
      mounted = true
      logger.trace("Special device #{device_logstring} mounted as #{real_mount_point}")
    # Permalink for loop type devices mount points https://rubular.com/r/a0bS4p2RvXsGxx
    when %r{\A#{Regexp.escape(real_mount_point)}\s+\/dev\/loop+[0-9]+\s}
      loop_mount_points.each_line do |mount_point|
        if mount_point.include? device_real
          mounted = true
          break
        end
      end
    # Permalink for multiple devices mounted to the same mount point(i.e. '/proc') https://rubular.com/r/a356yzspU7N9TY
    when %r{\A#{Regexp.escape(real_mount_point)}\s+([/\w])+\s}
      mounted = false
      logger.trace("Special device #{$~[1]} mounted as #{real_mount_point}")
    # Permalink for bind device mounted to an existing mount point: https://rubular.com/r/QAE0ilL3sm3Ldz
    when %r{\A#{Regexp.escape(real_mount_point)}\s+([/\w])+\[#{device_mount_regex}\]\s}
      mounted = true
      logger.trace("Bind device #{device_logstring} mounted as #{real_mount_point}")
    # Permalink for network device mounted to an existing mount point: https://rubular.com/r/JRTXXGFdQtwCD6
    when /\A#{Regexp.escape(real_mount_point)}\s+#{device_mount_regex}\[/
      mounted = true
      logger.trace("Network device #{device_logstring} mounted as #{real_mount_point}")
    # Permalink for network device mounted with a space in device name https://rubular.com/r/CK5zWWms96CRES
    # See the comment in "device_with_space_escape" for an explanation what's going here.
    when /\A#{Regexp.escape(real_mount_point)}\s+#{device_with_space_escape}\s/
      mounted = true
      logger.trace("Network device #{device_logstring} mounted as #{real_mount_point}")
    end
  end
  @current_resource.mounted(mounted)
end