input-output-hk / input-output-hk/bitte

Vulnix craps out when bitte inputs is overridden to a local path

Open
#139 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Nix
Stars
161
Forks
13
PR merge metrics
No merged PRs in 30d

Description

Often during development, it is a useful pattern to add something like `nix flake lock --override-input bitte path:../bitte` to the consumer's `.envrc.local`. Unfortunately, this results in the following when systemd tries to start vulnix on the monitoring machine:

```
Apr 13 15:53:37 monitoring vulnix-start[7315]: error: cannot fetch input 'path:../bitte?narHash=sha256-dy0UrDisVuUuKYhcfBB%2f6vBqpZM2OjFRm3YHj3r1Cko=' because it uses a relative path
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while fetching the input 'path:../bitte?narHash=sha256-dy0UrDisVuUuKYhcfBB%2f6vBqpZM2OjFRm3YHj3r1Cko='
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while realising the context of a path
Apr 13 15:53:37 monitoring vulnix-start[7315]: at «string»:20:19:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 19|
Apr 13 15:53:37 monitoring vulnix-start[7315]: 20| flake = import (sourceInfo + (if subdir != "" then "/" else "") + subdir + "/flake.nix");
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 21|
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while evaluating anonymous lambda
Apr 13 15:53:37 monitoring vulnix-start[7315]: at «string»:10:13:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 9| builtins.mapAttrs
Apr 13 15:53:37 monitoring vulnix-start[7315]: 10| (key: node:
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 11| let
Apr 13 15:53:37 monitoring vulnix-start[7315]: … from call site
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while evaluating anonymous lambda
Apr 13 15:53:37 monitoring vulnix-start[7315]: at «string»:23:25:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 22| inputs = builtins.mapAttrs
Apr 13 15:53:37 monitoring vulnix-start[7315]: 23| (inputName: inputSpec: allNodes.${resolveInput inputSpec})
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 24| (node.inputs or {});
Apr 13 15:53:37 monitoring vulnix-start[7315]: … from call site
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while evaluating 'recursiveUpdateUntil'
Apr 13 15:53:37 monitoring vulnix-start[7315]: at /nix/store/m2vv0bxfchzrjngx8wi0i7dhzb9q2g50-source/lib/attrsets.nix:516:37:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 515| */
Apr 13 15:53:37 monitoring vulnix-start[7315]: 516| recursiveUpdateUntil = pred: lhs: rhs:
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 517| let f = attrPath:
Apr 13 15:53:37 monitoring vulnix-start[7315]: … from call site
Apr 13 15:53:37 monitoring vulnix-start[7315]: at /nix/store/qk2d661knlfkhzl49krsf0vb14ns51jj-source/flake.nix:222:7:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 221| growOn = args: soil:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 222| nixpkgs.lib.attrsets.recursiveUpdate (
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 223| soil
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while evaluating 'growOn'
Apr 13 15:53:37 monitoring vulnix-start[7315]: at /nix/store/qk2d661knlfkhzl49krsf0vb14ns51jj-source/flake.nix:221:20:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 220| stdOutput;
Apr 13 15:53:37 monitoring vulnix-start[7315]: 221| growOn = args: soil:
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 222| nixpkgs.lib.attrsets.recursiveUpdate (
Apr 13 15:53:37 monitoring vulnix-start[7315]: … from call site
Apr 13 15:53:37 monitoring vulnix-start[7315]: at /nix/store/im4vkfvk3dkilrdmmxi9nb7vdslrkgw9-source/flake.nix:25:5:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 24| in
Apr 13 15:53:37 monitoring vulnix-start[7315]: 25| inputs.std.growOn
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 26| {
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while evaluating 'outputs'
Apr 13 15:53:37 monitoring vulnix-start[7315]: at /nix/store/im4vkfvk3dkilrdmmxi9nb7vdslrkgw9-source/flake.nix:21:13:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 20| };
Apr 13 15:53:37 monitoring vulnix-start[7315]: 21| outputs = inputs: let
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 22| inherit (inputs) bitte;
Apr 13 15:53:37 monitoring vulnix-start[7315]: … from call site
Apr 13 15:53:37 monitoring vulnix-start[7315]: at «string»:45:21:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 44|
Apr 13 15:53:37 monitoring vulnix-start[7315]: 45| outputs = flake.outputs (inputs // { self = result; });
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 46|
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while evaluating anonymous lambda
Apr 13 15:53:37 monitoring vulnix-start[7315]: at «string»:10:13:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 9| builtins.mapAttrs
Apr 13 15:53:37 monitoring vulnix-start[7315]: 10| (key: node:
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 11| let
Apr 13 15:53:37 monitoring vulnix-start[7315]: … from call site
Apr 13 15:53:37 monitoring vulnix-start[7315]: … while evaluating anonymous lambda
Apr 13 15:53:37 monitoring vulnix-start[7315]: at «string»:2:23:
Apr 13 15:53:37 monitoring vulnix-start[7315]: 1|
Apr 13 15:53:37 monitoring vulnix-start[7315]: 2| lockFileStr: rootSrc: rootSubdir:
Apr 13 15:53:37 monitoring vulnix-start[7315]: | ^
Apr 13 15:53:37 monitoring vulnix-start[7315]: 3|
Apr 13 15:53:37 monitoring vulnix-start[7315]: … from call site
```

IMHO overriding an input is a valid use case when developing and should Just Work. Development friction is the root of all evil.

Clearly this takes the input verbatim rather than its corresponding store path, which is probably not exactly what we want.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by locating the vulnix-start flake input resolution and the `sourceInfo` evaluation shown in the error trace. Reproduce the failure with `nix flake lock --override-input bitte path:../bitte`; done means a relative local override resolves to a usable store path and vulnix starts successfully.

Written by the indexing model from the issue text.

Assessment

Domain
devops, infrastructure
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.