Add locking via flock(1)
This adds basic advisory locking such that two Nixinate deployments do not run the activation script at the same time, both for local and remote. The default timeout is 60 seconds, and is currently unconfigurable.
This commit is contained in:
parent
1a19e15736
commit
aa9b423354
1 changed files with 3 additions and 3 deletions
|
@ -52,14 +52,14 @@
|
|||
'' + (if hermetic then ''
|
||||
echo "🤞 Activating configuration hermetically on ${machine} via ssh:"
|
||||
( set -x; ${nix} copy --derivation ${nixos-rebuild} --to ssh://${user}@${host} )
|
||||
( set -x; ${openssh} -t ${user}@${host} "sudo nix-store --realise ${nixos-rebuild} && sudo ${nixos-rebuild} ${switch} --flake ${flake}#${machine}" )
|
||||
( set -x; ${openssh} -t ${user}@${host} "sudo flock -w 60 /dev/shm/nixinate-${machine} -c 'nix-store --realise ${nixos-rebuild} && sudo ${nixos-rebuild} ${switch} --flake ${flake}#${machine}'" )
|
||||
'' else ''
|
||||
echo "🤞 Activating configuration non-hermetically on ${machine} via ssh:"
|
||||
( set -x; ${openssh} -t ${user}@${host} "sudo nixos-rebuild ${switch} --flake ${flake}#${machine}" )
|
||||
( set -x; ${openssh} -t ${user}@${host} "sudo flock -w 60 /dev/shm/nixinate-${machine} -c 'nixos-rebuild ${switch} --flake ${flake}#${machine}'" )
|
||||
'')
|
||||
else ''
|
||||
echo "🔨 Building system closure locally, copying it to remote store and activating it:"
|
||||
( set -x; NIX_SSHOPTS="-t" ${nixos-rebuild} ${switch} --flake ${flake}#${machine} --target-host ${user}@${host} --use-remote-sudo ${optionalString substituteOnTarget "-s"} )
|
||||
( set -x; NIX_SSHOPTS="-t" flock -w 60 /dev/shm/nixinate-${machine} -c '${nixos-rebuild} ${switch} --flake ${flake}#${machine} --target-host ${user}@${host} --use-remote-sudo ${optionalString substituteOnTarget "-s"}' )
|
||||
'');
|
||||
in final.writeScript "deploy-${machine}.sh" script;
|
||||
in
|
||||
|
|
Loading…
Add table
Reference in a new issue