Puxar a parte foo.bar.baz.code.provider.com
pode ser feito com bastante facilidade de duas maneiras. Por exemplo:
datacenter="$(echo "$HOSTNAME" | rev | cut -d. -f3 | rev)"
Se os nomes do data center não corresponderem a um padrão simples como esse, você poderá usar uma instrução case
e corresponder com base em padrões completos de shell:
case "$HOSTNAME" in
*phx.provider.com) DATACENTER="dc1" ;;
*lax.otherprovider.com) DATACETNER="dc2" ;;
*.weirdness.*) DATACENTER="dc3" ;;
# ⋮
esac
Para o seu caso de failover, você precisa decidir como vai determinar que uma máquina está inativa. O mais simples seria tentar uma máquina diferente se scp
retornasse um status de saída diferente de zero. Isso é o que você está fazendo com ||
.
(Você tem algumas outras coisas lá também - por exemplo, tenho certeza de que parallel
call não funcionará, porque funciona em comandos, não em funções de shell)