first commit
This commit is contained in:
172
bin/mvOrga2Nas.sh
Executable file
172
bin/mvOrga2Nas.sh
Executable file
@ -0,0 +1,172 @@
|
||||
#!/bin/bash
|
||||
|
||||
# déplace des orga de
|
||||
# /var/lib/docker/volumes/
|
||||
# vers
|
||||
# /mnt/disk-nas1/docker/volumes/
|
||||
|
||||
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
||||
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||||
setKazVars
|
||||
DOCK_NAS="/mnt/disk-nas1/docker/volumes"
|
||||
|
||||
DOCK_SRC="${DOCK_VOL}"
|
||||
DOCK_DST="${DOCK_NAS}"
|
||||
|
||||
export PRG="$0"
|
||||
cd $(dirname $0)
|
||||
|
||||
. "${DOCKERS_ENV}"
|
||||
|
||||
declare -a availableOrga
|
||||
availableOrga=($(sed -e "s/\(.*\)[ \t]*#.*$/\1/" -e "s/^[ \t]*\(.*\)-orga$/\1/" -e "/^$/d" "${KAZ_CONF_DIR}/container-orga.list"))
|
||||
|
||||
# no more export in .env
|
||||
export $(set | grep "domain=")
|
||||
|
||||
export SIMU=""
|
||||
export ONLY_SYNC=""
|
||||
export NO_SYNC=""
|
||||
export FORCE=""
|
||||
export REVERSE=""
|
||||
|
||||
usage(){
|
||||
echo "Usage: ${PRG} [orga...]"
|
||||
echo " -h help"
|
||||
echo " -n simulation"
|
||||
echo " -y force"
|
||||
echo " -s phase1 only"
|
||||
echo " -r reverse (${DOCK_NAS} to ${DOCK_VOL})"
|
||||
echo " -ns no pre sync"
|
||||
exit 1
|
||||
}
|
||||
|
||||
for ARG in $@; do
|
||||
case "${ARG}" in
|
||||
'-h' | '-help' )
|
||||
usage
|
||||
;;
|
||||
'-n' )
|
||||
shift
|
||||
export SIMU="echo"
|
||||
;;
|
||||
'-y' )
|
||||
shift
|
||||
export FORCE="yes"
|
||||
;;
|
||||
'-s' )
|
||||
shift
|
||||
export ONLY_SYNC="yes"
|
||||
;;
|
||||
'-r' )
|
||||
shift
|
||||
export REVERSE="yes"
|
||||
;;
|
||||
'-ns' )
|
||||
shift
|
||||
export NO_SYNC="yes"
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ -z "$1" ]] && usage
|
||||
|
||||
for ARG in $@; do
|
||||
[[ ! " ${availableOrga[*]} " =~ " ${ARG} " ]] && echo "${RED}${ARG}${NC} is not an orga" && usage
|
||||
done
|
||||
|
||||
########################################
|
||||
|
||||
# on copie dans new pour que le changement soit atomique
|
||||
NEW=""
|
||||
if [ -n "${REVERSE}" ]; then
|
||||
DOCK_SRC="${DOCK_NAS}"
|
||||
DOCK_DST="${DOCK_VOL}"
|
||||
NEW="/new"
|
||||
${SIMU} mkdir -p "${DOCK_DST}${NEW}"
|
||||
fi
|
||||
# on garde une copie dans back au cas où
|
||||
BACK="${DOCK_SRC}/old"
|
||||
|
||||
echo " move from ${BLUE}${BOLD}${DOCK_SRC}${NC} to ${BLUE}${BOLD}${DOCK_DST}${NC}"
|
||||
checkContinue
|
||||
|
||||
cd "${DOCK_SRC}"
|
||||
volext=$(ls -d orga* | sed 's%.*-%%' | sort -u)
|
||||
declare -a orgaPhase2
|
||||
|
||||
# Pour que l'interruption de service soit la plus courte possible,
|
||||
# on pré-copie toutes les infos de puis la création de l'orga
|
||||
echo -n "${BLUE}Phase 1: pre sync.${NC} "
|
||||
[[ -z "${FORCE}" ]] && [[ -z "${NO_SYNC}" ]] && checkContinue
|
||||
echo
|
||||
for ARG in $@; do
|
||||
for EXT in ${volext}; do
|
||||
vol="orga_${ARG}-${EXT}"
|
||||
# test le service existe
|
||||
[ -e "${DOCK_SRC}/${vol}" ] || continue
|
||||
# si c'est un lien sur /var/lib c'est déjà fait
|
||||
[ -z "${REVERSE}" ] && [ -L "${DOCK_SRC}/${vol}" ] && echo "${GREEN}${vol}${NC} : done" && continue
|
||||
# si c'est un lien sur le NAS c'est un problème
|
||||
[ -n "${REVERSE}" ] && [ -L "${DOCK_SRC}/${vol}" ] && echo "${GREEN}${vol}${NC} : bug" && continue
|
||||
# si c'est pas un répertoire c'est un problème
|
||||
! [ -d "${DOCK_SRC}/${vol}" ] && echo "${RED}${vol}${NC} : done ?" && continue
|
||||
# si transfert est déjà fait
|
||||
if [ -n "${REVERSE}" ]; then
|
||||
! [ -L "${DOCK_DST}/${vol}" ] && echo "${RED}${vol}${NC} : done" && continue
|
||||
fi
|
||||
echo " - ${YELLOW}${vol}${NC}"
|
||||
[[ -z "${NO_SYNC}" ]] && ${SIMU} rsync -auHAX --info=progress2 "${DOCK_SRC}/${vol}/" "${DOCK_DST}${NEW}/${vol}/"
|
||||
[[ " ${orgaPhase2[@]} " =~ " ${ARG} " ]] || orgaPhase2+=( "${ARG}" )
|
||||
done
|
||||
done
|
||||
|
||||
[ -n "${ONLY_SYNC}" ] && exit 0
|
||||
|
||||
if (( ${#orgaPhase2[@]} == 0 )); then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo -n "${BLUE}Phase 2: mv.${NC} "
|
||||
[[ -z "${FORCE}" ]] && checkContinue
|
||||
echo
|
||||
mkdir -p "${BACK}"
|
||||
for ARG in "${orgaPhase2[@]}"; do
|
||||
cd "${KAZ_ROOT}"
|
||||
cd "${KAZ_COMP_DIR}/${ARG}-orga"
|
||||
! [ -e "docker-compose.yml" ] && echo "no docker-compose.yml for ${RED}${ARG}${NC}" && continue
|
||||
${SIMU} docker-compose down
|
||||
# L'arrêt ne durera que le temps de copier les modifications depuis la phase 1.
|
||||
for EXT in ${volext}; do
|
||||
vol="orga_${ARG}-${EXT}"
|
||||
# test le service existe
|
||||
[ -e "${DOCK_SRC}/${vol}" ] || continue
|
||||
# si c'est un lien sur /var/lib c'est déjà fait
|
||||
[ -z "${REVERSE}" ] && [ -L "${DOCK_SRC}/${vol}" ] && echo "${GREEN}${vol}${NC} : done" && continue
|
||||
# si c'est un lien sur le NAS c'est un problème
|
||||
[ -n "${REVERSE}" ] && [ -L "${DOCK_SRC}/${vol}" ] && echo "${GREEN}${vol}${NC} : bug" && continue
|
||||
# si c'est pas un répertoire c'est un problème
|
||||
! [ -d "${DOCK_SRC}/${vol}" ] && echo "${RED}${vol}${NC} : done ?" && continue
|
||||
# si transfert est déjà fait
|
||||
if [ -n "${REVERSE}" ]; then
|
||||
! [ -L "${DOCK_DST}/${vol}" ] && echo "${RED}${vol}${NC} : done" && continue
|
||||
fi
|
||||
echo " - ${YELLOW}${vol}${NC}"
|
||||
${SIMU} rsync -auHAX --info=progress2 --delete "${DOCK_SRC}/${vol}/" "${DOCK_DST}${NEW}/${vol}/" || exit 1
|
||||
${SIMU} mv "${DOCK_SRC}/${vol}" "${BACK}/"
|
||||
if [ -z "${REVERSE}" ]; then
|
||||
# cas de /var/lib vers NAS
|
||||
${SIMU} ln -sf "${DOCK_DST}/${vol}" "${DOCK_SRC}/"
|
||||
else
|
||||
# cas NAS vers /var/lib
|
||||
${SIMU} rm -f "${DOCK_SRC}/${vol}"
|
||||
${SIMU} mv "${DOCK_DST}${NEW}/${vol}" "${DOCK_DST}/"
|
||||
fi
|
||||
done
|
||||
${SIMU} docker-compose up -d
|
||||
[[ -x "reload.sh" ]] && "./reload.sh"
|
||||
echo
|
||||
done
|
Reference in New Issue
Block a user