From 6649edeedf0dc67b53310c4ed19832a31ab704be Mon Sep 17 00:00:00 2001 From: Dean Bailey Date: Sun, 4 Mar 2018 23:58:13 -0800 Subject: [PATCH] Fixed breakage caused by splitting on SPACE in OPENVPN_CONFIG Changed to split on comma as many openvpn configs have space in the name. Added a bit more validation that a provider is set. Updated docs. --- README.md | 4 ++-- openvpn/start.sh | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 8c6e02ee0..3cb648bbd 100644 --- a/README.md +++ b/README.md @@ -65,10 +65,10 @@ Find available OpenVPN configurations by looking in the openvpn folder of the Gi -e "OPENVPN_CONFIG=ipvanish-AT-Vienna-vie-c02" ``` -You can also provide a list of openvpn configuration filenames separated by a space. +You can also provide a comma separated list of openvpn configuration filenames. If you provide a list, a file will be randomly chosen in the list, this is useful for redundancy setups. For example: ``` --e "OPENVPN_CONFIG=ipvanish-AT-Vienna-vie-c02 ipvanish-FR-Paris-par-a01 ipvanish-DE-Frankfurt-fra-a01" +-e "OPENVPN_CONFIG=ipvanish-AT-Vienna-vie-c02,ipvanish-FR-Paris-par-a01,ipvanish-DE-Frankfurt-fra-a01" ``` If you provide a list and the selected server goes down, after the value of ping-timeout the container will be restarted and a server will be randomly chosen, note that the faulty server can be chosen again, if this should occur, the container will be restarted again until a working server is selected. diff --git a/openvpn/start.sh b/openvpn/start.sh index 5db8035fe..96303dc8f 100755 --- a/openvpn/start.sh +++ b/openvpn/start.sh @@ -1,7 +1,11 @@ #!/bin/bash VPN_PROVIDER="${OPENVPN_PROVIDER,,}" VPN_PROVIDER_CONFIGS="/etc/openvpn/${VPN_PROVIDER}" -if [[ ! -d "${VPN_PROVIDER_CONFIGS}" ]]; then + +if [[ "${OPENVPN_PROVIDER}" == "**None**" ]] || [[ -z "${OPENVPN_PROVIDER-}" ]]; then + echo "OpenVPN provider not set. Exiting." + exit 1 +elif [[ ! -d "${VPN_PROVIDER_CONFIGS}" ]]; then echo "Could not find OpenVPN provider: ${OPENVPN_PROVIDER}" echo "Please check your settings." exit 1 @@ -9,14 +13,12 @@ fi echo "Using OpenVPN provider: ${OPENVPN_PROVIDER}" -if [[ ! -z "${OPENVPN_CONFIG}" ]]; then - n=$(echo "$OPENVPN_CONFIG" | wc -w) - if [ $n -gt 1 ] - then - rnd=$((RANDOM%n+1)) - srv=$(echo "$OPENVPN_CONFIG" | awk -vrnd=$rnd '{print $rnd}') - echo "$n servers found in OPENVPN_CONFIG, $srv chosen randomly" - OPENVPN_CONFIG=$srv +if [[ -n "${OPENVPN_CONFIG-}" ]]; then + readarray -t OPENVPN_CONFIG_ARRAY <<< "${OPENVPN_CONFIG//,/$'\n'}" + if (( ${#OPENVPN_CONFIG_ARRAY[@]} > 1 )); then + OPENVPN_CONFIG_RANDOM=$((RANDOM%${#OPENVPN_CONFIG_ARRAY[@]})) + echo "${#OPENVPN_CONFIG_ARRAY[@]} servers found in OPENVPN_CONFIG, ${OPENVPN_CONFIG_ARRAY[${OPENVPN_CONFIG_RANDOM}]} chosen randomly" + OPENVPN_CONFIG="${OPENVPN_CONFIG_ARRAY[${OPENVPN_CONFIG_RANDOM}]}" fi if [[ -f "${VPN_PROVIDER_CONFIGS}/${OPENVPN_CONFIG}".ovpn ]]; then