Class: Chef::Provider::Mount::Mount
Constant Summary
Mixin::ShellOut::DEPRECATED_OPTIONS
Instance Attribute Summary collapse
#action, #current_resource, #new_resource, #run_context
Instance Method Summary
collapse
#run_command_compatible_options, #shell_out, #shell_out!
#action_disable, #action_enable, #action_mount, #action_remount, #action_umount, #whyrun_supported?
#chdir_or_tmpdir, #handle_command_failures, #output_of_command, #run_command, #run_command_with_systems_locale
#popen4
#popen4
#action_nothing, #cleanup_after_converge, #cookbook_name, #define_resource_requirements, #events, #node, #process_resource_requirements, #requirements, #resource_collection, #run_action, #set_updated_status, #whyrun_mode?, #whyrun_supported?
#method_missing
#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename
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::DSL::Recipe
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 && mount_options_unchanged?
Chef::Log.debug("#{@new_resource} is already enabled - nothing to do")
return nil
end
if @current_resource.enabled
disable_fs
end
::File.open("/etc/fstab", "a") do |fstab|
fstab.puts("#{device_fstab} #{@new_resource.mount_point} #{@new_resource.fstype} #{@new_resource.options.nil? ? "defaults" : @new_resource.options.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?
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.options($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
|
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.options.join(',')}" unless @new_resource.options.nil? || @new_resource.options.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?
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
|