self._validate

in cookbooks/fb_swap/libraries/default.rb [20:127]


    def self._validate(node)
      device = self._device(node)
      file = self._file(node)
      
      
      
      swaps_enabled = self._get_swaps_enabled

      if device
        max_device_size_bytes = self._get_max_device_size_bytes(device)
        
        
        
        device_current_size_bytes = -1
      else
        max_device_size_bytes = 0
        
        device_current_size_bytes = nil
      end

      
      file_current_size_bytes = -1

      
      swaps_enabled.each do |swap|
        if device && swap['file'] == device && swap['mode'] == 'partition'
          
          device_current_size_bytes = swap['size_bytes']
        elsif swap['file'] == file && swap['mode'] == 'file'
          
          file_current_size_bytes = swap['size_bytes']
        else
          fail "fb_swap: Found an unmanaged swap: #{swap}"
        end
      end

      if node['fb_swap']['enabled']
        size = node['fb_swap']['size']
      else
        size = 0
      end

      if size.nil?
        
        if max_device_size_bytes.zero?
          msg = 'fb_swap: default swap is requested, but there\'s no swap ' +
            'partition so no implicit size. Set node.default[\'fb_swap\']' +
            '[\'size\'] to something specific if you want to use a swap file'
          if node['fb_swap']['strict']
            fail msg
          else
            Chef::Log.warn(msg)
            device_size_bytes = 0
            file_size_bytes = 0
          end
        else
          
          device_size_bytes = max_device_size_bytes
          file_size_bytes = 0
        end
      else
        
        size_bytes = size * 1024
        if size_bytes % 4096 != 0
          fail "fb_swap::default: #{size_bytes} bytes is not an even number " +
               'of 4KiB pages'
        elsif size_bytes <= 1048576 && node['fb_swap']['enabled']
          fail "fb_swap::default: #{size_bytes} is less than 1MiB. Use " +
               'enabled = false instead'
        elsif node['fb_swap']['filesystem'] != '/'
          device_size_bytes = 0
          file_size_bytes = size_bytes
        elsif size_bytes <= max_device_size_bytes
          device_size_bytes = size_bytes
          file_size_bytes = 0
        else
          device_size_bytes = max_device_size_bytes
          file_size_bytes = size_bytes - max_device_size_bytes
        end
      end

      if file_size_bytes.positive? && !self.swap_file_possible?(node)
        fail "fb_swap: swap file of #{file_size_bytes} requested, but " +
             'system does not support it. See previous log lines for ' +
             'warnings that explain why'
      end

      if device
        swapoff_needed, device_size_bytes = self._validate_resize(
          node, 'device', device_size_bytes, device_current_size_bytes
        )
      else
        swapoff_needed = false
      end
      file_swapoff_needed, file_size_bytes = self._validate_resize(
        node, 'file', file_size_bytes, file_current_size_bytes
      )
      swapoff_needed ||= file_swapoff_needed

      node.default['fb_swap']['_calculated'] = {
        'device_size_bytes' => device_size_bytes,
        'device_current_size_bytes' => device_current_size_bytes,
        'file_size_bytes' => file_size_bytes,
        'file_current_size_bytes' => file_current_size_bytes,
        'swapoff_needed' => swapoff_needed,
      }
    end