#!/bin/ksh93
#  ALTRAN_PROLOG_BEGIN_TAG                                                    
#  This is an automatically generated prolog.                                  
#                                                                              
#  Copyright (C) Altran ACT S.A.S. 2019,2021.  All rights reserved.  
#                                                                              
#  ALTRAN_PROLOG_END_TAG                                                      
#                                                                              
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
# 61haes_r714 src/43haes/usr/sbin/cluster/cspoc/utilities/cli_importvg.sh 1.3 
#  
# Licensed Materials - Property of IBM 
#  
# COPYRIGHT International Business Machines Corp. 2003,2014 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG
#
# @(#)  7d4c34b 43haes/usr/sbin/cluster/cspoc/utilities/cli_importvg.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM
# 
###############################################################################
#
#   COMPONENT_NAME: CSPOC Command Line Interface
#
# Name:
#   cli_importvg
#
# Description:
#   Use C-SPOC to run the importvg command with the given parameters and make the
#   volume group definition known on all cluster nodes
#
# Arguments:
#   Same as for the importvg command except that '-F' and '-L' aren't
#   supported; assumed validated by caller
#
#   '-n' is always assumed
#   '-R' is always assumed
#   '-c' is provided, if not present
#
#   Physical volume names are assumed valid on the node this command is run
#   on; C-SPOC will handle the case where the disk names are different on
#   different nodes
#
#   Setting the environment variable _DEBUG to 1 -> 9 turns on levels of
#   C-SPOC debugging
#
# Return Values:
#   As set by cl_importvg
#
# Notes:
#   The '-f' flag is passed on cl_importvg to surpress unnecessary checking.
#   As a consequence, the operation will proceed even if not all nodes are
#   accessable.
#
#   The '-R' flag for importvg is always provided by cl_importvg processing
#
################################################################################


typeset DEBUG
typeset cl_importvg_args

#
:   Variables needed by cl_importvg
:	_REFNODE - the node on which the hdisk names are chosen, since they
:			may differ across the cluster
:	_CSPOC_MODE - working with both concurrent and nonconcurrent resource
:			groups
:	_CSPOC_CALLED_FROM_SMIT - can skip checks on input
#
export _REFNODE=$(/usr/es/sbin/cluster/utilities/get_local_nodename)
export _CSPOC_MODE="both"
export _CSPOC_CALLED_FROM_SMIT="true"

#
:   If a _DEBUG value has been set, pass it through
#
if [[ -n $_DEBUG ]] ; then

    #
    :	The debug level is a number, 1 through 9.  Those values are passed
    :	through.  Anything else is turned into '1'
    #
    integer dbg_level=$_DEBUG
    if (( $dbg_level < 10 && $dbg_level >= 1 )) ; then
	DEBUG="-d $_DEBUG"
    else
	DEBUG="-d 1"
    fi
fi

#
:   Construct the node list so that the local node shows up as first in the
:   list, since the physical volume names are relative to the local node.
:   This is a comma separated, quote delimited list of all the nodes this
:   change is to be made on.  It is set to "all cluster nodes".
#
all_nodes=$(/usr/es/sbin/cluster/utilities/clodmget -q "object = VERBOSE_LOGGING" -f name -n HACMPnode)
for node in $all_nodes ; do
    if [[ $node != $_REFNODE ]] ; then
        other_nodes=${other_nodes:+"${other_nodes},"}$node
    fi
done
export _NODE_LIST="$_REFNODE,$other_nodes"

#
:   If a major number was not supplied, provide one that will work across the
:   cluster.
#
if [[ $* != @(*-V*) ]] ; then

    # Check if RBAC is enabled
    typeset is_rbac_enabled=""
    is_rbac_enabled=$(/usr/es/sbin/cluster/utilities/clodmget -nq "group=LDAPClient and name=RBACConfig" -f value HACMPLDAP 2>/dev/null)

    # For a non root user, append the user name to the output file.
    [[ -z "$LOGIN" ]] && user_name=$(id -nu 2>/dev/null) || user_name="$LOGIN"
    if [[ $user_name != "root" && $is_rbac_enabled == "YES" ]];then
        CL_DATFILE="/var/hacmp/tmp/cllspvids.out"_$user_name
    else
        CL_DATFILE="/var/hacmp/tmp/cllspvids.out"
    fi

    /usr/es/sbin/cluster/sbin/cl_lspvids -cspoc "-f -n $_NODE_LIST" > $CL_DATFILE

    # Change the ownership of output file, for a non root user.
    [[ $user_name != "root" ]] && chown $user_name $CL_DATFILE
    major=$(/usr/es/sbin/cluster/cspoc/cl_getmajor)
    cl_importvg_args="-V $major $*"
else
    cl_importvg_args=$*
fi

#
:   The arguments to cl_importvg are the same as passed in, with addition of
:   the local node as reference node.  '-n' is removed, and always assumed by
:   C-SPOC processing.
#
if [[ $* == @(*-n*) ]] ; then				  
    cl_importvg_args=$(echo $cl_importvg_args | sed 's/-n *//')
fi

#
:   Supply '-c' for concurrent mode, since that is all that PowerHA deals with
#
if [[ $* != @(*-c*) ]] ; then
    cl_importvg_args="-c $cl_importvg_args"
fi

#
:   If a '-R' was passed in on the command, remove it since '-R' is used for
:   the reference node. 
#
if [[ $* == @(*-R*) ]] ; then
    cl_importvg_args=$(echo $cl_importvg_args | sed 's/-R *//')
fi
cl_importvg_args="-R $_REFNODE $cl_importvg_args"

#
:   Invoke the cspoc code to import the volume group and make it known on all
:   cluster nodes.  
#
/usr/es/sbin/cluster/sbin/cl_importvg -cspoc "-f $DEBUG -n $_NODE_LIST" $cl_importvg_args
return $?
