Class: Chef::Provider::Mount::Linux

Inherits:
Mount show all
Defined in:
lib/chef/provider/mount/linux.rb

Instance Attribute Summary

Attributes inherited from Mount

#real_device

Attributes inherited from Chef::Provider::Mount

#unmount_retries

Attributes inherited from Chef::Provider

#action, #after_resource, #current_resource, #logger, #new_resource, #run_context

Instance Method Summary collapse

Methods inherited from Mount

#default_mount_options, #device_should_exist?, #disable_fs, #enable_fs, #enabled?, #initialize, #load_current_resource, #mount_fs, #mountable?, #network_device?, #remount_command, #remount_fs, #umount_fs

Methods inherited from Chef::Provider::Mount

#device_unchanged?, #disable_fs, #enable_fs, #initialize, #load_current_resource, #mount_fs, #mount_options_unchanged?, #remount_fs, #umount_fs

Methods inherited from Chef::Provider

action, action_description, action_descriptions, #action_nothing, #check_resource_semantics!, #cleanup_after_converge, #compile_and_converge_action, #converge_by, #converge_if_changed, #cookbook_name, #define_resource_requirements, #description, #events, include_resource_dsl?, include_resource_dsl_module, #initialize, #introduced, #load_after_resource, #load_current_resource, #node, #process_resource_requirements, provides, provides?, #recipe_name, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use, use_inline_resources, #validate_required_properties!, #whyrun_mode?, #whyrun_supported?

Methods included from Mixin::Provides

#provided_as, #provides, #provides?

Methods included from Mixin::DescendantsTracker

#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited

Methods included from Mixin::LazyModuleInclude

#descendants, #include, #included

Methods included from Mixin::PowershellOut

#powershell_out, #powershell_out!

Methods included from Mixin::WindowsArchitectureHelper

#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory

Methods included from DSL::Secret

#default_secret_config, #default_secret_service, #secret, #with_secret_config, #with_secret_service

Methods included from DSL::RenderHelpers

#render_json, #render_toml, #render_yaml

Methods included from DSL::ReaderHelpers

#parse_file, #parse_json, #parse_toml, #parse_yaml

Methods included from DSL::Powershell

#ps_credential

Methods included from DSL::RegistryHelper

#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?

Methods included from DSL::ChefVault

#chef_vault, #chef_vault_item, #chef_vault_item_for_environment

Methods included from DSL::DataQuery

#data_bag, #data_bag_item, #search, #tagged?

Methods included from EncryptedDataBagItem::CheckEncrypted

#encrypted?

Methods included from DSL::PlatformIntrospection

#older_than_win_2012_or_8?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family

Methods included from DSL::Recipe

#exec, #have_resource_class_for?, #resource_class_for

Methods included from DSL::Definitions

add_definition, #evaluate_resource_definition, #has_resource_definition?

Methods included from DSL::Resources

add_resource_dsl, remove_resource_dsl

Methods included from DSL::Cheffish

load_cheffish

Methods included from DSL::RebootPending

#reboot_pending?

Methods included from DSL::IncludeRecipe

#include_recipe, #load_recipe

Methods included from Mixin::NotifyingBlock

#notifying_block, #subcontext_block

Methods included from DSL::DeclareResource

#build_resource, #declare_resource, #delete_resource, #delete_resource!, #edit_resource, #edit_resource!, #find_resource, #find_resource!, #resources, #with_run_context

Methods included from DSL::Compliance

#include_input, #include_profile, #include_waiver

Constructor Details

This class inherits a constructor from Chef::Provider::Mount::Mount

Instance Method Details

#loop_mount_pointsObject

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.



32
33
34
35
36
37
38
# 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?Boolean



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
77
78
79
80
81
82
# File 'lib/chef/provider/mount/linux.rb', line 40

def mounted?
  mounted = false
  real_mount_point = if ::File.exist? @new_resource.mount_point
                       ::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