mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-28 02:18:50 +00:00
Upon receiving a SIGTERM, we immediately disconnect from the websocket connection to the portal and set a flag that we are shutting down. Once we are disconnected from the portal and no longer have an active allocations, we exit with 0. A repeated SIGTERM signal will interrupt this process and force the relay to shutdown. Disconnecting from the portal will (eventually) trigger a message to clients and gateways that this relay should no longer be used. Thus, depending on the timeout our supervisor has configured after sending SIGTERM, the relay will continue all TURN operations until the number of allocations drops to 0. Currently, we also allow clients to make new allocations and refreshing existing allocations. In the future, it may make sense to implement a dedicated status code and refuse `ALLOCATE` and `REFRESH` messages whilst we are shutting down. Related: #4548. --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
65 lines
1.5 KiB
Bash
Executable File
65 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euox pipefail
|
|
|
|
function client() {
|
|
docker compose exec -it client "$@"
|
|
}
|
|
|
|
function gateway() {
|
|
docker compose exec -it gateway "$@"
|
|
}
|
|
|
|
function relay() {
|
|
docker compose exec -it relay "$@"
|
|
}
|
|
|
|
function install_iptables_drop_rules() {
|
|
sudo iptables -I FORWARD 1 -s 172.28.0.100 -d 172.28.0.105 -j DROP
|
|
sudo iptables -I FORWARD 1 -s 172.28.0.105 -d 172.28.0.100 -j DROP
|
|
trap remove_iptables_drop_rules EXIT # Cleanup after us
|
|
}
|
|
|
|
function remove_iptables_drop_rules() {
|
|
sudo iptables -D FORWARD -s 172.28.0.100 -d 172.28.0.105 -j DROP
|
|
sudo iptables -D FORWARD -s 172.28.0.105 -d 172.28.0.100 -j DROP
|
|
}
|
|
|
|
function client_curl_resource() {
|
|
client curl --fail "$1" > /dev/null
|
|
}
|
|
|
|
function client_ping_resource() {
|
|
client timeout 30 \
|
|
sh -c "until ping -W 1 -c 1 $1 &>/dev/null; do true; done"
|
|
}
|
|
|
|
function client_nslookup() {
|
|
# Skip the first 3 lines so that grep won't see the DNS server IP
|
|
# `tee` here copies stdout to stderr
|
|
client timeout 30 sh -c "nslookup $1 | tee >(cat 1>&2) | tail -n +4"
|
|
}
|
|
|
|
function assert_equals() {
|
|
local expected="$1"
|
|
local actual="$2"
|
|
|
|
if [[ "$expected" != "$actual" ]]; then
|
|
echo "Expected $expected but got $actual"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function process_state() {
|
|
local process_name="$1"
|
|
|
|
ps -C "$process_name" -o state=
|
|
}
|
|
|
|
function assert_process_state {
|
|
local process_name="$1"
|
|
local expected_state="$2"
|
|
|
|
assert_equals "$(process_state "$process_name")" "$expected_state"
|
|
}
|