From 808b087a82d2858680038ab068844717a5dce70e Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Tue, 18 Jul 2023 15:31:52 -0400 Subject: [PATCH] Install a script to snapshot the k8s bhyve virtual machines and persistent volume space. --- .../roles/mrmanager/files/k8s_snapshot.bash | 45 +++++++++++++++++++ ansible/roles/mrmanager/tasks/freebsd.yaml | 11 +++++ 2 files changed, 56 insertions(+) create mode 100644 ansible/roles/mrmanager/files/k8s_snapshot.bash diff --git a/ansible/roles/mrmanager/files/k8s_snapshot.bash b/ansible/roles/mrmanager/files/k8s_snapshot.bash new file mode 100644 index 0000000..2197fea --- /dev/null +++ b/ansible/roles/mrmanager/files/k8s_snapshot.bash @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +# +# Kill the virtual machines, take a snapshot, and start the virtual machines up again. +set -euo pipefail +IFS=$'\n\t' +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +############## Setup ######################### + +function die { + local status_code="$1" + shift + (>&2 echo "${@}") + exit "$status_code" +} + +function log { + (>&2 echo "${@}") +} + +############## Program ######################### + +function main { + snapshot_name="$1" + kill_all_bhyve + log "Taking snapshot $1" + for worker in worker0 worker1 worker2 controller0 controller1 controller2; do + doas zfs snapshot -r zdata/vm/${worker}/disk0@${snapshot_name} + done + doas zfs snapshot zdata/k8spersistent@${snapshot_name} + launch_all_bhyve + log "Done." +} + +function kill_all_bhyve { + log "Killing all virtual machines." + doas killall bhyve; while true; do tmux ls || break; sleep 2; done; +} + +function launch_all_bhyve { + log "Launching all virtual machines." + for vm in poudriere controller0 controller1 controller2 worker0 worker1 worker2; do tmux new -d -s $vm doas bhyve_netgraph_bridge start $vm zdata/vm/$vm /vm/$vm; sleep 5; done +} + +main "$@" diff --git a/ansible/roles/mrmanager/tasks/freebsd.yaml b/ansible/roles/mrmanager/tasks/freebsd.yaml index 648bfe9..1834352 100644 --- a/ansible/roles/mrmanager/tasks/freebsd.yaml +++ b/ansible/roles/mrmanager/tasks/freebsd.yaml @@ -39,3 +39,14 @@ group: wheel loop: - /k8spersistent + +- name: Install scripts + copy: + src: "files/{{ item.src }}" + dest: "{{ item.dest }}" + mode: 0755 + owner: root + group: wheel + loop: + - src: "k8s_snapshot.bash" + dest: /usr/local/bin/k8s_snapshot