mirror of
https://cgit.krebsco.de/krops
synced 2024-12-23 02:09:51 +01:00
krops writeDeploy: add useNixOutputMonitor parameter
This commit is contained in:
parent
3aa04be96f
commit
625bd446dd
2 changed files with 71 additions and 7 deletions
23
README.md
23
README.md
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue