Skip to content

Instantly share code, notes, and snippets.

@johnsimcall
Last active October 11, 2022 15:29
Show Gist options
  • Save johnsimcall/c395646703418b541b7a8a20a0d750ce to your computer and use it in GitHub Desktop.
Save johnsimcall/c395646703418b541b7a8a20a0d750ce to your computer and use it in GitHub Desktop.
a Bash script to retrieve RBD snapshot info for OpenShift Data Foundation Regional Disaster Recovery
#!/bin/bash
set -e
if [ $# != 4 ]; then
echo "Usage: ceph-snap-info.sh <namespace> <pvc_name> <primary_context> <dr_context>"
echo "e.g. : ceph-snap-info.sh pacman mongo-storage west east"
exit 1;
fi
if [ ! $(oc whoami) ]; then
echo "Error, not logged in"
exit 1;
fi
NAMESPACE=$1
PVC=$2
PRIMARY_CONTEXT=$3
DR_CONTEXT=$4
PV=$(oc get pvc ${PVC} -n $NAMESPACE -o jsonpath='{.spec.volumeName}' --context $PRIMARY_CONTEXT)
RBD=$(oc get pv ${PV} -o jsonpath='{.spec.csi.volumeAttributes.imageName}' --context $PRIMARY_CONTEXT)
# this block works if you've already installed rook-ceph via Krew
#ORIGINAL_CONTEXT=$(oc config current-context)
#oc config use-context $1
#oc rook-ceph -n openshift-storage rbd -p ocs-storagecluster-cephblockpool snap ls --all ${RBD}
#oc config use-context $ORIGINAL_CONTEXT
# this block works with raw oc commands
#oc exec -it -n openshift-storage $(oc get pod -o name -l app=rook-ceph-operator -n openshift-storage) -- /bin/bash -c 'export CEPH_CONF=/var/lib/rook/openshift-storage/openshift-storage.config; rbd -p ocs-storagecluster-cephblockpool du'
PRIMARY_OPERATOR_POD=$(oc get pod -o name -l app=rook-ceph-operator -n openshift-storage --context $DR_CONTEXT)
PRIMARY_OC_CMD="oc exec --context $DR_CONTEXT -it -n openshift-storage "
PRIMARY_OC_CMD+=${PRIMARY_OPERATOR_POD}
PRIMARY_OC_CMD+=$' -- /bin/bash -c \'export CEPH_CONF=/var/lib/rook/openshift-storage/openshift-storage.config; '
PRIMARY_OC_CMD+="rbd -p ocs-storagecluster-cephblockpool snap ls --all "
PRIMARY_OC_CMD+=${RBD}
PRIMARY_OC_CMD+="'"
DR_OPERATOR_POD=$(oc get pod -o name -l app=rook-ceph-operator -n openshift-storage --context $DR_CONTEXT)
DR_OC_CMD="oc exec --context $DR_CONTEXT -it -n openshift-storage "
DR_OC_CMD+=${DR_OPERATOR_POD}
DR_OC_CMD+=$' -- /bin/bash -c \'export CEPH_CONF=/var/lib/rook/openshift-storage/openshift-storage.config; '
DR_OC_CMD+="rbd -p ocs-storagecluster-cephblockpool snap ls --all "
DR_OC_CMD+=${RBD}
DR_OC_CMD+="'"
echo
echo "Current time/date is $(date -u)"
echo "NAMESPACE=${NAMESPACE}"
echo "PERSISTENTVOLUMECLAIM=${PVC}"
echo "PERSISTENTVOLUME=${PV}"
echo
echo "PRIMARY CEPH RBD IMAGES (${PRIMARY_CONTEXT})"
eval ${PRIMARY_OC_CMD}
echo ; echo
echo "BACKUP/DR RBD IMAGES (${DR_CONTEXT})"
eval ${DR_OC_CMD}
@johnsimcall
Copy link
Author

I should improve this to avoid hard-coding the PVC name and assuming that a KUBECONFIG exists with multiple contexts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment