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