Commit Graph

146 Commits

Author SHA1 Message Date
stuebinm
d5f4b0fabb fix nix-build invocation in non-flake builds
The drvpath^out syntax is only part of `nix build', not `nix-build',
which still produces the outPath as it did before, but errors out if
attempted to be called in the same way as `nix build'.
2024-06-11 20:00:09 +02:00
Philipp Herzog
e7638a7867
better error messages: provide node names
printing what node caused an error is very useful for debugging
build or deployment failures, especially when deploying to several
nodes at the same time
2024-06-10 17:42:53 +02:00
Anillc
ddf42d7238
allow --ssh-opts that starts with hyphen 2024-06-10 18:59:45 +08:00
Nick Hassan
5f694ef481
add support for entering password for sudo 2024-02-16 23:21:25 +10:30
Roman Melnikov
56ba8c3929
[Chore] Add missing documentation for timeout options
Problem: README misses documentation for 'confirmTimeout' and
'activationTimeout'.

Solution: Mention them in README.
2023-12-20 13:55:53 +01:00
Roman Melnikov
b076e35c4a
[#245] Return non-zero exit code in case of confirmation timeout
Problem: When profile activation confirmation fails due to
confirmation timeout and performs a rollback, zero exit code is
returned. Such a behavior is confusing since rollback usually means
something went wrong during deployment and it shouldn't return
successful exit code.

Solution: Explicitly return confirmation waiting error instead of
printing it and silently signalizing success.
2023-12-11 14:42:55 +01:00
Roman Melnikov
50d640f403
fixup! [Chore] Make activation wait timeout configurable 2023-11-02 11:29:53 +01:00
Roman Melnikov
aeeee3c1e3
[Chore] Make activation wait timeout configurable
Problem: Currently profile activation waiting timeout is hardcoded to
240 seconds, see https://github.com/serokell/deploy-rs/pull/48.
In some cases, this timeout can be exceeded (e.g.
activation performs a heavy DB migration and waits for it to finish
before considering the profile activation succesful).

Solution: Make this timeout configurable via 'activationTimeout' deploy
attribute or corresponding '--activation-timeout' CLI option. For the
sake of backward compatibility, the new 'wait' subcommand
'--activation-timeout' option is made optional and defaults to 240
seconds if it wasn't provided.
2023-11-02 11:29:52 +01:00
Philipp Herzog
6f77c65c25
[Chore] fix error messages claiming to have rolled back when not actually doing so
closes: #241
2023-11-02 09:25:24 +01:00
Roman Melnikov
f26e888c41
[#201] Deduce profile directory during activation
Problem: Since https://github.com/NixOS/nix/pull/5226 nix profiles for
users are stored in 'XDG_STATE_HOME' or 'HOME' directory. However,
'deploy-rs' still expects profiles to be present in
'/nix/var/nix/profiles/per-user'. As a result, an attempt to deploy a
profile with newer nix may fail with an error about non-existing files.

Solution: Instead of deducing the profile path prior to ssh'ing and
actual activation, deduce the path to the profile during as a part of
'activate-rs' invocation.

Now if the profile path is not specified explicitly as an attribute in
profile within the deploy flake, the path to the profile is determined
based on the user to which the profile belongs and on the values of
'XDG_STATE_HOME' and 'HOME' variables.
Additionally, if the old profile directory (in
'/nix/var/nix/profiles/per-user') for a given user already exists, it is
used instead for the sake of backward compatibility.
2023-09-12 12:00:17 +02:00
Artemis Everfree
f28f8c6063 actually merge confirm_timeout into merged_settings 2023-06-08 01:33:01 -07:00
Roman Melnikov
64160276cd
Merge pull request #203 from serokell/rvem/#202-add-workaround-for-derivations-store-paths-interpolation
[#202] Provide '^out' suffix for deriver on newer nix
2023-05-08 11:05:03 +08:00
Roman Melnikov
c17d71fadf
fixup! [#202] Provide '^out' suffix for deriver on newer nix 2023-05-05 15:04:26 +08:00
Roman Melnikov
e3bc066bd8
[#202] Provide '^out' suffix for deriver on newer nix
Problem: Since 2.15 nix no longer reference '.drv' as derivation
outputs. At the same time, nix before '2.13' doesn't support '.drv'
special suffix handling.

Solution: Provide '^out' suffix for the profile deriver in case
'nix path-info <...>.drv' returns the same '<...>.drv' path.
In other cases either an error about the build result not being present
in the /nix/store is returned or an actual build result path is
returned.
2023-05-05 14:57:31 +08:00
Roman Melnikov
6b0b6a1c25
Merge pull request #205 from serokell/rvem/improve-temp-path-handling
[Chore] Handle 'temp_path' as an actual 'Path' instead of 'String'
2023-05-05 10:53:03 +08:00
Roman Melnikov
784e9ee24d
[Chore] Handle 'temp_path' as an actual 'Path' instead of 'String'
Problem: 'temp_path' and 'lock_path' are handled as 'String'.
This can be a problem when the 'temp_path' directory is a symlink
on the target system, e.g. this is the case with the default
'/tmp' and macOS, where this directory is actually a symlink to '/private/tmp'.

Solution: Handle 'temp_path' and 'lock_path' as actual Paths.
Also, canonicalize 'temp_path' to avoid canary file path mismatches when checking
filesystem events.

As a side effect, also update the 'notify' dependency to the latest stable version.
2023-04-20 15:13:13 +08:00
Roman Melnikov
55aac55cfa
[#197] Fix hostname overriding for remote builds
Problem: '--hostname' is ignored when used with '--remote-build'.

Solution: Account for 'data.deploy_data.cmd_overrides.hostname' when
building a profile remotely.
2023-04-14 13:44:09 +08:00
2xsaiko
a5619f5660
Build every profile first, then push (#158)
Try to build everything first before pushing to remotes. Since the build
is more likely to fail than the upload, if there is an error the deployment
will fail sooner and before uploading any potentially unusable configuration.
2022-12-29 19:19:59 +04:00
Alexander Bantyev
3878dd40f6
Merge pull request #176 from Ma27/activate-boot
Add new activation strategy `boot` as equivalent to `nixos-rebuild boot`
2022-12-29 18:25:47 +04:00
Philipp Herzog
d0c8665042
Add option to build on the remote host 2022-11-18 13:41:54 +01:00
Philipp Herzog
28961e2c2d
Introduce non-zero exit code for rollbacks
Closes #179
2022-11-11 12:20:54 +01:00
Maximilian Bosch
068372aad1
Add new activation strategy boot as equivalent to nixos-rebuild boot
This can be useful when e.g. deploying a kernel update to a target host.
You usually plan a reboot (or kexec) after that to activate the new
kernel. However you don't want to wait for services to be restarted
first since these will be "restarted" anyways on the reboot. In cases
like GitLab or the Atlassian stack this actually makes a difference.

This patch changes the following things:

* If `--boot` is provided, `nix-env -p profile-to-activate --set` is
  called for each deployed profile to make sure that it is activated
  automatically after a reboot.

* However, the actual activation (e.g. `switch-to-configuration switch`)
  is skipped. Instead:

  * For NixOS, `switch-to-configuration boot` is called to set the new
    profile as default in the bootloader.

  * For everything else, nothing else is done. The profile is already
    the new default (and thus picked up on the next boot).
2022-10-09 18:47:08 +02:00
Andrew Fontaine
874af9b05b
Add custom sudo command support
This is useful for nodes that utilize `doas` instead of `sudo`.
2022-01-28 16:18:12 -05:00
Timothy DeHerrera
629596964e
ensure spawned thread exits before main 2021-11-18 10:45:31 -07:00
notgne2
e5546f9c25
General code cleanup 2021-08-12 00:18:06 -07:00
Timothy DeHerrera
cfa203b1d3
fix ambiguous crate ref 2021-07-29 18:17:54 -06:00
Timothy DeHerrera
8a27483dce
optionally take args as input 2021-07-29 18:17:53 -06:00
Timothy DeHerrera
3b6e84d3e2
make cli opts public 2021-07-29 18:17:51 -06:00
Timothy DeHerrera
3c4d7d53d0
export cli run in lib 2021-07-14 15:21:56 -06:00
Alexander Bantyev
220f07199e
Evaluate only once, and then only realise 2021-07-02 19:28:49 +03:00
Alexander Bantyev
1d88b8409e
Cargo fmt 2021-06-22 14:57:50 +03:00
Yannik Sander
1a2d35be27 Add multi node support
Run multiple deployments in sequence

Resolve targets later

Extend context by deployed flake

Apply clippy suggestions

Add revoke command builder

Track succeeded deploys

Add revoke function

Register revoke error as deploy error

Prepare revoke command in activate

Extend logger to handle revoke

Implement revoke command client side

Run revoke on previously suceeded

Control whether to override by flag

Adhere profile configuration auto_rollback setting

Cargo fmt

Correctly provide profile path to activation script when revoking

Document multi flake mode in README

Resolve a typo in README.md

Co-authored-by: notgne2 <gen2@gen2.space>

Use existing teminology

rename revoke_suceeded -> rollback_suceeded

Use more open CLI argument name `targets` instead of `flakes`

Document name changes in README

Add sudo command support for revokes

Call run_deploy with `dry_active` flag

Test revoke commands contains sudo

Set default temp_path in activate binary

Require temp_path for wait and activate subcommands

Add copyright comment

Address review change requests

Fix typo in README

Co-authored-by: Alexander Bantyev <balsoft@balsoft.ru>
2021-06-22 13:41:15 +02:00
notgne2
5d5da4898d
Use correct path to deploy-rs-activate binary when using dry_activate
Signed-off-by: Oleg Pykhalov <go.wigust@gmail.com>
2021-04-30 10:47:46 +03:00
Oleg Pykhalov
920c9d2ed4
Apply notgne2 suggestions. 2021-04-16 12:38:37 +03:00
Oleg Pykhalov
46ac71aa24
Add dry activate argument. 2021-04-07 19:40:15 +03:00
notgne2
0e1cc238e1
Remove ssh:// prefix from SSH addresses 2021-02-28 02:38:40 -07:00
notgne2
c8a40bedcd
Re-use ssh_addr 2021-02-28 02:38:06 -07:00
notgne2
15864f9826
Remove redundant format!() 2021-02-19 16:31:28 -07:00
notgne2
b8e2837250
Clean up adding Command arguments 2021-02-09 21:41:53 -07:00
notgne2
7ee0f7eb4d
Re-add debug log for activate command erroring 2021-02-09 02:55:26 -07:00
notgne2
b74bb50a15
Clean up structure used for activation command error sending 2021-02-09 02:55:26 -07:00
notgne2
e798bb7d83
Still wait for activation command to end even in cases of errors 2021-02-09 02:55:26 -07:00
notgne2
c32d25ec28
Use oneshot signals to ensure SSH activate command has finished before deployment ends 2021-02-09 02:55:26 -07:00
notgne2
4ff0e5f90b
Wait for ssh_activate to complete and check for errors in magic_rollback activation (fixes #58 and #49) 2021-02-09 02:55:26 -07:00
notgne2
8571c086c5
Merge branch 'master' into style-fixes 2021-02-08 23:46:13 -07:00
Alexander Bantyev
99f2127cce
fixup! Evaluate deploy output lazily 2021-02-07 13:37:41 +03:00
Alexander Bantyev
80ab1d7538
Evaluate deploy output lazily
Currently, we evaluate the `#deploy` output strictly. This means
- Longer eval times
- Extraneous evaluation errors with `--skip-checks`
- `-- --impure` even when the path we're currently deploying is pure
- etc.

With this change, evaluation happens lazily -- we only evaluate the nodes
and profiles we really need. It is only implemented for flaky Nix, and
it is on by default. To get the old behavior, one can specify
`--strict-eval`.

I have tested that this indeed dramatically increases evaluation speed
in all of our repos, and removes the need to deploy Agora with
`--impure`. Hooray!
2021-02-06 02:48:57 +03:00
Bernardo Meurer
815814529e
changed: remove 2015-style extern crate 2021-01-26 10:33:05 -08:00
notgne2
0ca5d41aa6
Merge branch 'master' into notgne2/cleanup 2021-01-14 13:21:29 -07:00
notgne2
3885d6608e
Raise wait timeout 2021-01-14 13:12:24 -07:00