krops writeDeploy: add useNixOutputMonitor parameter

This commit is contained in:
tv 2022-08-23 14:16:39 +02:00
parent 3aa04be96f
commit 625bd446dd
2 changed files with 71 additions and 7 deletions

View File

@ -136,6 +136,29 @@ Create the sentinel file (`/var/src/.populate`) before syncing the new source.
Specifies which `nixos-rebuild` operation to perform.
### `useNixOutputMonitor` (optional, defaults to `"opportunistic"`)
Specifies when to pipe `nixos-rebuild`'s output to
[nom](https://github.com/maralorn/nix-output-monitor).
Supported values:
* `"opportunistic"` (default) -
Use `nom` only if it is present on the target machine.
* `"optimistic"` -
Use `nom`, assuming it is present on the target machine.
* `"pessimistic"` -
Use `nom` via `nix-shell` on the target machine.
* `true` -
Use `nom`.
If it is not present on the target machine, then use it via `nix-shell`.
* `false` -
Don't use `nom`
## writeTest
Very similiar to writeDeploy, but just builds the system on the target without

View File

@ -4,10 +4,16 @@ in
{ nix, openssh, populate, writers }: rec {
rebuild = args: target:
runShell target {} "nixos-rebuild -I ${lib.escapeShellArg target.path} ${
lib.concatMapStringsSep " " lib.escapeShellArg args
}";
rebuild = {
useNixOutputMonitor
}:
args: target:
runShell target {}
(withNixOutputMonitor useNixOutputMonitor /* sh */ ''
nixos-rebuild -I ${
lib.concatMapStringsSep " " lib.escapeShellArg ([target.path] ++ args)
}
'');
runShell = target: {
allocateTTY ? false
@ -24,9 +30,43 @@ in
(if allocateTTY then "-t" else "-T")
target.extraOptions
target.host
command'])}
command'
])}
'';
withNixOutputMonitor = mode_: command: let
mode =
lib.getAttr (lib.typeOf mode_) {
bool = lib.toJSON mode_;
string = mode_;
};
in /* sh */ ''
printf '# use nix-output-monitor: %s\n' ${lib.escapeShellArg mode} >&2
${lib.getAttr mode rec {
opportunistic = /* sh */ ''
if command -v nom >/dev/null; then
${optimistic}
else
${false}
fi
'';
optimistic = /* sh */ ''
(${command}) 2>&1 | nom
'';
pessimistic = /* sh */ ''
nix-shell -p nix-output-monitor --run ${lib.escapeShellArg optimistic}
'';
true = /* sh */ ''
if command -v nom >/dev/null; then
${optimistic}
else
${pessimistic}
fi
'';
false = command;
}}
'';
writeCommand = name: {
command ? (targetPath: "echo ${targetPath}"),
backup ? false,
@ -51,7 +91,8 @@ in
force ? false,
operation ? "switch",
source,
target
target,
useNixOutputMonitor ? "opportunistic"
}: let
buildTarget' =
if buildTarget == null
@ -65,7 +106,7 @@ in
${lib.optionalString (buildTarget' != target')
(populate { inherit backup force source; target = buildTarget'; })}
${populate { inherit backup force source; target = target'; }}
${rebuild ([
${rebuild { inherit useNixOutputMonitor; } ([
operation
] ++ lib.optionals crossDeploy [
"--no-build-nix"