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