From 61710aa4a4da06e9e53abc82af89328762cecccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Fri, 21 Oct 2022 10:50:04 +0200 Subject: [PATCH] Set up systemd service and timer for backups --- nodes/draco.kosmos.org.json | 5 +++ nodes/fornax.kosmos.org.json | 5 +++ .../kosmos_kvm/attributes/default.rb | 3 ++ site-cookbooks/kosmos_kvm/recipes/backup.rb | 36 +++++++++++++++++++ 4 files changed, 49 insertions(+) diff --git a/nodes/draco.kosmos.org.json b/nodes/draco.kosmos.org.json index 3e6e9bb..8a09ead 100644 --- a/nodes/draco.kosmos.org.json +++ b/nodes/draco.kosmos.org.json @@ -3,6 +3,11 @@ "normal": { "knife_zero": { "host": "10.1.1.167" + }, + "kosmos_kvm": { + "backup": { + "schedule": "0/3:45" + } } }, "automatic": { diff --git a/nodes/fornax.kosmos.org.json b/nodes/fornax.kosmos.org.json index d0ecedc..ba22c12 100644 --- a/nodes/fornax.kosmos.org.json +++ b/nodes/fornax.kosmos.org.json @@ -3,6 +3,11 @@ "normal": { "knife_zero": { "host": "10.1.1.147" + }, + "kosmos_kvm": { + "backup": { + "schedule": "0/3:00" + } } }, "automatic": { diff --git a/site-cookbooks/kosmos_kvm/attributes/default.rb b/site-cookbooks/kosmos_kvm/attributes/default.rb index d20a34b..dc2b563 100644 --- a/site-cookbooks/kosmos_kvm/attributes/default.rb +++ b/site-cookbooks/kosmos_kvm/attributes/default.rb @@ -5,3 +5,6 @@ node.default["kosmos_kvm"]["host"]["qemu_base_image"] = { "checksum" => "6db74917f85146569cb6ae89e1d163ac6d1e488a7f32bc74761ec6d1869c714f", "path" => "/var/lib/libvirt/images/base/ubuntu-20.04-server-cloudimg-amd64-disk-kvm-#{ubuntu_server_cloud_image_release}.qcow2" } + +# A systemd.timer OnCalendar config value +node.default["kosmos_kvm"]["backup"]["schedule"] = "daily" diff --git a/site-cookbooks/kosmos_kvm/recipes/backup.rb b/site-cookbooks/kosmos_kvm/recipes/backup.rb index 8c97576..e7e7f49 100644 --- a/site-cookbooks/kosmos_kvm/recipes/backup.rb +++ b/site-cookbooks/kosmos_kvm/recipes/backup.rb @@ -54,3 +54,39 @@ template "/root/backups/backup_all_vms.sh" do mode '0750' variables vm_domains: vm_domains end + +systemd_unit "backup-libvirt-guests.service" do + content({ + Unit: { + Description: "Back up libvirt guest images and metadata", + Wants: "network.target" + }, + Service: { + Type: "oneshot", + EnvironmentFile: "/root/.borg_credentials.env", + ExecStart: "/root/backups/backup_all_vms.sh", + SyslogIdentifier: "backup-libvirt-guests", + Restart: "no" + } + }) + verify false + triggers_reload true + action [:create] +end + +systemd_unit "backup-libvirt-guests.timer" do + content({ + Unit: { + Description: "Back up libvirt guest images and metadata", + }, + Timer: { + OnCalendar: node["kosmos_kvm"]["backup"]["schedule"] + }, + Install: { + WantedBy: "timers.target" + } + }) + verify false + triggers_reload true + action [:create, :enable, :start] +end