Local part of magic rollbacks.
This commit is contained in:
parent
6244aa6deb
commit
45370615fe
1 changed files with 25 additions and 1 deletions
26
flake.nix
26
flake.nix
|
@ -26,6 +26,28 @@
|
||||||
where = n.buildOn or "remote";
|
where = n.buildOn or "remote";
|
||||||
remote = if where == "remote" then true else if where == "local" then false else abort "_module.args.nixinate.buildOn is not set to a valid value of 'local' or 'remote'";
|
remote = if where == "remote" then true else if where == "local" then false else abort "_module.args.nixinate.buildOn is not set to a valid value of 'local' or 'remote'";
|
||||||
switch = if dryRun then "dry-activate" else "switch";
|
switch = if dryRun then "dry-activate" else "switch";
|
||||||
|
rollbackScript = let
|
||||||
|
inherit (builtins) toString;
|
||||||
|
inherit (final.lib.strings) optionalString;
|
||||||
|
|
||||||
|
r = n.rollback or {};
|
||||||
|
enabled = r.enabled or true;
|
||||||
|
init = r.init or 500;
|
||||||
|
limit = r.limit or 8;
|
||||||
|
timeout = r.timeout or 10;
|
||||||
|
in optionalString enabled ''
|
||||||
|
rollbackAccumulator=${toString limit}
|
||||||
|
exponent=0
|
||||||
|
until ${final.openssh}/bin/ssh -o ConnectTimeout=${toString timeout} -t ${user}@${host} 'sudo rm /tmp/.nixinate-deploy-success'; do
|
||||||
|
rollbackWait=$((${toString init} * (2 ** exponent++)))
|
||||||
|
echo "Could not access ${machine}, trying again in $rollbackWait milliseconds." &>2
|
||||||
|
sleep $((rollbackWait / 1000))
|
||||||
|
if [[ $((--rollbackAccumulator)) == 0 ]]; # --rollbackAccumulator may appear as a flag, however it's inside of $(()), so it decrements the value and yields it.
|
||||||
|
echo "Cannot access ${machine}. Rollback will happen." &>2
|
||||||
|
exit 1
|
||||||
|
]];
|
||||||
|
done
|
||||||
|
'';
|
||||||
script = ''
|
script = ''
|
||||||
set -e
|
set -e
|
||||||
echo "🚀 Deploying nixosConfigurations.${machine} from ${flake}"
|
echo "🚀 Deploying nixosConfigurations.${machine} from ${flake}"
|
||||||
|
@ -39,7 +61,9 @@
|
||||||
'' else ''
|
'' else ''
|
||||||
echo "🔨 Building system closure locally, copying it to remote store and activating it:"
|
echo "🔨 Building system closure locally, copying it to remote store and activating it:"
|
||||||
( set -x; NIX_SSHOPTS="-t" ${final.nixos-rebuild}/bin/nixos-rebuild ${switch} --flake ${flake}#${machine} --target-host ${user}@${host} --use-remote-sudo )
|
( set -x; NIX_SSHOPTS="-t" ${final.nixos-rebuild}/bin/nixos-rebuild ${switch} --flake ${flake}#${machine} --target-host ${user}@${host} --use-remote-sudo )
|
||||||
'');
|
'') + rollbackScript + ''
|
||||||
|
echo "${machine} has finished deploying."
|
||||||
|
'';
|
||||||
in final.writeScript "deploy-${machine}.sh" script;
|
in final.writeScript "deploy-${machine}.sh" script;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue