#!/bin/ksh
#
#######################################################################
# Copyright (c) 1997-2004 Sun Microsystems, Inc. All Rights Reserved.
#
# SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
# THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
# TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
# ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
# DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
#
## Source:               set_migration_env
## Application Name:     ITSM S9 Migration Tools
#
## Author:       BG
## Date Created: 17-NOV-2002
#
## General Description(Purpose): This is the main environmets file for all
#  IT S9 Migration modules. 
#
## Usage:
#
## Required Parameters: N/A
## Optional Parameters: N/A
## Return Codes:        N/A
#
## Possible Points of Failure:
#
## Modification History:
#  -------------------------------------------------------------
#  Date         Name                     Comments
#  -------------------------------------------------------------
#  18-FEB-2003  UM	        Added variables to handle patch locations
#                               p_default_ptch_loc and l_ossw_ptch_loc
#  17-JAN-2003  CS 		Enhancement to confirm/prompt vars
#  13-JAN-2003  UM		Moved up function definition 
#  10-JAN-2003  CS		Enhancements to setting sw/flash paths
#  09-JAN-2003  UM		Added function Print_RSP
#  08-JAN-2003  BG		Removed Slice3 _svm_ variables
#  19-DEC-2002  SG		Added p_pkg_name
#  12-DEC-2002  UM		Added p_email_id
#  09-DEC-2002  BG		Changed l_release var to S9 09/02
#  17-NOV-2002  CH		Initial Creation
########################################################################


###############################
## General Variables
###############################

l_node_name=`/usr/bin/hostname`
l_domain_name=`/usr/bin/domainname | cut -f2 -d '.'|tr "[A-Z]" "[a-z]"`

export p_pkg_name="ITSMs9mig"
export p_script_dir="/opt/ITSMs9mig"
export p_bin_dir="${p_script_dir}/bin"
export p_etc_dir="${p_script_dir}/etc"
export p_d_env_file="${p_etc_dir}/s9_${l_node_name}_env" 
export p_alt_be_default="S9BE"
export p_email_id="itsm-s9-migration-logs@sun.com"
export p_script_name=`/usr/bin/basename $0 .sh`
p_DATE="/usr/bin/date +%Y%m%d_%T"

# BEGIN Disk Slice Variables
export p_root_minsize=1600
export p_swap_minsize=1200
export p_var_minsize=800
export p_home_minsize=400
#
export p_root_recsize_4GB=1600
export p_swap_recsize_4GB=1274
export p_var_recsize_4GB=800
export p_home_recsize_4GB=400
#
export p_root_recsize_9GB=3500
export p_swap_recsize_9GB=2000
export p_var_recsize_9GB=1500
export p_home_recsize_9GB=1000
#
export p_root_tag=2
export p_swap_tag=3
export p_var_tag=7
export p_home_tag=8
#
export p_root_flag="00"
export p_swap_flag="01"
export p_var_flag="00"
export p_home_flag="00"
# END Disk Slice Variables

# Custsom script place holder
export p_postmig_custom_file="s9_postmigration_custom.dat"
#
###############################
## Functions
###############################

p_dash_line="------------------------------------------------------------------------------"
p_equal_line="=============================================================================="

Print_MSG()
{
   l_arg1=$1

   if [[ -z "$l_arg1" ]] 
   then 
      l_arg1="Unknown message"
   else
      shift
   fi

   l_msg="$@"
   l_tz_msg=""
   l_topline=""
   l_botline=""

   case "$l_arg1" in
       START) l_msg="${p_script_name} [TIMEZONE=`/usr/bin/date +%Z`]" ;
              l_msg="\n${p_equal_line}\n[`${p_DATE}`] $l_arg1: $l_msg\n$p_dash_line";;
      FINISH) l_msg="${p_script_name} [TIMEZONE=`/usr/bin/date +%Z`]" ;
              l_msg="\n${p_dash_line}\n[`${p_DATE}`] $l_arg1: $l_msg\n$p_equal_line";;
       BEGIN) l_arg1="BEGIN STEP" ;
              l_msg="\n${p_dash_line}\n[`${p_DATE}`] $l_arg1: $l_msg";;
         END) l_arg1="END STEP" ;
              l_msg="\n[`${p_DATE}`] $l_arg1: $l_msg\n${p_dash_line}";;
     WARNING) l_msg="\n[`${p_DATE}`] $l_arg1: $l_msg\n${p_dash_line}";;
       ERROR) l_msg="\n[`${p_DATE}`] $l_arg1: $l_msg, exiting! Review any preceeding messages.\n" ;;
        INFO) l_msg="\n[`${p_DATE}`] $l_arg1: $l_msg";;
           *) ;;
   esac

   echo "${l_msg}"
}

Print_RSP()
{
 l_arg=$1
 echo "\n<Your Response : \c"
 if [[ "${l_arg}" = "" || "${l_arg}" = "\n" ]]
 then
    echo "[Enter]>\n"
 else
    echo "[${l_arg}]>\n"
 fi
}

Confirm_LOC ()
{
    #Confirm preset values by prompting. Use can input different value

    echo "\nDetected domain name: .${l_domain_name}\n"

    #AutoInstall server
    echo "Confirm AI server [${l_ai_server}] : \c"
    read l_ans
    #Print_RSP ${l_ans}
    l_ans=${l_ans:-${l_ai_server}}
    /usr/sbin/ping "${l_ans}" 5 >/dev/null 2>&1
    l_rc=$?
    while [ ${l_rc} -ne 0 ]
    do
        echo "Invalid server or server not responding [${l_ans}]."
        echo "Confirm AI server [${l_ai_server}] : \c"
        read l_ans
        #Print_RSP ${l_ans}
        l_ans=${l_ans:-${l_ai_server}}
        /usr/sbin/ping "${l_ans}" 5 >/dev/null 2>&1
        l_rc=$?
    done
    l_ai_server=${l_ans}
    echo "INFO: Selected AI server: ${l_ai_server}\n"

    #Top level directory path in AI server
    echo "Confirm AI top directory [${l_ai_top_dir}] : \c"
    read l_ans
    #Print_RSP ${l_ans}
    l_ans=${l_ans:-${l_ai_top_dir}}
    [ -d /net/${l_ai_server}/${l_ans} ]
    l_rc=$?
    while [ ${l_rc} -ne 0 ]
    do
        echo "Directory invalid or does not exist [${l_ans}]."
        echo "Confirm AI top directory [${l_ai_top_dir}] : \c"
        read l_ans
        #Print_RSP ${l_ans}
        l_ans=${l_ans:-${l_ai_top_dir}}
        [ -d /net/${l_ai_server}/${l_ans} ]
        l_rc=$?
    done
    l_ai_top_dir=${l_ans}
    echo "INFO: Selected AI server top directory path: /net/${l_ai_server}/${l_ai_top_dir}\n"
    
    #Sub-directory in "media" dir within AI server
    echo "Confirm media release sub-directory [${l_release}] : \c"
    read l_ans
    #Print_RSP ${l_ans}
    l_ans=${l_ans:-${l_release}}
    p_ossw_loc="/net/${l_ai_server}/${l_ai_top_dir}/install/media/${l_ans}"
    [ -d ${p_ossw_loc} ]
    l_rc=$?
    while [ ${l_rc} -ne 0 ]
    do
        echo "Sub-directory invalid or does not exist [${l_ans}] under /net/${l_ai_server}/${l_ai_top_dir}/install/media"
        echo "Confirm media release sub-directory [${l_release}] : \c"
        read l_ans
        #Print_RSP ${l_ans}
        l_ans=${l_ans:-${l_release}}
        p_ossw_loc="/net/${l_ai_server}/${l_ai_top_dir}/install/media/${l_ans}"
        [ -d ${p_ossw_loc} ]
        l_rc=$?
    done
    echo "INFO: Selected media directory path: ${p_ossw_loc}\n"
    
    #Full directory path where Patches can be found
    #unused#p_ossw_ptch_loc="/net/${l_patch_server}/sso/private-ftp/patches"
    echo "Confirm PATCH directory path [${l_ossw_ptch_loc}] : \c"
    read l_ans
    #Print_RSP ${l_ans}
    l_ans=${l_ans:-${l_ossw_ptch_loc}}
    [ -d ${l_ans} ]
    l_rc=$?
    while [ ${l_rc} -ne 0 ]
    do
        echo "Directory path invalid or does not exist [${l_ans}]."
        echo "Confirm PATCH directory path [${l_ossw_ptch_loc}] : \c"
        read l_ans
        #Print_RSP ${l_ans}
        l_ans=${l_ans:-${l_ossw_ptch_loc}}
        [ -d ${l_ans} ]
        l_rc=$?
    done
    p_ossw_ptch_loc=${l_ans}
    echo "INFO: Selected patch directory path: ${p_ossw_ptch_loc}\n"
    
    #Flash Archive stored full path location
    #Default Flash Archive storage location, if not custom set in Case statement
    p_flash_loc=${p_flash_loc:-"/net/${l_ai_server}/${l_ai_top_dir}/install/flash_archive/solaris9"}
    echo "Confirm Flash Archive location [${p_flash_loc}] : \c"
    read l_ans
    #Print_RSP ${l_ans}
    l_ans=${l_ans:-${p_flash_loc}}
    [ -d ${l_ans} ]
    l_rc=$?
    while [ ${l_rc} -ne 0 ]
    do
        echo "Directory path invalid or does not exist [${l_ans}]."
        echo "Confirm Flash Archive location [${p_flash_loc}] : \c"
        read l_ans
        #Print_RSP ${l_ans}
        l_ans=${l_ans:-${p_flash_loc}}
        [ -d ${l_ans} ]
        l_rc=$?
    done
    p_flash_loc=${l_ans}
    echo "INFO: Selected Flash Archive directory path: ${p_flash_loc}\n"
}


#main

########################################
## Software, patch and flash locations 
########################################

#Set values only if called from premigration step
#Derived path values are saved to dynamic env file in premigration step
if [ "${p_script_name}" = "s9_premigration" ]
then
    #Default patch location. Set inside case if want domain specific
    p_default_ptch_loc="/net/patchdb.central/patches/patchroot/all_patchdb/patchdb"

    #Domain specific settings
    case ${l_domain_name} in
        #.East Domain
        'east')
            l_ai_server="cltpsca"
            l_ai_top_dir="export"
            l_release="solaris_5.9_12.02_sparc"
            l_ossw_ptch_loc="/net/${l_ai_server}/${l_ai_top_dir}/install/ai3/archive/patches/standard/sunpsc/`uname -r`"

            #Call confirm/prompt routine for preset vars
            Confirm_LOC
            ;;

        #.Central Domain
        'central')
            l_ai_server="brmpsca"
            l_ai_top_dir="export"
            l_release="solaris_5.9_12.02_sparc"
            l_ossw_ptch_loc="/net/${l_ai_server}/${l_ai_top_dir}/install/ai3/archive/patches/standard/sunpsc/`uname -r`"

            #Call confirm/prompt routine for preset vars
            Confirm_LOC
            ;;

        #.Holland Domain
        'holland')
            l_ai_server="pscinfra-ai3"
            l_ai_top_dir="global/export"
            l_release="solaris_5.9_12.02_sparc"
            l_ossw_ptch_loc="/net/${l_ai_server}/${l_ai_top_dir}/install/ai3/archive/patches/standard/sunpsc/`uname -r`"

            #Call confirm/prompt routine for preset vars
            Confirm_LOC
            ;;

        #.Japan Domain
        'japan')
            l_ai_server="ai-psc"
            l_ai_top_dir="solaris/netinstall"
            l_release="solaris9"
            l_ossw_ptch_loc="/net/${l_ai_server}/${l_ai_top_dir}/install/ai3/archive/patches/standard/sunpsc/`uname -r`"

            #Call confirm/prompt routine for preset vars
            Confirm_LOC
            ;;

        #.Singapore Domain
        'singapore')
            l_ai_server="ada"
            l_ai_top_dir="export"
            l_release="solaris9.1202"
            l_ossw_ptch_loc="/net/${l_ai_server}/${l_ai_top_dir}/install/ai3/archive/patches/standard/sunpsc/`uname -r`"

            #Call confirm/prompt routine for preset vars
            Confirm_LOC
            ;;
    
        #Unconfigured Domain - need user input
        *)
            #Process manual input (s9_premigration step).
            echo "[`${p_DATE}`] WARNING: Software/flash locations are not defined for domain [${l_domain_name}]"
            echo "[`${p_DATE}`] User input required."
            echo "\nEnter Solaris OS software location full pathname: (example /net/foo/export/install/media) :"
            read p_ossw_loc; Print_RSP "${p_ossw_loc}"
            echo "\nEnter patch location full pathname: (example /net/foo/export/patches) :"
            read p_ossw_ptch_loc; Print_RSP "${p_ossw_ptch_loc}"
            echo "\nEnter Flash Image location full pathname: (example /net/foo/export/install/flash_archive/solaris9) :"
            read p_flash_loc; Print_RSP "${p_flash_loc}"
            p_user_set_paths="Y"; export p_user_set_paths
            ;;
    esac
#For modules other than premigration and top level run wrapper
elif [ "${p_script_name}" != "Run_S9_migration_process" ]
then
    #Assume these vars available in dynamic env file, saved from prev s9_premigration
    unset p_ossw_loc
    eval `grep 'p_ossw_loc=' "${p_d_env_file}"`
    [ -z "${p_ossw_loc}" ] && echo "WARNING: Software location [p_ossw_loc] can't be set!"
    unset p_ossw_ptch_loc
    eval `grep 'p_ossw_ptch_loc=' "${p_d_env_file}"`
    [ -z "${p_ossw_ptch_loc}" ] && echo "WARNING: Patch location [p_ossw_ptch_loc] can't be set!"
    unset p_flash_loc
    eval `grep 'p_flash_loc=' "${p_d_env_file}"`
    [ -z "${p_flash_loc}" ] && echo "WARNING: Flash location [p_flash_loc] can't be set!"
    if [ -z "${p_ossw_loc}" -o -z "${p_ossw_ptch_loc}" -o -z "${p_flash_loc}" ]
    then
        echo "[`${p_DATE}`] ERROR: One or more path locations are not defined for your domain [${l_domain_name}]"
        echo "[`${p_DATE}`] See preceding messages, exiting!"
        exit 1
    fi
fi

#Standard OS distribution under AI media
p_ossw_prdt_loc="${p_ossw_loc}/Solaris_9/Product"

export p_ossw_loc
export p_ossw_prdt_loc
export p_ossw_ptch_loc
export p_default_ptch_loc
export p_flash_loc

#end main

