diff --git a/site-cookbooks/kosmos_kvm/attributes/default.rb b/site-cookbooks/kosmos_kvm/attributes/default.rb index 2983cf6..ea6cde0 100644 --- a/site-cookbooks/kosmos_kvm/attributes/default.rb +++ b/site-cookbooks/kosmos_kvm/attributes/default.rb @@ -11,3 +11,10 @@ node.default["kosmos_kvm"]["host"]["qemu_base_image"] = { node.default["kosmos_kvm"]["backup"]["schedule"] = "0/3:00" # Node/VM names excluded from backups node.default["kosmos_kvm"]["backup"]["nodes_excluded"] = [] + +node.default["kosmos_kvm"]["guest"]["swap"] = { + "enabled" => true, # set to false to disable swap on a guest + "size_mb" => nil, # nil => auto (half of RAM); integer => fixed MB; 0 => disabled + "path" => "/swapfile", + "swappiness" => nil # nil => leave kernel default; e.g. 10 to tune +} diff --git a/site-cookbooks/kosmos_kvm/recipes/guest.rb b/site-cookbooks/kosmos_kvm/recipes/guest.rb index e83f92a..9a42bd6 100644 --- a/site-cookbooks/kosmos_kvm/recipes/guest.rb +++ b/site-cookbooks/kosmos_kvm/recipes/guest.rb @@ -8,3 +8,20 @@ package %w(qemu-guest-agent) service "qemu-guest-agent" do action [:enable, :start] end + +swap_cfg = node["kosmos_kvm"]["guest"]["swap"] + +if swap_cfg["enabled"] && swap_cfg["size_mb"] != 0 + size = swap_cfg["size_mb"] || + (node["memory"]["total"].to_i / 2 / 1024) # kB -> MB, half RAM + + # The resource only creates/activates the swapfile if it is not already + # active; an existing active swapfile is left untouched (size is NOT + # reconciled to current RAM). + swap_file swap_cfg["path"] do + size size + persist true + swappiness swap_cfg["swappiness"] if swap_cfg["swappiness"] + action :create + end +end