1 contributor
#!/bin/zsh
terrafs_d=${1:-$HOME/.fgfs/terrafs.d}
osm2city_dirs=(
Buildings
Details
Pylons
Roads
Trees
)
ws20_dirs=(
Airports
Models
Objects
Terrain
)
for k in ${(koM)parameters}; do
if [[ $k =~ .+_dirs && ${(M)parameters[$k]} == array ]]; then
sceneries+=(${k%_dirs})
typeset -A ${k%_dirs}_urls
fi
done
if test -r $0.conf; then
source $0.conf
else
echo pas de $0.conf trouvé
exit 1
fi
for scenery in ${sceneries[@]}; do
if ! eval "test \${#${scenery}_urls[@]} -gt 0"; then
echo $scenery erreur
exit 1
fi
done
get_url () {
eval "local hosts=(\${(k)${1}_urls[@]})"
echo ${hosts[$(( $RANDOM % ${#hosts[@]} + 1 ))]}
}
remove_url () {
eval "unset \"${1}_urls[$2]\""
}
get_largest () {
eval "local _1=\${#${1}_urls[@]}"
eval "local _2=\${#${2}_urls[@]}"
if test $_1 -gt $_2; then
echo largest=$1
echo smallest=$2
else
echo largest=$2
echo smallest=$1
fi
}
mount_dirs () {
local dir=
eval "local oserver=https://\${${1}_url}/\${${1}_urls[\${${1}_url}]}"
eval "local dirs=(\${${1}_dirs[@]})"
for dir in ${dirs[@]}; do
mkdir -p $HOME/.fgfs/terrafs.d/$dir
printf "- %-10s " $dir && $HOME/.fgfs/terrafs -oserver=$oserver/$dir $terrafs_d/$dir && echo "ok" || echo "ERROR"
done
}
if test $(grep -Ec "^terrafs +$terrafs_d" /proc/mounts) -ne $(( ${#ws20_dirs[@]} + ${#osm2city_dirs[@]} )); then
eval $(get_largest ${sceneries[@]})
eval "${largest}_url=$(get_url $largest)"
eval "remove_url $smallest \$${largest}_url"
eval "${smallest}_url=$(get_url $smallest)"
for m in ${sceneries[@]}; do
eval "printf 'montage %s depuis %s\n' ${(U)m} \$${m}_url"
mount_dirs $m
done
else
echo "démontage $terrafs_d"
for dir in ${osm2city_dirs[@]} ${ws20_dirs[@]}; do
printf "- %-10s " $dir && fusermount -u $terrafs_d/$dir && echo "ok" || echo "ERROR"
done
fi