From 098dcd4e328920f9ba8e3b59cb591a62b0216d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Fri, 14 Aug 2026 12:10:37 -0600 Subject: [PATCH] Auto-configure swap Create a swapfile and configure it to be used for swap, immediately and on boot; defaults to half the size of RAM. See attribute for overriding configs to tune size or swappiness. --- site-cookbooks/kosmos_kvm/attributes/default.rb | 7 +++++++ site-cookbooks/kosmos_kvm/recipes/guest.rb | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) 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