From a3844b7ef67c8ad6f7109a26355d3dbc63c29a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Tue, 18 Oct 2022 18:45:17 +0200 Subject: [PATCH] WIP Add KVM host backup recipe Add a recipe that configures scripts for live backups of VM images via libvirt and borg. --- site-cookbooks/kosmos_kvm/files/backup_vm.sh | 30 ++++++++++++++ site-cookbooks/kosmos_kvm/recipes/backup.rb | 40 +++++++++++++++++++ .../templates/backup_all_vms.sh.erb | 11 +++++ 3 files changed, 81 insertions(+) create mode 100644 site-cookbooks/kosmos_kvm/files/backup_vm.sh create mode 100644 site-cookbooks/kosmos_kvm/recipes/backup.rb create mode 100644 site-cookbooks/kosmos_kvm/templates/backup_all_vms.sh.erb diff --git a/site-cookbooks/kosmos_kvm/files/backup_vm.sh b/site-cookbooks/kosmos_kvm/files/backup_vm.sh new file mode 100644 index 0000000..96dbaea --- /dev/null +++ b/site-cookbooks/kosmos_kvm/files/backup_vm.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# GENERATED BY CHEF +# DO NOT EDIT +set -e + +REPOSITORY=$BORG_REPO + +echo "Starting backup of VM: $1" + +echo "Dumping domain XML to /root/backups/vm_meta/$1.xml" +virsh dumpxml --migratable $1 > /root/backups/vm_meta/$1.xml + +virsh snapshot-create-as --domain $1 \ + --name hotswap.qcow2 \ + --no-metadata \ + --atomic \ + --quiesce \ + --disk-only \ + --diskspec vda,snapshot=external + +borg create -v --stats \ + $REPOSITORY::$1_$(date +%F_%H-%M) \ + /var/lib/libvirt/images/$1.qcow2 \ + /root/backups/vm_meta + +echo "Pivoting base image back to original" +virsh blockcommit $1 vda --pivot --base=/var/lib/libvirt/images/$1.qcow2 + +echo "Removing snapshot image" +rm /var/lib/libvirt/images/$1.hotswap.qcow2 diff --git a/site-cookbooks/kosmos_kvm/recipes/backup.rb b/site-cookbooks/kosmos_kvm/recipes/backup.rb new file mode 100644 index 0000000..e8429b0 --- /dev/null +++ b/site-cookbooks/kosmos_kvm/recipes/backup.rb @@ -0,0 +1,40 @@ +# +# Cookbook:: kosmos_kvm +# Recipe:: backup +# + +apt_package "borgbackup" + +borg_credentials = data_bag_item("credentials", "borg") + +file "/root/.ssh/borg_rsa" do + content borg_credentials["ssh_key"] + mode '0600' +end + +bash "Add borg environment variables for bash" do + code <<-EOF + cat >>/root/.bashrc < +do + /root/backups/backup_vm.sh $domain +done