meta data for this page
Ez a dokumentum egy előző változata!
TSM Client Auto Deployment planner szkript
A shell az Admin Center-t igyekszik kiváltani, legalábbis ami az Auto Client Deployment funkcióját illeti. Lekérdezi a beimportált autodeploy package-eket, és kilistázza. Ebből a listából választott package-hez meg kell adnunk milyen nevű ütemezést szeretnénk, mikor fusson, és mely node-okra állítsa be a deploy-t. A szkript „nagyjából” ellenőrzi, hogy a választott kliens(ek) operációs rendszere és architektúrája megegyezik-e azzal, amit telepítésre kiválasztottunk neki. Ha a szabályrendszer már kész, a helpjében leírtak (h parancs) szerint, akkor abba lehet innen is új telepítőkészleteket beimportálni (i paranccsal). Deploy feladatok futása után az „e” paranccsal lehet ezek sikerességét ellenőrizni. (Nem a Deploy ütemezésekét, hanem a node-ok kliens és cél verziószámát tudjuk ellenőrizni.)
A hivatalos IBM dokumentum a manuálisan kivitelezett Auto Deploymentről: IBM Tivoli Storage Manager automatic deployment configuration
- tsm_auto_deployment_planner.sh
#!/bin/bash TSM_SERVER="tsmsrv" TSM_ADMIN="user" TSM_PASSW="passw" SQL_Q_DEPLOY_PACKAGES="SELECT DISTINCT(DESCRIPTION),NODE_NAME,FILESPACE_NAME,HL_NAME,LL_NAME FROM ARCHIVES WHERE NODE_NAME LIKE 'IBM_CLIENT_DEPLOY%' and TYPE='FILE' and ( LL_NAME='DEPLOYCLIENT.BAT' OR LOWER(LL_NAME)='deployclient.sh' ) and DESCRIPTION LIKE 'DEPLOY%'" SQL_QUERY_DEPLOY_DIR="SELECT DIRECTORY FROM DEVCLASSES WHERE DEVCLASS_NAME IN (SELECT DEVCLASS FROM STGPOOLS WHERE STGPOOL_NAME IN (SELECT DESTINATION FROM AR_COPYGROUPS WHERE DOMAIN_NAME='IBM_CLIENT_DEPLOY' AND SET_NAME='ACTIVE'))" SQL_DEPLOYED_NODES="SELECT DISTINCT substr(N.NODE_NAME,1,22) as \"NODE\", substr(CS.SCHEDULE_NAME,1,22) as \"SCHEDULE\", substr(N.CLIENT_VERSION || '.' || N.CLIENT_RELEASE || '.' || N.CLIENT_LEVEL || '.' || N.CLIENT_SUBLEVEL || ' - ' || N.CLIENT_TARGET_VERSION || '.' || N.CLIENT_TARGET_RELEASE || '.' || N.CLIENT_TARGET_LEVEL || '.' || N.CLIENT_TARGET_SUBLEVEL,1,18) as \"CLIENT - TARGET\", case when N.CLIENT_VERSION || '.' || N.CLIENT_RELEASE || '.' || N.CLIENT_LEVEL || '.' || N.CLIENT_SUBLEVEL != N.CLIENT_TARGET_VERSION || '.' || N.CLIENT_TARGET_RELEASE || '.' || N.CLIENT_TARGET_LEVEL || '.' || N.CLIENT_TARGET_SUBLEVEL then '!' else 'OK' end as \"OK\", substr(N.PLATFORM_NAME,1,15) as \"OS_VERSION\" FROM NODES N, ASSOCIATIONS A, CLIENT_SCHEDULES CS WHERE N.NODE_NAME=A.NODE_NAME AND A.SCHEDULE_NAME=CS.SCHEDULE_NAME AND CS.ACTION='DEPLOY'" DSMADMC="dsmadmc -id=$TSM_ADMIN -pa=$TSM_PASSW -se=$TSM_SERVER -dataonly=y " red=$'\e[1;31m' grn=$'\e[1;32m' yel=$'\e[1;33m' blu=$'\e[1;34m' mag=$'\e[1;35m' cyn=$'\e[1;36m' whi=$'\e[1;37m' inv=$'\e[7;37m' gry=$'\e[1;90m' end=$'\e[0m' clear # FEJLECT MEGRAJZOLASA FEJLEC="TSM Auto Client Deployment planner v1.2 (2015.09.04.)" FEJLEC2="written by Peter Agoston" printf "${inv}" J=0 for I in $(seq 1 $(tput cols)); do printf "#"; done; #printf "\n" for I in $(seq 1 $(tput cols)); do printf " "; done; #printf "\n" for I in $(seq 1 $(($(tput cols)/2-${#FEJLEC}/2-${#FEJLEC}%2))); do printf " "; J=$(($J+1)); done; printf "$FEJLEC"; for I in $(seq 1 $(($(tput cols)/2-${#FEJLEC}/2))); do printf " "; J=$(($J+1)); done; if [[ $(($J + ${#FEJLEC})) -lt $(tput cols) ]]; then printf " "; fi #printf "\n" J=0 for I in $(seq 1 $(($(tput cols)/2-${#FEJLEC2}/2-${#FEJLEC2}%2))); do printf " "; J=$(($J+1)); done; printf "$FEJLEC2"; for I in $(seq 1 $(($(tput cols)/2-${#FEJLEC2}/2))); do printf " "; J=$(($J+1)); done; if [[ $(($J + ${#FEJLEC2})) -lt $(tput cols) ]]; then printf " "; fi #printf "\n" for I in $(seq 1 $(tput cols)); do printf " "; done; #printf "\n" for I in $(seq 1 $(tput cols)); do printf "#"; done; #printf "\n" printf "${end}\n" # FEJLEC VEGE printf "Szabalyrendszer lekerdezese... a telepito keszletek tarolasi utvonala: " DEPLOYDIR=$($DSMADMC -displ=tab "$SQL_QUERY_DEPLOY_DIR") if [[ $? -ne 0 ]]; then printf "${red}\nNem sikerult lekerdezni, valoszinuleg nem letezik a szukseges Domain es a Stgpool. Ez problema lehet...\n\n${end}" else DEPLOYDIR=${DEPLOYDIR%% *} printf "${gry}${DEPLOYDIR##DIRECTORY: }${end}\n\n" fi printf "${whi}A TSM szerverre beimportalt telepito keszletek:\n" printf "## VERSION PLATFORM ARCHITECTURE${gry}\n" I=0 while read -r SOR; do I=$(($I+1)) PACKAGE=$(echo $SOR | awk -F, '{print $1}') PACK_NODE[$I]=$(echo $SOR | awk -F, '{print $2}') FILESPACE[$I]=$(echo $SOR | awk -F, '{print $3}') HL_NAME[$I]=$(echo $SOR | awk -F, '{print $4}') LL_NAME[$I]=$(echo $SOR | awk -F, '{print $5}') VERSION[$I]=$(echo $PACKAGE | awk -F' ' '{print $2}') PLATFORM[$I]=$(echo $PACKAGE | awk -F' ' '{print $3}') ARCHITECTURE[$I]=$(echo $PACKAGE | awk -F' ' '{print $4}') if [[ "${PLATFORM[$I]}" = "Windows" ]]; then ARCHITECTURE[$I]=$(echo $PACKAGE | awk -F' ' '{print $4}' | sed 's/X32/x86/'); fi echo "$I $PACKAGE" | awk -F' ' '{printf "%2s %-9s %-10s %-12s\n",$1,$3,$4,$5}' done <<< "`$DSMADMC -commadel -displ=tabl "$SQL_Q_DEPLOY_PACKAGES"`" echo printf " i Uj telepitokeszlet beimportalasa a szerverre (.exp)\n" printf " e Auto Deployra jelolt node-ek kliens verzioinak ellenorzese\n" printf " h Segitseg a hasznalathoz\n" printf " q Kilepes\n" echo # Program fo ciklus eleje while [[ $DEPL_PACK_ID -le 0 || $DEPL_PACK_ID -gt $I ]]; do printf "${whi}Add meg a hasznalni kivant telepito keszlet sorszamat, vagy a funkcio betujelet: ${end}" read DEPL_PACK_ID # HELP if [[ $DEPL_PACK_ID = "h" ]]; then cat << HELP ${end}A Client Autodeploy hasznalatahoz szukseges letrehozni nehany elemet a TSM szabalyrendszerben, amik az autodeploy csomagok tarolasahoz szuksegesek. Ezek az alabbiak: /* A ${red}pirossal${end} jelolteket muszaj a helyi sajatossagoknak megfeleloen beallitani, a ${yel}sargakat${end} opcionalisan lehet modositani */ /* ide fogjuk elhelyezni az FTP-rĹ‘l letöltött .exp fájlokat, amit az import majd használ */ ${gry}DEFINE DEVCLASS DEPLOY_IMPORT DEVTYPE=FILE DIRECTORY="${red}/sanfs/autodeploy${gry}"${end} /* ezen a file devclass-on definiált volume-okon fogja tárolni a TSM szerver az importált, kliensekre terĂtendĹ‘ kĂłdot */ ${gry}DEFINE DEVCLASS DEPLOY_DATA DEVTYPE=FILE DIRECTORY="${red}/sanfs/autodeploy${gry}"${end} ${gry}DEFINE STGPOOL autodep DEPLOY_DATA MAXSCRATCH=${yel}100${end} /* KĂĽlön policy domaint Ă©s szabályrendszert kĂ©szĂt hozzá, de látva a működĂ©si elvet, ez nem feltĂ©tlenĂĽl szĂĽksĂ©ges! */ ${gry}DEFINE DOMAIN IBM_CLIENT_DEPLOY DEFINE POLICYSET IBM_CLIENT_DEPLOY IBM_CLIENT_DEPLOY DEFINE MGMTCLASS IBM_CLIENT_DEPLOY IBM_CLIENT_DEPLOY IBM_CLIENT_DEPLOY DEFINE COPYGROUP IBM_CLIENT_DEPLOY IBM_CLIENT_DEPLOY IBM_CLIENT_DEPLOY STANDARD TYPE=ARCHIVE DESTINATION=autodep RETVER=${yel}1826${gry} ASSIGN DEFMGMTCLASS IBM_CLIENT_DEPLOY IBM_CLIENT_DEPLOY IBM_CLIENT_DEPLOY ACTIVATE POLICYSET IBM_CLIENT_DEPLOY IBM_CLIENT_DEPLOY${end} /* IBM FTP autodeploy-bĂłl letöltött .exp (TSM export) formátumĂş telepĂtĹ‘kĂ©szlet importálása a TSM szerverre (a DEPLOY_IMPORT devclass konyvtarabol) */ ${gry} IMPORT NODE * FILEDATA=ARCHIVE MERGEFILESPACE=YES DEVCLASS=DEPLOY_IMPORT VOLUMENAMES=${red}6.2.2.0-TIV-TSMBAC-WinX32.exp${end} HELP elif [[ $DEPL_PACK_ID = "e" ]]; then printf "${whi}NODE SCHEDULE CLIENT - TARGET C=T OS_VERSION\n" printf "${whi}----------------------- ----------------------- ------------------- --- ------------${gry}\n" $DSMADMC "$SQL_DEPLOYED_NODES" | sed "s/!!/${red}!!${gry}/" echo elif [[ $DEPL_PACK_ID = "i" ]]; then printf "${whi}Add meg az importalni kivant telepito keszlet fajlnevet, amit mar felmasoltal a ${DEPLOYDIR##DIRECTORY: } konyvtarba (pl: 7.1.1.4-TIV-TSMBAC-LinuxX86.exp): ${end}" read IMPORT_PACK_FNAME [[ "$IMPORT_PACK_FNAME" =~ \.exp$ ]] && $DSMADMC -displ=tab "IMPORT NODE * FILEDATA=ARCHIVE MERGEFILESPACE=YES DEVCLASS=DEPLOY_IMPORT VOLUMENAMES=$IMPORT_PACK_FNAME" && echo "Kellhet par perc, mig az import lefut a hatterben." elif [[ $DEPL_PACK_ID = "q" ]]; then exit 0 fi done printf "${whi}Mi legyen a letrehozando utemezes neve? ${end}" read DEPL_SCH_NAME printf "${whi}Mi a node(ok) neve, amin upgrade-elni szeretned a klienst? (Ha tobb van, szokozzel elvalasztva sorold fel oket.)${end}\n" read DEPL_NODE_NAME STARTDATE="-" until [[ $STARTDATE =~ [01][0-9]/[0-3][0-9]/201[5-9] || -z $STARTDATE ]]; do printf "${whi}Az utemezes indulasanak datuma (HH/NN/EEEE): ${end}" read STARTDATE done STARTDATE=${STARTDATE:=$(date "+%m/%d/%Y")} until [[ $STARTTIME =~ [012][0-9]:[0-5][0-9] ]]; do printf "${whi}Az utemezes indulasanak ideje (OO:PP): ${end}" read STARTTIME done echo for NODE in $DEPL_NODE_NAME; do echo "${yel}#### $NODE ####${end}" DELP_DOM_NAME=$($DSMADMC "select domain_name from nodes where node_name=upper('${NODE}')" | sed 's/ //g') if [[ $(echo $DELP_DOM_NAME) =~ ^ANR[0-9]{4} ]]; then printf "${red}Ilyen node talan nincs. Ellenorizd!${end}\n\n"; continue; fi case "${PLATFORM[$DEPL_PACK_ID]}" in Windows) IS_OS_OK=$($DSMADMC "SELECT count(node_name) FROM NODES WHERE (LOWER(PLATFORM_NAME) LIKE LOWER ('%${PLATFORM[$DEPL_PACK_ID]}%') OR LOWER(CLIENT_OS_NAME) LIKE LOWER ('%${PLATFORM[$DEPL_PACK_ID]}%')) AND (LOWER(CLIENT_SYSTEM_ARCHITECTURE) LIKE LOWER('%${ARCHITECTURE[$DEPL_PACK_ID]}%') OR TRIM(CLIENT_SYSTEM_ARCHITECTURE) = '' OR CLIENT_SYSTEM_ARCHITECTURE IS NULL) AND (LOWER(PLATFORM_NAME) NOT LIKE '%deploymgr%') and node_name=('$NODE')") ;; Linux|AIX) IS_OS_OK=$($DSMADMC "SELECT count(node_name) FROM NODES WHERE (LOWER(PLATFORM_NAME) LIKE LOWER ('%${PLATFORM[$DEPL_PACK_ID]}%') OR LOWER(CLIENT_OS_NAME) LIKE LOWER ('%${PLATFORM[$DEPL_PACK_ID]}%')) AND (LOWER(CLIENT_SYSTEM_ARCHITECTURE) LIKE LOWER('%x86%') OR LOWER(CLIENT_SYSTEM_ARCHITECTURE) LIKE LOWER('%x64%') OR TRIM(CLIENT_SYSTEM_ARCHITECTURE) = '' OR CLIENT_SYSTEM_ARCHITECTURE IS NULL) AND (LOWER(PLATFORM_NAME) NOT LIKE '%deploymgr%') and node_name=upper('$NODE')") ;; *) printf "${red}Valami a szkript altal nem ismert platform-ot (${PLATFORM[$DEPL_PACK_ID]}) akarsz teriteni.${end}\n\n" continue; ;; esac if [[ $IS_OS_OK -ne 1 ]]; then printf "${red}A node OS-e es/vagy architekturaja nem egyezik a telepiteni kivanteval!${end}\n\n" continue; fi VERSIONNUM=$(echo ${VERSION[$DEPL_PACK_ID]}| sed 's/\.//g') case "${PLATFORM[$DEPL_PACK_ID]}" in Windows) $DSMADMC "DEFINE SCHEDULE ${DELP_DOM_NAME} ${DEPL_SCH_NAME} ACTION=DEPLOY OBJECTS='${FILESPACE[$DEPL_PACK_ID]}${HL_NAME[$DEPL_PACK_ID]}\* ..\IBM_ANR_WIN\\' DURATION=1 DURUNITS=HOURS PERUNITS=ONETIME STARTDATE=${STARTDATE} STARTTIME=${STARTTIME} OPTIONS=\"-FROMNODE=${PACK_NODE[$DEPL_PACK_ID]} -POSTSCHEDULECMD='..\IBM_ANR_WIN\V${VERSIONNUM}\\${LL_NAME[$DEPL_PACK_ID]} SCHEDULE=${DEPL_SCH_NAME} DOMAIN=${DELP_DOM_NAME} AUTODEPLOY=NOREBOOT nodeinfo=TBD' -SUB=YES -REPLACE=ALL\""; RC=$? ;; Linux) $DSMADMC "DEFINE SCHEDULE ${DELP_DOM_NAME} ${DEPL_SCH_NAME} ACTION=DEPLOY OBJECTS='${HL_NAME[$DEPL_PACK_ID]}* /opt/tivoli/tsm/client/IBM_ANR_UNX/' DURATION=1 DURUNITS=HOURS PERUNITS=ONETIME STARTDATE=${STARTDATE} STARTTIME=${STARTTIME} OPTIONS=\"-FROMNODE=${PACK_NODE[$DEPL_PACK_ID]} -POSTSCHEDULECMD='/opt/tivoli/tsm/client/IBM_ANR_UNX/v${VERSIONNUM}/${LL_NAME[$DEPL_PACK_ID]}>/opt/tivoli/tsm/client/IBM_ANR_UNX/v${VERSIONNUM}/upmin#SCHEDULE=${DEPL_SCH_NAME}#DOMAIN=${DELP_DOM_NAME}#nodeinfo2=TBD' -SUB=YES -REPLACE=ALL\""; RC=$? ;; AIX) $DSMADMC "DEFINE SCHEDULE ${DELP_DOM_NAME} ${DEPL_SCH_NAME} ACTION=DEPLOY OBJECTS='${HL_NAME[$DEPL_PACK_ID]}* /usr/tivoli/tsm/client/IBM_ANR_UNX/' DURATION=1 DURUNITS=HOURS PERUNITS=ONETIME STARTDATE=${STARTDATE} STARTTIME=${STARTTIME} OPTIONS=\"-FROMNODE=${PACK_NODE[$DEPL_PACK_ID]} -POSTSCHEDULECMD='/usr/tivoli/tsm/client/IBM_ANR_UNX/v${VERSIONNUM}/${LL_NAME[$DEPL_PACK_ID]}>/usr/tivoli/tsm/client/IBM_ANR_UNX/v${VERSIONNUM}/upmin#SCHEDULE=${DEPL_SCH_NAME}#DOMAIN=${DELP_DOM_NAME}#nodeinfo2=TBD' -SUB=YES -REPLACE=ALL\""; RC=$? ;; *) printf "${red}Valami a szkript altal nem ismert platform-ot (${PLATFORM[$DEPL_PACK_ID]}) akarsz teriteni.${end}\n\n" continue; ;; esac if [[ $RC -ne 0 ]]; then printf "${red}A(z) ${DEPL_SCH_NAME} utemezes bedefinialasa sikertelen!${end}\n\n" continue; fi $DSMADMC "UPDATE NODE $NODE TARGETLEVEL=${VERSION[$DEPL_PACK_ID]}" if [[ $RC -ne 0 ]]; then printf "${red}A(z) node TARGETLEVEL-enek beallitasa ${VERSION[$DEPL_PACK_ID]}-re sikertelen!${end}\n\n" continue; fi $DSMADMC "DEFINE ASSOCIATION ${DELP_DOM_NAME} ${DEPL_SCH_NAME} ${NODE}" if [[ $RC -ne 0 ]]; then printf "${red}A(z) $NODE node hozzarendelese a(z) ${DEPL_SCH_NAME} utemezeshez sikerleten!${end}\n\n" continue; fi echo done