61 lines
2.3 KiB
Bash
61 lines
2.3 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Wire the shared storage into the cluster (run once on pve1; datacenter config
|
||
|
|
# replicates to pve2 automatically):
|
||
|
|
# - lab-nfs : NFS share from the storage VM
|
||
|
|
# - lab-lvm : LVM volume group built on the shared iSCSI LUN
|
||
|
|
set -euo pipefail
|
||
|
|
source "$(dirname "$0")/lab.env"
|
||
|
|
|
||
|
|
has_storage() { lab_ssh "$PVE1_IP" "pvesm status 2>/dev/null | awk '{print \$1}' | grep -qx '$1'"; }
|
||
|
|
|
||
|
|
echo "==> Adding NFS storage 'lab-nfs'"
|
||
|
|
if has_storage lab-nfs; then
|
||
|
|
echo " already present"
|
||
|
|
else
|
||
|
|
lab_ssh "$PVE1_IP" "pvesm add nfs lab-nfs --server ${STORE_IP} --export /srv/nfs \
|
||
|
|
--content images,iso,vztmpl,backup,rootdir --options vers=4"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "==> Adding iSCSI base storage 'lab-iscsi'"
|
||
|
|
if has_storage lab-iscsi; then
|
||
|
|
echo " already present"
|
||
|
|
else
|
||
|
|
echo " discoverable targets at ${STORE_IP}:"
|
||
|
|
lab_ssh "$PVE1_IP" "pvesm scan iscsi ${STORE_IP}" || true
|
||
|
|
lab_ssh "$PVE1_IP" "pvesm add iscsi lab-iscsi --portal ${STORE_IP} --target ${ISCSI_IQN} --content none"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "==> Locating the iSCSI block device on pve1"
|
||
|
|
DEV=""
|
||
|
|
for i in $(seq 1 24); do
|
||
|
|
DEV=$(lab_ssh "$PVE1_IP" "for d in /dev/disk/by-path/*iscsi*-lun-1; do [ -e \"\$d\" ] && readlink -f \"\$d\"; done 2>/dev/null | head -1")
|
||
|
|
[[ -n "$DEV" ]] && break
|
||
|
|
# nudge a session login/rescan
|
||
|
|
lab_ssh "$PVE1_IP" "iscsiadm -m node -l 2>/dev/null; iscsiadm -m session -R 2>/dev/null" || true
|
||
|
|
sleep 5
|
||
|
|
done
|
||
|
|
[[ -n "$DEV" ]] || { echo "ERROR: iSCSI LUN device did not appear on pve1"; exit 1; }
|
||
|
|
echo " LUN device: $DEV"
|
||
|
|
|
||
|
|
echo "==> Creating shared LVM volume group 'pve_shared' on the LUN (pve1)"
|
||
|
|
if lab_ssh "$PVE1_IP" "vgs --noheadings -o vg_name 2>/dev/null | grep -qw pve_shared"; then
|
||
|
|
echo " VG pve_shared already exists"
|
||
|
|
else
|
||
|
|
lab_ssh "$PVE1_IP" "pvcreate -ff -y ${DEV} && vgcreate pve_shared ${DEV}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "==> Adding shared LVM storage 'lab-lvm'"
|
||
|
|
if has_storage lab-lvm; then
|
||
|
|
echo " already present"
|
||
|
|
else
|
||
|
|
lab_ssh "$PVE1_IP" "pvesm add lvm lab-lvm --vgname pve_shared --shared 1 --content images,rootdir"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# make sure pve2 also sees the new VG on the shared LUN
|
||
|
|
lab_ssh "$PVE2_IP" "iscsiadm -m session -R 2>/dev/null; pvscan --cache 2>/dev/null; vgscan 2>/dev/null" || true
|
||
|
|
|
||
|
|
echo "==> Storage status on pve1"
|
||
|
|
lab_ssh "$PVE1_IP" "pvesm status"
|
||
|
|
echo
|
||
|
|
echo "Shared storage configured. Next: ./verify.sh"
|