sync-containers3: add hostname option

This commit is contained in:
lassulus 2024-03-17 10:04:05 +01:00
parent b19e15e7d0
commit 9e2fe26517

View File

@ -43,6 +43,14 @@ in {
fi fi
''; '';
}; };
hostname = lib.mkOption {
type = lib.types.str;
description = ''
hostname of the container,
his is continously checked by ping and the container is restarted if unreachable
'';
default = config.name;
};
}; };
})); }));
}; };
@ -110,8 +118,8 @@ in {
set -efux set -efux
consul lock sync_${ctr.name} ${pkgs.writers.writeDash "${ctr.name}-sync" '' consul lock sync_${ctr.name} ${pkgs.writers.writeDash "${ctr.name}-sync" ''
set -efux set -efux
if ping -c 1 ${ctr.name}.r; then if ping -c 1 ${ctr.hostname}; then
nice --adjustment=30 rsync -a -e "ssh -i $CREDENTIALS_DIRECTORY/ssh_key" --timeout=30 --inplace --sparse container_sync@${ctr.name}.r:disk "$HOME"/disk.rsync nice --adjustment=30 rsync -a -e "ssh -i $CREDENTIALS_DIRECTORY/ssh_key" --timeout=30 --inplace --sparse container_sync@${ctr.hostname}:disk "$HOME"/disk.rsync
touch "$HOME"/incomplete touch "$HOME"/incomplete
nice --adjustment=30 rsync --inplace "$HOME"/disk.rsync "$HOME"/disk nice --adjustment=30 rsync --inplace "$HOME"/disk.rsync "$HOME"/disk
rm -f "$HOME"/incomplete rm -f "$HOME"/incomplete
@ -153,7 +161,7 @@ in {
export payload export payload
if [ "$(jq -rn 'env.payload | fromjson.host')" = '${config.networking.hostName}' ]; then if [ "$(jq -rn 'env.payload | fromjson.host')" = '${config.networking.hostName}' ]; then
# echo 'we are the host, trying to reach container' # echo 'we are the host, trying to reach container'
if $(retry -t 10 -d 10 -- ping -q -c 1 ${ctr.name}.r > /dev/null); then if $(retry -t 10 -d 10 -- ping -q -c 1 ${ctr.hostname} > /dev/null); then
# echo 'container is reachable, continueing' # echo 'container is reachable, continueing'
continue continue
else else
@ -237,8 +245,8 @@ in {
/run/current-system/sw/bin/nixos-container start ${ctr.name} /run/current-system/sw/bin/nixos-container start ${ctr.name}
# wait for system to become reachable for the first time # wait for system to become reachable for the first time
systemctl start ${ctr.name}_watcher.service systemctl start ${ctr.name}_watcher.service
retry -t 10 -d 10 -- ping -q -c 1 ${ctr.name}.r > /dev/null retry -t 10 -d 10 -- ping -q -c 1 ${ctr.hostname} > /dev/null
while systemctl is-active container@${ctr.name}.service >/devnull && ping -q -c 3 ${ctr.name}.r >/dev/null; do while systemctl is-active container@${ctr.name}.service >/devnull && ping -q -c 3 ${ctr.hostname} >/dev/null; do
consul kv put containers/${ctr.name} "$(jq -cn '{host: "${config.networking.hostName}", time: now}')" >/dev/null consul kv put containers/${ctr.name} "$(jq -cn '{host: "${config.networking.hostName}", time: now}')" >/dev/null
sleep 10 sleep 10
done done