Ci-dessous, le su-per-be script que j'ai développé pour faire un import $U ! Pour l'export, c'est [[Export Ordonnancement $U|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}