Puppet Function: simplib::join_mount_opts
- Defined in:
- lib/puppet/functions/simplib/join_mount_opts.rb
- Function type:
- Ruby 4.x API
Overview
Merge two sets of ‘mount` options in a reasonable fashion, giving precedence to the second set.
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 |
# File 'lib/puppet/functions/simplib/join_mount_opts.rb', line 3 Puppet::Functions.create_function(:'simplib::join_mount_opts') do # @param system_mount_opts System mount options # @param new_mount_opts New mount options, which will override # `system_mount_opts` when there are conflicts # @return [String] Merged options string in which `new_mount_opts` # mount options take precedence; options are comma delimited # dispatch :join_mount_opts do required_param 'Array[String]', :system_mount_opts required_param 'Array[String]', :new_mount_opts end def join_mount_opts(system_mount_opts, new_mount_opts) system_opts = system_mount_opts.map(&:strip) new_opts = new_mount_opts.map(&:strip) # Remove any items that have a corresponding 'no' item in the # list. Such as 'dev' vs 'nodev', etc... system_opts.delete_if{|x| new_opts.include?("no#{x}") } # Reverse this if the user wants to explicitly set an option and a no* # option is already present. system_opts.delete_if{|x| found = false if x =~ /^no(.*)/ found = new_opts.include?($1) end found } = {} scope = closure_scope selinux_current_mode = scope['facts']['selinux_current_mode'] if !selinux_current_mode or selinux_current_mode == 'disabled' # SELinux is off, get rid of selinux related items in the options system_opts.delete_if{|x| x =~ /^(((fs|def|root)?context=)|seclabel)/ } new_opts.delete_if{|x| x =~ /^(((fs|def|root)?context=)|seclabel)/ } else # Remove any SELinux context items if 'seclabel' is set. This # means that we can't remount it with new options. if system_opts.include?('seclabel') # These two aren't compatible for remounts and can cause # issues unless done *very* carefully. system_opts.delete_if{|x| x =~ /^(fs|def|root)?context=/ } new_opts.delete_if{|x| x =~ /^(fs|def|root)?context=/ } end end (system_opts + new_opts).each do |opt| k,v = opt.split('=') if v and v.include?('"\'') # special case with "' that will cause problems v.delete!('"\'') # Anything with a comma must be double quoted! v = '"' + v + '"' if v.include?(',') end [k] = v end retval = [] .keys.sort.each do |k| if [k] retval << "#{k}=#{[k]}" else retval << k end end retval.join(',') end end |