different deployment methods supported in panel #723
Labels
No labels
0 points
0.5 points
1 point
13 points
2 points
21 points
3 points
34 points
5 points
55 points
8 points
ambition
application-offering
ambition
configure-applications
ambition
front-end
ambition/install-applications
ambition
security
ambition
switch-host
ambition
update-applications
ambition
user-management
api service
blocked
component: fediversity panel
component: nixops4
documentation
estimation high: >3d
estimation low: <2h
estimation mid: <8h
infinite points
productisation
project-management
question
role: application developer
role: application operator
role: hosting provider
role: maintainer
security
technical debt
testing
type unclear
type: bug
type: deliverable
type: key result
type: objective
type: task
type: user story
user experience
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
#289 key features improving user experience supported
fediversity/fediversity
Reference
fediversity/fediversity#723
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
panelsupports as first-class citizens each our deployment effects (ssh-hosts,tf-hosts,tf-incus-hosts), for either offering runtime-specific Nix configuration (our existing schema-generated form) as well as a way to pass runtime-specific settings such as Incus credentialslong-term, we could extend this to support various NixOS deployment methods#1071 explores the challenges in this ambition
how #972's insights inform #723 / #1071
#723 asks: panel should configure each deployment method (
ssh-hosts,tf-hosts,tf-incus-hosts) as a first-class citizen — both their runtime-specific Nix config and runtime settings (Incus creds etc.). #1071 is the WIP that hit the wall and named it: "our UI cannot trivially configure a full nixos configuration ... nixos configurations consist of modules, which, as functions, cannot be trivially serialized." That is the same wall #972 hit.The two issues are the same seam viewed from opposite trust directions:
deployment_attribute) is pinned with the config but is the provider's concernconfiguration, but not the method's module-shaped options (nodes,ssh)So the boundary section already answers #1071's open design question. Three things carry over directly:
1. The config/method cut #972 ratified is exactly the cut #1071 needs. #972 establishes: the config-as-data (data model
{ enable, applications, ... }) is one thing; the method binding (which devShell, whichexecutable, theTF_VAR_*/INCUS_HOSTenv) is a separate, provider-current thing. #1071 independently rediscovered this — its narrow first cut injectsTF_VAR_*/INCUS_HOST/TF_HTTP_ADDRESS"overriding eval-time-baked Nix values without re-evaluating Nix." That is precisely #972's "provider-currentDeployConfig, fed to the pinned tree, no foreign eval." #1071 built half the boundary already.2. #1071's "can't configure a full nixos configuration" is the data-only-override expressiveness limit, verbatim. My spec's three-contract comparison says: data-only override can't introduce a new module (a module is a function, not data) — fine for settings skew, useless for new apps/methods. #1071 hits exactly that: runtime settings (Incus host/port — data) go through fine; the nixos-configuration /
nodessubmodule (module-shaped) does not. The spec already names why and the way out: import-by-path via a stable entry attribute, allowlist-gated. #1071's two proposed escapes ("rethinkdata-model.nix'sconfiguration", "expose setups viaevalOptionas proper modules") are both attempts at that same attribute-addressable seam.3. The #1097 allowlist re-ranking resolves #1071's parting worry. #1071 ends: "we may want to further consider the design/security considerations of exposing effect configuration options over the REST API." My re-evaluation answers it — the allowlist already bounds which trees may be evaluated, so exposing method config over the API is the same trust class as the deploy it gates. Settings (#1071's first cut) need no eval at all; module-shaped method config rides the allowlist-gated import-by-path. The security question #1071 left open is the one #972 closed.
The unifying frame: #972 wants the method selector to stop being frozen by the operator's pin; #723/#1071 wants the method config to be settable per-deployment from the UI. Both resolve the same way — separate the method binding from the config tree, address the config tree by a stable attribute, and let the allowlist (not "never eval") carry the trust. #1071's "deployment method that just exposes plain nixos configurations, plugged in wherever" (your earlier phrasing) is the method-agnostic seam the spec notes already half-exists in
default.nix'snixosConfigurations.incus exec, drop deployment SSH #1112note that #1112 may have removed some ssh bits from api/panel that could still turn out useful (in some form) for this ticket.