mgenay:technique:import_ordonnancement_u
Ci-dessous, le su-per-be script que j'ai développé pour faire un import $U ! Pour l'export, c'est dollaru_export_v1.07.ksh
{{ExtractCode|dollaru_import_v1.07.ksh}}
#!/bin/ksh
#------------------------------------------------------------------------------------
# TITRE : dollaru_import.ksh
# AUTEUR : MGE
# DATE : 02/10/2008
# PROJET : Migration Recette --> Exploit
# DESCRIPTION : Import $U complet ou partiel
# : les données importées dépendent du contenu de l'ImportDir
# PARAMETRES : voir fonction "show_usage".
#------------------------------------------------------------------------------------
# DERNIERE MAJ : V1.07 18/11/2008
VERSION=1.04
# AUTEUR :
# DESCRIPTION 1.03 : Remplacement de -env par "-vd" ou "-variableDir"
# 1.03 : Utilisation du type et user dans le nom de l'export de tache
# 1.03 : Ajout de "-tu X=Y" ou "-translateUser X=Y"
# 1.04 : Permettre l'export en model pour import en model + distribution en normal (-distributeModel)
# 1.05 : Recherche automatique du dossier $U (pas de maj VERSION; compatible version précédente)
# 1.06 : Suivi versionning export (pas de maj VERSION; compatible version précédente)
# 1.07 : -distributeModel n'implique plus -enableTasks
#------------------------------------------------------------------------------------
commandName=`basename $0`
#------------------------------------------------------------------------------------
# Fonction show_usage
#------------------------------------------------------------------------------------
show_usage()
{
[ "${1}" = "valid" ] || echo "Invalid Parameter : $@"
echo "usage : $commandName \033[1m-input\033[0m the_input [\033[1moptions\033[0m] [\033[1m-h\033[0m]"
echo
echo " \033[1m-input\033[0m the_input : the_dest peut être un répertoire ou une archive (.tar ou .tar.gz)"
echo " \033[1moptions\033[0m :"
echo " \033[1m-translateUser\033[0m userA=userB : utiliser userB à la place de userA comme compte de lancement pour les tâches"
echo " \033[1m-tu\033[0m userA=userB : voir -translateUser userA=userB"
echo " \033[1m-variableDir\033[0m dir : dir doit avoir la même longueur que lors de l'export (un controle est effectué). Permet de convertir un chemin de ressource en un autre"
echo " \033[1m-vd\033[0m dir : idem -variableDir the_dir"
echo " \033[1m-distributeModel\033[0m : duplique les tâches modeles en non-modèle dans la MU choisie"
echo " \033[1m-disableTasks\033[0m : désactive les tâches juste après leur import"
echo " \033[1m-enableTasks\033[0m : active les tâches juste après leur import [surcharge -disableTasks]"
echo " \033[1m-mu xxx\033[0m : Managment Unit (Unité de Gestion); par défaut, mu=hostname"
echo " \033[1m-h\033[0m : affiche cette aide"
exit 127
}
#------------------------------------------------------------------------------------
# Declarations des variables
#------------------------------------------------------------------------------------
set -A aUserTr
typeset -l Distribute=false
#------------------------------------------------------------------------------------
# Lecture du paramètre
#------------------------------------------------------------------------------------
MU=`hostname`
while [ $# -gt 0 ]; do
typeset -l param="$1"
case "$param" in
-tu|-translateuser)
set -A aUserTr ${aUserTr[@]} $2;
[[ "$2" = "" ]] && show_usage -user;
echo "$2" | grep "=" >/dev/null || show_usage -user;
shift;;
-input) ImportDir=$2;
[[ "$2" = "" ]] && show_usage -input;
shift;;
-vd|-variabledir)
ImportedEnvPath=$2;
[[ "$2" = "" ]] && show_usage -variableDir;
shift;;
-disabletasks) disableTasks=true;;
-enabletasks) enableTasks=true;;
-mu) MU=$2;
[[ "$2" = "" ]] && show_usage -mu;
shift;;
-distributemodel) Distribute=true;;
-h) show_usage valid;;
*)
show_usage $@;;
esac
shift;
done
[[ "$ImportDir" == "" ]] && show_usage;
#------------------------------------------------------------------------------------
# Chargement de l'environnement $U
#------------------------------------------------------------------------------------
UXMGRDIR=`find / -name "uxsetenv" -exec dirname {} \; 2>/dev/null`
echo "Répertoires mgr \$U trouvés :"
echo "$UXMGRDIR"
while [ `echo "$UXMGRDIR" | wc -w` -ne 1 ]; do
printf "Spécifiez le répertoire mgr \$U : ";
read UXMGRDIR
done
cd $UXMGRDIR
. ./uxsetenv
cd - >/dev/null
#------------------------------------------------------------------------------------
# Fonction de test des erreurs
#------------------------------------------------------------------------------------
Test_Erreur()
{
if [ ${1} -eq 0 ]
then
cat ${Log}.err >> ${Log}
echo "# Traitement ${2} OK" | tee -a ${Log}
echo "#" >> ${Log}
else
cat ${Log}.err | tee -a ${Log}
echo "#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "# Erreur lors du traitement ${2} : ${1}" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" | tee -a ${Log}
exit 1
fi
}
Log=$(dirname $0)/$(basename $0 .ksh).$(date +"%y%m%d-%H%M").log
echo > ${Log}.err
#------------------------------------------------------------------------------------
# Extraction au besoin de .tar[.gz]
#------------------------------------------------------------------------------------
case $ImportDir in
*.tar.gz) cd `dirname $ImportDir`
gunzip -c $ImportDir | tar xf - ; RC=$?
cd - >/dev/null
Test_Erreur $RC "Extraction de $ImportDir"
ImportDir=`dirname $ImportDir`/`basename $ImportDir .tar.gz`;;
*.tar) cd `dirname $ImportDir`
tar xf $ImportDir; RC=$?
cd - >/dev/null
Test_Erreur $RC "Extraction de $ImportDir"
ImportDir=`dirname $ImportDir`/`basename $ImportDir .tar`;;
esac
ls -d $ImportDir/. > /dev/null 2>${Log}.err
Test_Erreur $? "Acces a $ImportDir"
cat $ImportDir/version.txt | read expversion > /dev/null 2>${Log}.err
Test_Erreur $? "Acces a la version"
[[ "$VERSION" == "$expversion" ]]; Test_Erreur $? "Compatibilité de la version"
#------------------------------------------------------------------------------------
# Declarations des variables internes
#------------------------------------------------------------------------------------
Dir_Res=${ImportDir}/res
Dir_Upr=${ImportDir}/upr
Dir_Rul=${ImportDir}/rul
Dir_Ses=${ImportDir}/ses
Dir_Tsk=${ImportDir}/tsk
Dir_Tmp=${ImportDir}/tmp
Log=$(dirname $0)/$(basename $0 .ksh).$(date +"%y%m%d-%H%M").log
#------------------------------------------------------------------------------------
# Validation de l'EnvPath
#------------------------------------------------------------------------------------
read ExportedEnvPath < ${Dir_Res}/exportedpath.txt
Test_Erreur $? "Acces a ${Dir_Res}/exportedpath.txt"
typeset -i EnvPathSize=`echo $ExportedEnvPath | wc -c`
typeset -i EnvPathSizeD=$EnvPathSize-1
[[ $EnvPathSize -eq 0 ]] && EnvPathSizeD=0
[[ `echo $ImportedEnvPath | wc -c` -eq $EnvPathSize ]]; Test_Erreur $? "-variableDir parameter must be $EnvPathSizeD characters long"
echo "#--------------------------------------------------------------------------" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# Script d'exportation -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# Import des Sessions Uprocs Taches du plan Batch de recette -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "#- Debut ------------------------------------------------------------------" | tee -a ${Log}
#------------------------------------------------------------------------------------
# Devariabilisation et validation des ressources avant import
#------------------------------------------------------------------------------------
find ${Dir_Res} -name "*.exp" | while read ResFile; do
Res=`basename $ResFile .exp`
cat ${Dir_Res}/$Res.exp | sed "s/\/$ExportedEnvPath\//\/$ImportedEnvPath\//" > ${Dir_Tmp}/$Res.exp.tmp 2>${Log}.err
Test_Erreur $? "Devariabilisation de la ressource $Res"
ResLine=$(head -2 ${Dir_Tmp}/$Res.exp.tmp | tail -1)
ResPath=$(echo "$ResLine" | cut -b 182-243)
ResEnd=$(echo "$ResLine" | cut -b 244-244)
[[ "$ResEnd" = "_" ]] || Test_Erreur $? "fichier ressource resultant Invalide : ${Dir_Tmp}/$Res.exp.tmp"
ls -d $ResPath/. > /dev/null 2>${Log}.err
Test_Erreur $? "Acces a $ResPath"
done
find ${Dir_Res} -name "*.exp" | while read ResFile; do
Res=`basename $ResFile .exp`
$UXEXE/uxins RES EXP RES=$Res input=${Dir_Tmp}/$Res.exp.tmp REPL > ${Log}.err 2>&1
Test_Erreur $? "Insertion de la ressource $Res (fichier ${Dir_Tmp}/$Res.exp.tmp)"
done
find ${Dir_Upr} -name "*.exp" | while read UprFile; do
Upr=`basename $UprFile .exp`
$UXEXE/uxins UPR EXP UPR=$Upr input=${Dir_Upr}/$Upr.exp REPL > ${Log}.err 2>&1
Test_Erreur $? "Insertion de l'Uproc $Upr"
done
find ${Dir_Rul} -name "*.exp" | while read RulFile; do
Rul=`basename $RulFile .exp`
$UXEXE/uxins RUL EXP RUL=$Rul input=${Dir_Rul}/$Rul.exp REPL > ${Log}.err 2>&1
Test_Erreur $? "Insertion de la regle $Rul"
done
find ${Dir_Ses} -name "*.exp" | while read SesFile; do
Ses=`basename $SesFile .exp`
$UXEXE/uxins SES EXP SES=$Ses input=${Dir_Ses}/$Ses.exp REPL > ${Log}.err 2>&1
Test_Erreur $? "Insertion de la session $Ses"
done
find ${Dir_Tsk} -name "*.exp" | while read TskFile; do
Tsk=`basename $TskFile .exp`
Ses=`echo $Tsk | cut -d - -f 1`
Upr=`echo $Tsk | cut -d - -f 2`
tskType=`echo $Tsk | cut -d - -f 3`
tskUser=`echo $Tsk | cut -d - -f 4-`
SesFile="$Ses"
SesTsk="SES=${Ses}"
[[ "$Ses" = "none" ]] && SesFile="none" && Ses=" " && SesTsk=""
cible=$MU
[[ "$tskType" == "MODEL" ]] && cible="*"
$UXEXE/uxins TSK EXP $SesTsk UPR=$Upr $tskType input=${Dir_Tsk}/$SesFile-$Upr-${tskType}-${tskUser}.exp CIBLE=$cible REPL > ${Log}.err 2>&1
Test_Erreur $? "Extraction de la tache $Tsk"
if [[ "$disableTasks" == "true" ]]; then
$UXEXE/uxupd TSK EXP SES=\"$Ses\" UPR=$Upr $tskType vupr=* mu=$cible TECHINF HOLD > ${Log}.err 2>&1
Test_Erreur $? "Mise à jour du status de la tache $tskType $Tsk (disable)"
fi
#Lecture et Traduction du user de la tâche
if [[ "$tskUser" != "" ]]; then
for trUser in ${aUserTr[@]}; do
trUserA=${trUser%%=*}
trUserB=${trUser##*=}
if [[ "${tskUser##$trUserA}" == "" ]]; then
#la partie trUserA correspond
tskUser=$trUserB
break;
fi
done
$UXEXE/uxupd TSK EXP SES=\"$Ses\" UPR=$Upr $tskType vupr=* mu=$cible TECHINF USER=$tskUser > ${Log}.err 2>&1
Test_Erreur $? "Mise à jour du status de la tache $tskType $Tsk (user = $tskUser)"
[[ $Distribute == true ]] && [[ $tskType == "MODEL" ]] &&
{
tskVer=`$UXEXE/uxshw tsk exp SES=\"$Ses\" UPR=$Upr mu=$cible $tskType vupr=* partage | grep "| vupr" | head -n 1 | cut -d \: -f 2 | cut -d \ -f 2`
$UXEXE/uxdup TSK EXP SES=\"$Ses\" UPR=$Upr mu=$cible VUPR=$tskVer MODEL TSES=\"$Ses\" TUPR=$Upr TVUPR=$tskVer TMU=$MU TNOMODEL > ${Log}.err 2>&1
Test_Erreur $? "Distribution de la tache {$Tsk} en NOMODEL"
tskType=NOMODEL
}
fi
if [[ "$enableTasks" == "true" ]]; then
$UXEXE/uxupd TSK EXP SES=\"$Ses\" UPR=$Upr $tskType vupr=* mu=$MU TECHINF NOHOLD > ${Log}.err 2>&1
Test_Erreur $? "Mise à jour du status de la tache $tskType $Tsk (enable)"
fi
done
echo "Full LogFile = ${Log}"
echo "#- Fin ------------------------------------------------------------------" | tee -a ${Log}
mgenay/technique/import_ordonnancement_u.txt · Last modified: by 127.0.0.1