#!/bin/bash

source /opt/huawei/snas/script/inspect_mml/CheckItems
cm_confdb="/opt/huawei/snas/etc/cm_conf.db"
DEPLOY_XML="/opt/huawei/deploy/etc/deployconfig.xml"
cmdToolC20="/opt/huawei/snas/bin/snas_CmdTool"
cmdToolC00="/opt/huawei/snas/script/inspect_mml/aesTool"

function GetOneKey()
{
    #如果节点需要修复，则按照当前版本的方法重新生成一个可用的密钥，插到集群节点 C00 C20生成密钥的工具不一样
    local clusterID=$(cat ${DEPLOY_XML} | grep -Eo "PARAM[ ]+name=\"clusterID\"[ ]+value=\"[^\"]*" |  awk -F\" '{print $NF}')
    [ -z "${clusterID}" ] && return 1
    if [ -f ${cmdToolC00} ];then
        echo $(${cmdToolC00} -e ${clusterID})
        return 0
    fi
    if [ -f ${cmdToolC20} ];then
        local tmp_file="/var/log/.tmp_ck_upd_01"
        >$tmp_file
        echo "${clusterID}" | ${cmdToolC20} -E "echo '<<placeholder>>' > $tmp_file"
        echo "$(cat $tmp_file)"
        rm $tmp_file
        return 0
    fi
    return 1
}

function RepairNodeKey()
{
    local clusterIdNum=$(sqlite3 ${cm_confdb} "select count(CLUSTER_ID) from CM_CLUSTER_INFO ")
    local lowerVerIdNum=$(sqlite3 ${cm_confdb} "select count(CLUSTER_ID) from CM_CLUSTER_INFO where(CLUSTER_ID NOT LIKE '%@ver=%')")
    if [ ${lowerVerIdNum} -eq 0 ] && [ ${clusterIdNum} -ne 0 ];then
        LOG "[$FUNCNAME]Success: Clusterid check successfully! No need to repair."
        echo "No need to repair!"
        return 0
    elif [ ${lowerVerIdNum} -ne 0 ];then
        #删除低版本clusterid
        sqlite3 ${cm_confdb} "delete from CM_CLUSTER_INFO where(CLUSTER_ID NOT LIKE '%@ver=%')"
        #删除后检查,是否删除
        lowerVerIdNum=$(sqlite3 ${cm_confdb} "select count(CLUSTER_ID) from CM_CLUSTER_INFO where(CLUSTER_ID NOT LIKE '%@ver=%')") 
        if [ $lowerVerIdNum -eq 0 ];then
            LOG "[$FUNCNAME]Info: The cluster ID of the earlier version is deleted successfully!"
        fi
    fi

    clusterIdNum=$(sqlite3 ${cm_confdb} "select count(CLUSTER_ID) from CM_CLUSTER_INFO where(CLUSTER_ID LIKE '%@ver=%')")
    if [ ${clusterIdNum} -ge 1 ];then
        echo "Clusterid repair successfully!"
        return 0
    elif [  ${clusterIdNum} -eq 0 ];then
        #get密文,repair当前节点.
        local clusterIdinfo=$(GetOneKey)
        if [[ "$clusterIdinfo" =~ "@ver=" ]];then
            sqlite3 ${cm_confdb} "insert into CM_CLUSTER_INFO values('${clusterIdinfo}')"
            echo "Clusterid repair successfully!"
            return 0
        else
            echo "Failed to get key!"
            return 1
        fi
    fi
}

function main()
{
    local iRet=""
    local isPass=0
    local curInspectNum="502"
    local curInspectFun="$(GetInspectType $curInspectNum)"
    local resultFile="/tmp/tmpResult${curInspectFun}"
    local ClusteridRet=""
    local failNode=""
    local repairIp=""
    local noNeedRepair=0
    [ -f ${resultFile} ] && rm -rf ${resultFile}
    >${resultFile}

    ClusteridRet=$(RepairNodeKey)
    isPass=$?

    echo "Clusterid:${ClusteridRet}" >>${resultFile} 2>&1
    echo "${curInspectFun}_Pass ${isPass}" >>${resultFile} 2>&1
    LOG "[$FUNCNAME]${curInspectFun}_Pass ${isPass}"
}
main
