Class: Chef::Provider::Mount::Mount
- Inherits:
-
Chef::Provider::Mount
- Object
- Chef::Provider
- Chef::Provider::Mount
- Chef::Provider::Mount::Mount
- Includes:
- Mixin::ShellOut
- Defined in:
- lib/chef/provider/mount/mount.rb
Constant Summary
Constants included from Mixin::ShellOut
Mixin::ShellOut::DEPRECATED_OPTIONS
Instance Attribute Summary collapse
-
#real_device ⇒ Object
Returns the value of attribute real_device.
Attributes inherited from Chef::Provider
#action, #current_resource, #new_resource, #run_context
Instance Method Summary collapse
- #device_should_exist? ⇒ Boolean
- #disable_fs ⇒ Object
- #enable_fs ⇒ Object
- #enabled? ⇒ Boolean
-
#initialize(new_resource, run_context) ⇒ Mount
constructor
A new instance of Mount.
- #load_current_resource ⇒ Object
- #mount_fs ⇒ Object
- #mountable? ⇒ Boolean
- #mounted? ⇒ Boolean
- #network_device? ⇒ Boolean
- #remount_fs ⇒ Object
- #umount_fs ⇒ Object
Methods included from Mixin::ShellOut
#run_command_compatible_options, #shell_out, #shell_out!
Methods inherited from Chef::Provider::Mount
#action_disable, #action_enable, #action_mount, #action_remount, #action_umount, #whyrun_supported?
Methods included from Mixin::Command
#chdir_or_tmpdir, #handle_command_failures, #output_of_command, #run_command, #run_command_with_systems_locale
Methods included from Mixin::Command::Unix
Methods included from Mixin::Command::Windows
Methods inherited from Chef::Provider
#action_nothing, build_from_file, #cleanup_after_converge, #converge, #cookbook_name, #define_resource_requirements, #events, #node, #process_resource_requirements, #requirements, #resource_collection, #run_action, #whyrun_mode?, #whyrun_supported?
Methods included from Mixin::ConvertToClassName
#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename
Methods included from Mixin::EnforceOwnershipAndPermissions
#access_controls, #enforce_ownership_and_permissions
Methods included from Mixin::RecipeDefinitionDSLCore
Methods included from Mixin::Language
#data_bag, #data_bag_item, #platform?, #platform_family?, #search, #value_for_platform, #value_for_platform_family
Constructor Details
#initialize(new_resource, run_context) ⇒ Mount
Returns a new instance of Mount.
29 30 31 32 |
# File 'lib/chef/provider/mount/mount.rb', line 29 def initialize(new_resource, run_context) super @real_device = nil end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Chef::Mixin::RecipeDefinitionDSLCore
Instance Attribute Details
#real_device ⇒ Object
Returns the value of attribute real_device
33 34 35 |
# File 'lib/chef/provider/mount/mount.rb', line 33 def real_device @real_device end |
Instance Method Details
#device_should_exist? ⇒ Boolean
179 180 181 182 |
# File 'lib/chef/provider/mount/mount.rb', line 179 def device_should_exist? ( not network_device? ) && ( not %w[ tmpfs fuse ].include? @new_resource.fstype ) end |
#disable_fs ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/chef/provider/mount/mount.rb', line 152 def disable_fs if @current_resource.enabled contents = [] found = false ::File.readlines("/etc/fstab").reverse_each do |line| if !found && line =~ /^#{device_fstab_regex}\s+#{Regexp.escape(@new_resource.mount_point)}/ found = true Chef::Log.debug("#{@new_resource} is removed from fstab") next else contents << line end end ::File.open("/etc/fstab", "w") do |fstab| contents.reverse_each { |line| fstab.puts line} end else Chef::Log.debug("#{@new_resource} is not enabled - nothing to do") end end |
#enable_fs ⇒ Object
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/chef/provider/mount/mount.rb', line 135 def enable_fs if @current_resource.enabled && Chef::Log.debug("#{@new_resource} is already enabled - nothing to do") return nil end if @current_resource.enabled # The current options don't match what we have, so # disable, then enable. disable_fs end ::File.open("/etc/fstab", "a") do |fstab| fstab.puts("#{device_fstab} #{@new_resource.mount_point} #{@new_resource.fstype} #{@new_resource..nil? ? "defaults" : @new_resource..join(",")} #{@new_resource.dump} #{@new_resource.pass}") Chef::Log.debug("#{@new_resource} is enabled at #{@new_resource.mount_point}") end end |
#enabled? ⇒ Boolean
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/chef/provider/mount/mount.rb', line 53 def enabled? # Check to see if there is a entry in /etc/fstab. Last entry for a volume wins. enabled = false ::File.foreach("/etc/fstab") do |line| case line when /^[#\s]/ next when /^#{device_fstab_regex}\s+#{Regexp.escape(@new_resource.mount_point)}\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ enabled = true @current_resource.fstype($1) @current_resource.($2) @current_resource.dump($3.to_i) @current_resource.pass($4.to_i) Chef::Log.debug("Found mount #{device_fstab} to #{@new_resource.mount_point} in /etc/fstab") next when /^[\/\w]+\s+#{Regexp.escape(@new_resource.mount_point)}\s+/ enabled = false Chef::Log.debug("Found conflicting mount point #{@new_resource.mount_point} in /etc/fstab") end end @current_resource.enabled(enabled) end |
#load_current_resource ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/chef/provider/mount/mount.rb', line 35 def load_current_resource @current_resource = Chef::Resource::Mount.new(@new_resource.name) @current_resource.mount_point(@new_resource.mount_point) @current_resource.device(@new_resource.device) mounted? enabled? end |
#mount_fs ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/chef/provider/mount/mount.rb', line 91 def mount_fs unless @current_resource.mounted mountable? command = "mount -t #{@new_resource.fstype}" command << " -o #{@new_resource..join(',')}" unless @new_resource..nil? || @new_resource..empty? command << case @new_resource.device_type when :device " #{device_real}" when :label " -L #{@new_resource.device}" when :uuid " -U #{@new_resource.device}" end command << " #{@new_resource.mount_point}" shell_out!(command) Chef::Log.debug("#{@new_resource} is mounted at #{@new_resource.mount_point}") else Chef::Log.debug("#{@new_resource} is already mounted at #{@new_resource.mount_point}") end end |
#mountable? ⇒ Boolean
43 44 45 46 47 48 49 50 51 |
# File 'lib/chef/provider/mount/mount.rb', line 43 def mountable? # only check for existence of non-remote devices if (device_should_exist? && !::File.exists?(device_real) ) raise Chef::Exceptions::Mount, "Device #{@new_resource.device} does not exist" elsif( !::File.exists?(@new_resource.mount_point) ) raise Chef::Exceptions::Mount, "Mount point #{@new_resource.mount_point} does not exist" end return true end |
#mounted? ⇒ Boolean
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/chef/provider/mount/mount.rb', line 76 def mounted? mounted = false shell_out!("mount").stdout.each_line do |line| case line when /^#{device_mount_regex}\s+on\s+#{Regexp.escape(@new_resource.mount_point)}/ mounted = true Chef::Log.debug("Special device #{device_logstring} mounted as #{@new_resource.mount_point}") when /^([\/\w])+\son\s#{Regexp.escape(@new_resource.mount_point)}\s+/ mounted = false Chef::Log.debug("Special device #{$~[1]} mounted as #{@new_resource.mount_point}") end end @current_resource.mounted(mounted) end |
#network_device? ⇒ Boolean
175 176 177 |
# File 'lib/chef/provider/mount/mount.rb', line 175 def network_device? @new_resource.device =~ /:/ || @new_resource.device =~ /\/\// end |
#remount_fs ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/chef/provider/mount/mount.rb', line 121 def remount_fs if @current_resource.mounted and @new_resource.supports[:remount] shell_out!("mount -o remount #{@new_resource.mount_point}") @new_resource.updated_by_last_action(true) Chef::Log.debug("#{@new_resource} is remounted at #{@new_resource.mount_point}") elsif @current_resource.mounted umount_fs sleep 1 mount_fs else Chef::Log.debug("#{@new_resource} is not mounted at #{@new_resource.mount_point} - nothing to do") end end |
#umount_fs ⇒ Object
112 113 114 115 116 117 118 119 |
# File 'lib/chef/provider/mount/mount.rb', line 112 def umount_fs if @current_resource.mounted shell_out!("umount #{@new_resource.mount_point}") Chef::Log.debug("#{@new_resource} is no longer mounted at #{@new_resource.mount_point}") else Chef::Log.debug("#{@new_resource} is not mounted at #{@new_resource.mount_point}") end end |