swarm-builder: an agent option whose eval failed is left out of the reply, not read as its default
This commit is contained in:
parent
cd1b77b078
commit
5d2b0c9a54
1 changed files with 340 additions and 158 deletions
|
|
@ -282,6 +282,30 @@ The record's `cached` field says whether the builder pushed the closure to
|
|||
[the binary cache](#binary-cache). Each hive reads its own agents' keys to
|
||||
[report whether it can pull them and download them in a rebuild](#what-hives-do-with-the-cache). The closure stays unrooted in the builder host's store.
|
||||
|
||||
The built reply and the record also carry two options of the agent's evaluated
|
||||
config, `private_users` (`services.hyperhive.agent.user.privateUsers`) and
|
||||
`nix_builds` (`services.hyperhive.agent.nixBuilds`). The builder reads each with
|
||||
a `nix eval` in its sandbox, and an eval has three outcomes:
|
||||
|
||||
- **A value:** the field holds it.
|
||||
- **The module doesn't declare the option** (`nix` says the flake doesn't
|
||||
provide the attribute): the field holds the option's default, off for
|
||||
`private_users` and `host` for `nix_builds`.
|
||||
- **Any other failure, or a timeout:** the value is unknown, and the reply and
|
||||
the record leave the field out. hive-c0re then sends nothing for that option,
|
||||
and hive-priv keeps what the container's last write chose, as it does for an
|
||||
agent with no record.
|
||||
|
||||
Mixed versions:
|
||||
|
||||
| builder | controller and hive-c0re | what happens |
|
||||
| ------- | ------------------------ | -------------------------------------------------------------------------------------------------------------- |
|
||||
| new | new | an unread option leaves the field out, and the last write stands |
|
||||
| old | new | the old builder always sends a value, which the record carries |
|
||||
| new | old | the old side reads a missing field as the default, so an unread option behaves as it did before this behaviour |
|
||||
|
||||
A record or reply from before the fields reads as unknown.
|
||||
|
||||
The controller gives the `builder` forge account read on `internal/meta` when it
|
||||
updates the flake, and again before each build, since the repo is private. A
|
||||
grant the forge refuses fails the build with no verdict.
|
||||
|
|
|
|||
Loading…
Reference in a new issue