#!/bin/bash -x
# 将存储池做成 ocfs2
# aa只支持lvm

# env:
#   CLUNAME
#   DISK
#   MOUNTPOINT
#   FORMAT

if [ -z "$SSH" ];then
    source /unas/sbin/dualcontroller/config/prepare
fi

if [ -z "$PCS" ];then
    PCS=pcs
fi

ocfs_id=0
ocfs_name=ocfs$ocfs_id

while $PCS resource config $ocfs_name;do
    ((ocfs_id++))
    ocfs_name=ocfs$ocfs_id
done

lvchange -asy "$DISK"
vgname=$(lvs --noheadings -o vgname "$DISK" | xargs echo -n)
lvname=$(lvs --noheadings -o lv_name "$DISK" | xargs echo -n)

# 先在全部节点上停用
/unas/sbin/dualcontroller/tool/nodes "umount -f '$DISK'; sed -i '\# $MOUNTPOINT #d' /etc/fstab || :"

# 如果已经是 ocfs2，则跳过 mkfs；否则创建 ocfs2 文件系统
if [ "$FORMAT" != "1" ] && [ "`blkid --output value --match-tag TYPE "$DISK"`" = "ocfs2" ];then
    echo "$DISK already formatted as ocfs2, skipping mkfs"
    # 检查并调整ocfs的label和stack
    if o2cluster -r > /dev/null 2>&1; then
        o2cluster -y --update=`o2cluster -r` "$DISK"
    else
        o2cluster -y --update="pcmk,$CLUNAME,none" "$DISK"
    fi
else
    if ! command -v mkfs.ocfs2 >/dev/null 2>&1; then
        echo "mkfs.ocfs2 not found, install ocfs2-tools" >&2
        exit 1
    fi
    # mkfs.ocfs2 选项在不同系统/版本上可能不同；根据需要调整。
    wipefs -a "$DISK"
    mkfs.ocfs2 --force --quiet -N 2 \
        -L "$ocfs_name" \
        --cluster-stack=pcmk \
        --fs-features=backup-super,sparse,unwritten,usrquota,grpquota,xattr \
        --cluster-name="$CLUNAME" \
        "$DISK"
fi

# 给 LV 添加 ocfs2 tag
if lvs -a --noheadings -o lv_tags "$DISK";then
    IFS_OLD="$IFS"
    IFS="$IFS,"
    for tag in `lvs -a --noheadings -o lv_tags "$DISK"`;do
        lvchange "$DISK" --deltag $tag
    done
    IFS="$IFS_OLD"
    lvchange "$DISK" --addtag ocfs2
fi

res_lv_name=LV_$(echo "$vgname" | sed 's/_/__/g')_$(echo "$lvname" | sed 's/_/__/g')
$PCS resource create $ocfs_name ocf:heartbeat:Filesystem \
    device="$DISK" \
    directory="$MOUNTPOINT" \
    fstype="ocfs2" \
    options="_netdev,noauto,nointr,acl,usrquota,grpquota,cluster_stack=pcmk,data=writeback,relatime,data=ordered" \
    op monitor interval=10s \
    op start interval=0s timeout=120s on-fail=restart \
    op stop interval=0s timeout=120s
$PCS resource clone $ocfs_name meta clone-max=2 clone-node-max=1 notify=true
$PCS constraint colocation add $ocfs_name-clone with $res_lv_name-clone
$PCS constraint order $res_lv_name-clone then $ocfs_name-clone kind=Optional
lvchange -an "$DISK"
