netbox: operator TF effect consumes the allocated v4+v6 IP (#833) #1150

Merged
kiara merged 15 commits from kiara/fediversity:operator-netbox into main 2026-07-01 13:05:52 +02:00
Owner

Closes part of #833 (folding the unit-tested NetBox integration into the real deployment pipelines).

PR #993 landed the NetBox plumbing -- the tf-netbox-* effects and the generic allocate/release wiring in hosts-common.nix. The operator OpenTofu effect did not yet consume the allocated IP, though: the incus instance got its address from DHCP on incusbr0 and the NetBox-issued IP just landed unused in the merged deploy-output JSON.

What this does

Deployed operator nodes that expose public services now get an available IPv4 and IPv6 sourced from NetBox and registered there, applied via their NixOS networking config (the routed address sits on top of the bridge's DHCP link, which still carries the deploy transport). Re-deploys and other nodes never reallocate the same address. Internal-only nodes (windmill, monitoring, netbox, terraform-backend, valkey, postgresql, smtp) settle for internal/PKI TLS and are skipped.

How the runtime IP reaches the NixOS config

writeConfig already reads runtime data via builtins.getEnv "DEPLOYMENT" at deploy-script runtime, so the deploy shell's hash stays stable. The NetBox IP rides the same channel: the run wrappers allocate each public node's address and export a NETBOX_NODE_IPS JSON map (instance -> { ipv4, ipv6 }); writeConfig reads it and merges each node's address into its network resource policy. Absent env keeps the static groups/operator.nix address.

Changes

  • src/effects/tf/netbox/get-ip.nix: allocate a second, count-gated IPv6 off the same interface, selecting from var.ip_range_id_v6. v4-only deploys pass null and the v6 resource drops out.
  • src/resources/network/default.nix: add a needsPublicIp option (default true) as the per-app override surface, and derive prefixLength from the allocated CIDR (was hard-coded 24/64).
  • src/setups/hosts-common.nix: selective allocation for public nodes only; wrap the aggregate all run/destroy for the operator method; export NETBOX_NODE_IPS.
  • src/effects/default.nix: read NETBOX_IPV6_RANGE_* into ipRangeV6, and merge NETBOX_NODE_IPS into each node's network config in writeConfig.
  • checks/apps/tf-incus/: give incusbr0 an IPv6 subnet, seed a v6 NetBox range, and assert the deployed node's eth0 carries the NetBox v4+v6 address, plus re-deploy idempotence, release, and the internal-node skip.

Verification

Local: operator aggregate + per-app + internal-node wrappers eval to executables; the generated configuration.nix parses and the merge is functionally correct (public node gets the CIDR, internal node keeps its static address); all-run-with-netbox is shellcheck/bash -n clean; apps-tf, apps-tf-incus, deployment-tf-incus-hosts drvPaths eval; treefmt reports 0 changed.

The heavy apps-tf-incus run is left for CI.

Disclaimer: I used a coding agent in the creation of this patch.

Closes part of #833 (folding the unit-tested NetBox integration into the real deployment pipelines). PR #993 landed the NetBox plumbing -- the `tf-netbox-*` effects and the generic `allocate`/`release` wiring in `hosts-common.nix`. The operator OpenTofu effect did not yet *consume* the allocated IP, though: the incus instance got its address from DHCP on `incusbr0` and the NetBox-issued IP just landed unused in the merged deploy-output JSON. ## What this does Deployed operator nodes that expose public services now get an available IPv4 **and** IPv6 sourced from NetBox and registered there, applied via their NixOS `networking` config (the routed address sits on top of the bridge's DHCP link, which still carries the deploy transport). Re-deploys and other nodes never reallocate the same address. Internal-only nodes (windmill, monitoring, netbox, terraform-backend, valkey, postgresql, smtp) settle for internal/PKI TLS and are skipped. ## How the runtime IP reaches the NixOS config `writeConfig` already reads runtime data via `builtins.getEnv "DEPLOYMENT"` at deploy-script runtime, so the deploy shell's hash stays stable. The NetBox IP rides the same channel: the run wrappers allocate each public node's address and export a `NETBOX_NODE_IPS` JSON map (`instance -> { ipv4, ipv6 }`); `writeConfig` reads it and merges each node's address into its `network` resource policy. Absent env keeps the static `groups/operator.nix` address. ## Changes - `src/effects/tf/netbox/get-ip.nix`: allocate a second, `count`-gated IPv6 off the same interface, selecting from `var.ip_range_id_v6`. v4-only deploys pass null and the v6 resource drops out. - `src/resources/network/default.nix`: add a `needsPublicIp` option (default `true`) as the per-app override surface, and derive `prefixLength` from the allocated CIDR (was hard-coded `24`/`64`). - `src/setups/hosts-common.nix`: selective allocation for public nodes only; wrap the aggregate `all` run/destroy for the operator method; export `NETBOX_NODE_IPS`. - `src/effects/default.nix`: read `NETBOX_IPV6_RANGE_*` into `ipRangeV6`, and merge `NETBOX_NODE_IPS` into each node's network config in `writeConfig`. - `checks/apps/tf-incus/`: give `incusbr0` an IPv6 subnet, seed a v6 NetBox range, and assert the deployed node's `eth0` carries the NetBox v4+v6 address, plus re-deploy idempotence, release, and the internal-node skip. ## Verification Local: operator aggregate + per-app + internal-node wrappers eval to executables; the generated `configuration.nix` parses and the merge is functionally correct (public node gets the CIDR, internal node keeps its static address); `all-run-with-netbox` is shellcheck/`bash -n` clean; `apps-tf`, `apps-tf-incus`, `deployment-tf-incus-hosts` drvPaths eval; `treefmt` reports 0 changed. The heavy `apps-tf-incus` run is left for CI. Disclaimer: I used a coding agent in the creation of this patch.
kiara force-pushed operator-netbox from 5149661aa9
Some checks failed
checks-contracts-postgresql-dynamic / contracts-postgresql-dynamic (pull_request) Successful in 17s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 15s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 18s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 20s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 21s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 27s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 33s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 16s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 46s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 22s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 17s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 25s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 10s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 14s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 50s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 54s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 17s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 53s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 20s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 16s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nix-unit-lib-function / lib-function (pull_request) Successful in 22s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 24s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 16s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 17s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 13s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 16s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 23s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 8s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 11s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 15s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
nixosConfigurations-operator-postgresql / operator-postgresql (pull_request) Successful in 14s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 15s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 11s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 26s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
Nix flake completeness check / _complete (pull_request) Successful in 2m10s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 10s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-core-docs / core-docs (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Has been cancelled
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Has been cancelled
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Has been cancelled
flake-show / flake-show (pull_request) Has been cancelled
checks-test-netbox-service / test-netbox-service (pull_request) Has been cancelled
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Has been cancelled
to cc2c164bbb
Some checks failed
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 15s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 19s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 23s
devShells-default / default (pull_request) Successful in 25s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 28s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 27s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 35s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 31s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 20s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 18s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 50s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 16s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 25s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 57s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 15s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 18s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 55s
nix-unit-lib-function / lib-function (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 22s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 15s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 8s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 19s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 20s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 13s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 27s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 17s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 16s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 31s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 17s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 21s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 23s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 13s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 15s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 12s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 12s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
Nix flake completeness check / _complete (pull_request) Successful in 2m14s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 8s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 8s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 9s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m43s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m41s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m6s
checks-core-docs / core-docs (pull_request) Successful in 8m9s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m20s
checks-test-netbox-service / test-netbox-service (pull_request) Failing after 9m57s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m17s
checks-apps-api / apps-api (pull_request) Successful in 43m16s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 44m47s
checks-apps-tf / apps-tf (pull_request) Successful in 53m7s
2026-06-30 00:19:31 +02:00
Compare
@ -154,0 +177,4 @@
"netbox"
"terraform-backend"
"valkey"
"postgresql"
Author
Owner

this feels flaky - if the node were renamed to postgres, could that make it accidentally end up with a public IP?

this feels flaky - if the node were renamed to `postgres`, could that make it accidentally end up with a public IP?
kiara marked this conversation as resolved
@ -109,0 +123,4 @@
"valkey"
"postgresql"
"smtp"
];
Author
Owner

this feels flaky - if the node were renamed to postgres, could that make it accidentally end up with a public IP?

this feels flaky - if the node were renamed to `postgres`, could that make it accidentally end up with a public IP?
kiara marked this conversation as resolved
@ -102,0 +118,4 @@
mergeNode =
node: env:
let
ips = nodeIps.''${node} or null;
Author
Owner

what's with this type of escaping in this file? we weren't in some string here, right?

what's with this type of escaping in this file? we weren't in some string here, right?
kiara marked this conversation as resolved
kiara force-pushed operator-netbox from cc2c164bbb
Some checks failed
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 15s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 19s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 23s
devShells-default / default (pull_request) Successful in 25s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 28s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 27s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 35s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 31s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 20s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 18s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 50s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 16s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 25s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 57s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 15s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 18s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 55s
nix-unit-lib-function / lib-function (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 22s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 15s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 8s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 19s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 20s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 13s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 27s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 17s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 16s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 31s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 17s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 21s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 23s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 13s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 15s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 12s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 12s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
Nix flake completeness check / _complete (pull_request) Successful in 2m14s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 8s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 8s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 9s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m43s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m41s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m6s
checks-core-docs / core-docs (pull_request) Successful in 8m9s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m20s
checks-test-netbox-service / test-netbox-service (pull_request) Failing after 9m57s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m17s
checks-apps-api / apps-api (pull_request) Successful in 43m16s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 44m47s
checks-apps-tf / apps-tf (pull_request) Successful in 53m7s
to 978e59e7ea
Some checks failed
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 18s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 20s
devShells-default / default (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 26s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 30s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 34s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 30s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 21s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 47s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 50s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 17s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 53s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 53s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 23s
nix-unit-lib-function / lib-function (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 15s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 14s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 16s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 16s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 21s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 22s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 18s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 29s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 11s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 11s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 12s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 8s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 9s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
Nix flake completeness check / _complete (pull_request) Successful in 1m39s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m33s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m39s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m2s
checks-core-docs / core-docs (pull_request) Successful in 7m56s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m14s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 9m46s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m14s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 34m47s
checks-apps-api / apps-api (pull_request) Successful in 43m3s
checks-apps-tf / apps-tf (pull_request) Successful in 53m46s
2026-06-30 10:54:45 +02:00
Compare
@ -411,0 +499,4 @@
apps = publicNodes;
outFile = "\"$tmp/node-ips.json\"";
}}
NETBOX_NODE_IPS="$(cat "$tmp/node-ips.json")"
Author
Owner

what is the distinction between NETBOX_NODE_IPS vs NETBOX_IPV6_RANGE_START/NETBOX_IPV6_RANGE_END?

what is the distinction between `NETBOX_NODE_IPS` vs `NETBOX_IPV6_RANGE_START`/`NETBOX_IPV6_RANGE_END`?
Author
Owner
  • NETBOX_IPV6_RANGE_START/NETBOX_IPV6_RANGE_END are deploy inputs (read by default.nix netboxArgs): the operator-configured v6 pool NetBox allocates from. Static config, set once.
  • NETBOX_NODE_IPS is a deploy-time output the run-wrapper produces (instance→{ipv4,ipv6}) after allocating, then writeConfig reads it back to merge the issued address into each node's config. Per-deploy, computed.
> - `NETBOX_IPV6_RANGE_START`/`NETBOX_IPV6_RANGE_END` are deploy inputs (read by `default.nix` `netboxArgs`): the operator-configured v6 pool NetBox allocates from. Static config, set once. > - `NETBOX_NODE_IPS` is a deploy-time output the run-wrapper produces (instance→{ipv4,ipv6}) after allocating, then `writeConfig` reads it back to merge the issued address into each node's config. Per-deploy, computed.
kiara marked this conversation as resolved
@ -368,0 +419,4 @@
node_ips='{}'
${lib.concatMapStringsSep "\n" (app: ''
alloc="$("${lib.getExe netboxCfg.perApp.${app}.allocate}")"
Author
Owner

if netbox is used stateless (?), and we then deploy a single machine by incus here, would the current method still not just wholesale override netbox's prior allocations (rather than just on behalf of the allocations of the nodes in question)?

if netbox is used stateless (?), and we then deploy a single machine by incus here, would the current method still not just wholesale override netbox's prior allocations (rather than just on behalf of the allocations of the nodes in question)?
Author
Owner

(stateless netbox + single-machine deploy overriding prior allocations) — answerable: No wholesale override. Allocation is per-node via netbox_available_ip_address (NetBox picks the next available one and marks it used) and writeConfig only merges addresses for keys present in NETBOX_NODE_IPS (mergeNode is mapAttrs over envs, ips == null → node untouched). A single-app run allocates only that one node (apps = [ app ]). It doesn't reallocate or clear others. But the legitimate concern underneath: NetBox state is shared/persistent, and we seed the range each run.

> (stateless netbox + single-machine deploy overriding prior allocations) — answerable: No wholesale override. Allocation is per-node via `netbox_available_ip_address` (NetBox picks the next available one and marks it used) and `writeConfig` only merges addresses for keys present in `NETBOX_NODE_IPS` (`mergeNode` is `mapAttrs` over `envs`, `ips == null` → node untouched). A single-app run allocates only that one node (`apps = [ app ]`). It doesn't reallocate or clear others. But the legitimate concern underneath: NetBox state is shared/persistent, and we _seed_ the range each run.
@ -411,0 +510,4 @@
done
jq -s 'reduce .[] as $x ({}; . * $x)' "$tmp/alloc.json" "$tmp/main.json"
'';
Author
Owner

there may be internal (e.g. for hosting-provider iff not provided, so netbox == null) vs external (e.g. for operator group) netbox, tho even if internal we should be wary to handle it as such given a deploy of one machine should not have notion of the other machines managed by a netbox. so, we should not do netbox seeding (outside init of the actual netbox) but just interface with it 'externally' through TF rather than thru some shared (between seeding and allocation) mkNetboxAllocFragment as if we always owned the netbox.
fwiw, i could maybe still use suggestions on how to easily have this work for both incus deploymen effects (tf-incus+operator, i removed netbox args for just tf[-ssh] in the last commit on main).
as such, i feel perhaps wary to find hosts-common.nix contain (both new and existing) shell scripts writing things to files - or with seeing shell scripts like these in there (rather than incorporated into the TF graphs) in general.
(note that this would apply both to this allocate script, as well as to the below script about IP release.)

there may be internal (e.g. for hosting-provider iff not provided, so `netbox == null`) vs external (e.g. for operator group) netbox, tho even if internal we should be wary to handle it as such given a deploy of one machine should not have notion of the other machines managed by a netbox. so, we should not do netbox seeding (outside init of the actual netbox) but just interface with it 'externally' through TF rather than thru some shared (between seeding and allocation) `mkNetboxAllocFragment` as if we always owned the netbox. fwiw, i could maybe still use suggestions on how to easily have this work for both incus deploymen effects (tf-incus+operator, i removed netbox args for just `tf[-ssh]` in the last commit on main). as such, i feel perhaps wary to find `hosts-common.nix` contain (both new and existing) shell scripts writing things to files - or with seeing shell scripts like these in there (rather than incorporated into the TF graphs) in general. (note that this would apply both to this allocate script, as well as to the below script about IP release.)
kiara marked this conversation as resolved
kiara force-pushed operator-netbox from 978e59e7ea
Some checks failed
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 18s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 20s
devShells-default / default (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 26s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 30s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 34s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 30s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 21s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 47s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 50s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 17s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 53s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 53s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 23s
nix-unit-lib-function / lib-function (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 15s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 14s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 16s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 16s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 21s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 22s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 18s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 29s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 11s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 11s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 12s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 8s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 9s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
Nix flake completeness check / _complete (pull_request) Successful in 1m39s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m33s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m39s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m2s
checks-core-docs / core-docs (pull_request) Successful in 7m56s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m14s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 9m46s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m14s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 34m47s
checks-apps-api / apps-api (pull_request) Successful in 43m3s
checks-apps-tf / apps-tf (pull_request) Successful in 53m46s
to 6c89857a8d
Some checks failed
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 14s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 14s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 14s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 20s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 23s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 36s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 24s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 21s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 40s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 55s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 52s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 17s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 17s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 18s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 58s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 14s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 26s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 35s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 20s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 49s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 15s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 18s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 18s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 17s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 13s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 17s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 23s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 24s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 24s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 12s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 1m46s
nix-unit-lib-function / lib-function (pull_request) Successful in 7s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 7s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 6s
Nix flake completeness check / _complete (pull_request) Successful in 2m19s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 17s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 11s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 10s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 31s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 23s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 14s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m50s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m57s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m19s
checks-core-docs / core-docs (pull_request) Successful in 8m14s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m30s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m39s
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
checks-apps-panel / apps-panel (pull_request) Has been cancelled
2026-06-30 13:10:25 +02:00
Compare
kiara force-pushed operator-netbox from 6c89857a8d
Some checks failed
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 14s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 14s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 14s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 20s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 23s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 36s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 24s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 21s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 40s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 55s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 52s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 17s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 17s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 18s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 58s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 14s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 26s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 35s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 20s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 49s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 15s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 18s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 18s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 17s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 13s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 17s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 23s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 24s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 24s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 12s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 1m46s
nix-unit-lib-function / lib-function (pull_request) Successful in 7s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 7s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 6s
Nix flake completeness check / _complete (pull_request) Successful in 2m19s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 17s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 11s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 10s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 31s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 23s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 14s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m50s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m57s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m19s
checks-core-docs / core-docs (pull_request) Successful in 8m14s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m30s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m39s
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
checks-apps-panel / apps-panel (pull_request) Has been cancelled
to 325228c8a0
Some checks failed
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 15s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 19s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 18s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 20s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 22s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 27s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 22s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 39s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 25s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 23s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 45s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 19s
devShells-default / default (pull_request) Successful in 29s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 53s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 58s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 17s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 19s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 58s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 16s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 57s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 16s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 25s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 13s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 18s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 29s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 19s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 12s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 15s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 24s
nix-unit-lib-function / lib-function (pull_request) Successful in 20s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 15s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 15s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 21s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 12s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 22s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 6s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 11s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 11s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 8s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 10s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 24s
Nix flake completeness check / _complete (pull_request) Successful in 2m16s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 14s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 10s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 8s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m34s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m49s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m10s
checks-core-docs / core-docs (pull_request) Successful in 7m54s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m44s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m47s
checks-apps-api / apps-api (pull_request) Successful in 43m56s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 46m14s
checks-apps-panel / apps-panel (pull_request) Successful in 49m51s
checks-apps-tf / apps-tf (pull_request) Successful in 54m36s
2026-06-30 13:50:45 +02:00
Compare
netbox: allocate routed IPs inside the incus TF graph, from a prefix (#833)
Some checks failed
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 17s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 17s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 24s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 24s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 29s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 31s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 38s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 25s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 21s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 17s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 44s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 19s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 50s
devShells-default / default (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 17s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 19s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 58s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 56s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 59s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Failing after 1m3s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 14s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 23s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 22s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 1m7s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Failing after 1m6s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 22s
nix-unit-lib-function / lib-function (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 13s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 21s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 13s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 13s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 11s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 18s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 6s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 13s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 8s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 11s
checks-apps-api / apps-api (pull_request) Failing after 1m53s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 19s
checks-apps-panel / apps-panel (pull_request) Failing after 1m58s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 10s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 23s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 15s
Nix flake completeness check / _complete (pull_request) Successful in 2m9s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 8s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 8s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 8s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 9s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m27s
checks-core-docs / core-docs (pull_request) Successful in 7m50s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m10s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m8s
checks-apps-tf / apps-tf (pull_request) Has been cancelled
10569a2406
Re-architect NetBox IP consumption per review comment 898: the deploy must
not (re)create NetBox infrastructure, must interface through TF rather than
shell scripts in `hosts-common.nix`, and must work for both incus effects
(`tf-incus-hosts` and `tf-incus-operator-hosts`).

Allocation now lives in the incus graph (`tf/incus/{hosts,operator}/netbox.tf`):
each `needs_public_ip` node gets a `netbox_virtual_machine` + interface and a
`netbox_available_ip_address` (v4, plus v6 when the pool has a v6 prefix), read
from an owner-provisioned PREFIX the deploy only reads. The prefix is discovered
by a selector (`netbox_prefix_selector`, default `tag:fediversity-operator`)
matched via the generic `netbox_prefixes` filter -- so the deploy needs no
specific knowledge of what subnets the NetBox has, and the hosting provider can
renumber or grow the pool freely; a `cidr:` selector pins an exact subnet when
wanted. The allocated address rides into each node's `networking` config via the
existing `NETBOX_NODE_IPS` channel, passed through the `local-exec` environment
in the one deploy apply. Release is automatic on `tofu destroy`.

This drops the entire shell-wrapper machinery from `hosts-common.nix`
(`mkNetboxAllocFragment`, the per-node/aggregate/per-verb run+destroy wrappers,
the `netbox` model submodule, and the seed/perApp assembly) -- ~330 lines -- in
favour of threading a small `netbox` option (cluster name + prefix selector) and
a per-node `needsPublicIp` flag into the incus effect. The `netboxArgs` env
reads collapse to a single `NETBOX_PREFIX_SELECTOR` (`<kind>:<value>`). An
operator deploy no longer seeds ranges, and a deploy with no public node reads
no NetBox at all (the data sources are count-gated).

The `apps-tf-incus` test now seeds a tagged v4+v6 prefix once as init (it owns
its NetBox), then the deploy allocates from it in-graph; assertions keep the
eth0-carries-v4+v6, idempotent-re-deploy, distinct-address, internal-node-skip,
and destroy-releases coverage, reading allocations back over the NetBox REST API
(`netbox_vm_ips`) rather than driving a standalone `get-ip`. A new
`tf-netbox-store-prefix` effect seeds the tagged prefix. The standalone
`get-ip`/`store-ips` effects and `test-netbox-service` are unchanged (they still
unit-test the plumbing).

Assisted-by: Claude:claude-opus-4-8
netbox: bundle the netbox provider in the incus hosts/operator graphs
Some checks failed
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 13s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 13s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 19s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 21s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 25s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 35s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 23s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 24s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 19s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 40s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 45s
devShells-default / default (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 21s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 54s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 51s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 15s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 54s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 21s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 21s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 17s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 12s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 24s
nix-unit-lib-function / lib-function (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 17s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 16s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 23s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 15s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 16s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 14s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 22s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 13s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 8s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 14s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 14s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 13s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 21s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 24s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
Nix flake completeness check / _complete (pull_request) Successful in 2m12s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 10s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 8s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 10s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Failing after 3m34s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Failing after 3m39s
flake-show / flake-show (pull_request) Successful in 4m39s
checks-core-docs / core-docs (pull_request) Successful in 8m7s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m26s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m27s
checks-apps-api / apps-api (pull_request) Failing after 20m56s
checks-apps-panel / apps-panel (pull_request) Failing after 21m51s
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
84d3025d80
`netbox.tf` added an `e-breuninger/netbox` provider to the
`tf-incus/{hosts,operator}` graphs, but their `package.nix` `withPlugins`
lists still only carried `incus`/`null`/`external` (+`garage`/`vault` for
operator). So the `tf-repo` provider mirror those graphs build lacked the
netbox plugin, and `tofu init` fell back to the network registry --
`provider registry.opentofu.org/e-breuninger/netbox was not found in any
of the search locations` -- which the network-free sandbox cannot reach.

Add the `netbox` provider to both `withPlugins` lists (it is already the
pinned `e-breuninger/terraform-provider-netbox` v5.3.0 from
`common/providers.nix`, matching the `5.3.0` source address the `.tf`
files declare). This was the single root cause of the
`deployment-tf-incus-hosts`, `apps-tf-incus`, `integrations-spire-incus`,
`apps-api`, and `apps-panel` failures.

Assisted-by: Claude:claude-opus-4-8
netbox: configure the incus graphs' netbox provider so DHCP-only deploys plan (#833)
Some checks failed
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 14s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 14s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 14s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 22s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 22s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 25s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 34s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 22s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 25s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 45s
devShells-default / default (pull_request) Successful in 24s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 50s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 22s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 56s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 54s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 17s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 15s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 22s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 14s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 21s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 16s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 24s
nix-unit-lib-function / lib-function (pull_request) Successful in 23s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 24s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 15s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 17s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 16s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 13s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 22s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 15s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 12s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 9s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 10s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 24s
Nix flake completeness check / _complete (pull_request) Successful in 2m10s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 15s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 10s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m44s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m50s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m11s
checks-core-docs / core-docs (pull_request) Successful in 8m13s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m26s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m18s
checks-apps-api / apps-api (pull_request) Failing after 21m7s
checks-apps-panel / apps-panel (pull_request) Failing after 22m3s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 25m40s
checks-apps-tf / apps-tf (pull_request) Has been cancelled
573e2a0840
Round 1's provider-bundle fix let `tofu init` resolve `e-breuninger/netbox`,
but plan then failed `Missing required attribute` on the implicit netbox
provider in the `tf/incus/{hosts,operator}` graphs. The provider's `server_url`
and `api_token` are required HCL attributes with no env-var fallback when no
`provider "netbox"` block is present, so a DHCP-only deploy (`pkgs.hello`,
spire-incus -- `netbox_enabled = false`, all NetBox resources count-gated to
zero) had no way to satisfy them and errored before doing anything.

Add an explicit `provider "netbox"` block to both graphs, sourcing `server_url`
/`api_token` from new `netbox_server_url`/`netbox_api_token` variables that
default to an unreachable placeholder, with `skip_version_check = true` so the
provider does not contact that placeholder during configuration. A DHCP-only
deploy now plans cleanly (the provider is configured but, with no resources
referencing it, never used). A NetBox-enabled deploy overrides both variables
with the real instance URL/token, exported as `TF_VAR_netbox_server_url`/
`TF_VAR_netbox_api_token` alongside the existing `NETBOX_SERVER_URL`/
`NETBOX_API_TOKEN` the standalone seed effects read.

Assisted-by: Claude:claude-opus-4-8
netbox: gate in-graph allocation on a reachable NetBox URL, not just netbox_enabled (#833)
Some checks failed
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 16s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 15s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 15s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 14s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 21s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 28s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 29s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 36s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 30s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 19s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 24s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 24s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 51s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 49s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 20s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 17s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 23s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 58s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 15s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 1m1s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 1m2s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 15s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 18s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 17s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 14s
nix-unit-lib-function / lib-function (pull_request) Successful in 24s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 25s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 16s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 8s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 16s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 12s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 22s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 8s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 14s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 14s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 21s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 13s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 27s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
Nix flake completeness check / _complete (pull_request) Successful in 2m14s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 10s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m49s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m57s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m17s
checks-core-docs / core-docs (pull_request) Successful in 8m20s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m23s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m32s
checks-apps-api / apps-api (pull_request) Failing after 21m1s
checks-apps-panel / apps-panel (pull_request) Failing after 21m31s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 26m24s
checks-apps-tf / apps-tf (pull_request) Has been cancelled
282e8788bd
The operator deploy method always sets `netbox_enabled = true` (the operator
group's static config declares a NetBox cluster + prefix selector), but a
deploy only actually has a NetBox to reach when the deploy shell exports a real
`NETBOX_SERVER_URL` (-> `TF_VAR_netbox_server_url`). The `apps-api` /
`apps-panel` tests deploy the operator graph but stand up no NetBox, so the URL
stayed at its `http://netbox.invalid` placeholder while `netbox_enabled` was
still true. The graph's NetBox data sources fired against the placeholder and
the apply failed with `lookup netbox.invalid ... connection refused`.

Gate the allocation on a new `netbox_active` local (`netbox_enabled` AND a
non-placeholder `netbox_server_url`) instead of `netbox_enabled` alone, so a
NetBox-configured group deployed in an environment with no NetBox server falls
through to DHCP-only rather than contacting the placeholder. `apps-tf-incus`
(the only check that exports a real URL) is unaffected and still allocates.

Verified on the runner via `tofu console` against the gate: enabled+placeholder
-> active=false / 0 nodes; enabled+real-URL -> active=true / 1 node;
disabled -> active=false / 0 nodes. Both graphs `tofu validate` clean.

Assisted-by: Claude:claude-opus-4-8
netbox: count-gate data sources on length(...), not != {} (#833)
Some checks failed
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 12s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 14s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 18s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 20s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 21s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 25s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 36s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 22s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 20s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 18s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 40s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 15s
devShells-default / default (pull_request) Successful in 22s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 49s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 16s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 53s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 17s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 51s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 14s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 10s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 20s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 21s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 17s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 12s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 16s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 24s
nix-unit-lib-function / lib-function (pull_request) Successful in 23s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 24s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 16s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 17s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 20s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 15s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 12s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 42s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 14s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 11s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 19s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 10s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 23s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
Nix flake completeness check / _complete (pull_request) Successful in 2m11s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 10s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 11s
flake-show / flake-show (pull_request) Successful in 4m36s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m2s
checks-core-docs / core-docs (pull_request) Successful in 8m3s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m16s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m51s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m13s
checks-apps-api / apps-api (pull_request) Successful in 44m22s
checks-apps-panel / apps-panel (pull_request) Successful in 50m27s
checks-apps-tf / apps-tf (pull_request) Successful in 56m52s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 23m22s
9a282fb05f
`local.netbox_nodes` is map-typed (a `for`-comprehension result), so
OpenTofu's `!=` against the object-typed literal `{}` is ALWAYS true --
the two operands have different types. The three count-gated NetBox data
sources (`by_cidr`, `by_filter`, `cluster`) therefore fired on EVERY
deploy regardless of the gate, including DHCP-only deploys that left
`netbox_server_url` at its `http://netbox.invalid` placeholder. That is
why `apps-api`/`apps-panel` (operator graph, `netbox_enabled = true`, no
NetBox server) still hit `lookup netbox.invalid: connection refused`
after the `netbox_active` gate landed: `netbox_active` correctly
resolved false and `netbox_nodes` was correctly empty, but the
downstream `!= {}` comparison fired the data sources anyway.

Gate on `length(local.netbox_nodes) > 0` instead, which compares the
element count. Verified on the runner via `tofu console` against both
real graph bundles: `netbox_enabled=false` -> 0; `netbox_enabled=true` +
placeholder URL -> 0 (the `apps-api`/`apps-panel` case, previously 1);
`netbox_enabled=true` + real URL -> 1 (the `apps-tf-incus` case,
unchanged). Both graphs `tofu validate` clean.

Assisted-by: Claude:claude-opus-4-8
netbox: seed the prefix marker tag once via a store-tag effect (#833)
Some checks failed
checks-api-python-tests / api-python-tests (pull_request) Successful in 6s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 6s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 16s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 14s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 16s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 17s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 19s
checks-api-docs / api-docs (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 23s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 32s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 14s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 18s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 17s
devShells-default / default (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 18s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 48s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 14s
checks-api-http / api-http (pull_request) Successful in 57s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 15s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 20s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 19s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 17s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 37s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 18s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 43s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 22s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 14s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nix-unit-lib-function / lib-function (pull_request) Successful in 23s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 25s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 16s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 9s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 8s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 16s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 15s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 43s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 25s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 30s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 16s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 16s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 16s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 17s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 23s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 14s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 27s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 17s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 9s
Nix flake completeness check / _complete (pull_request) Successful in 2m13s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 10s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 10s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 10s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 10s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m47s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m24s
checks-core-docs / core-docs (pull_request) Successful in 8m17s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m30s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m33s
checks-apps-api / apps-api (pull_request) Successful in 44m21s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 4m50s
checks-apps-panel / apps-panel (pull_request) Successful in 50m43s
checks-apps-tf / apps-tf (pull_request) Successful in 56m16s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 23m24s
1e983f1dee
The `store-prefix` seed created its own `netbox_tag.marker` inline. Seeding
both a v4 and a v6 prefix then ran two `store-prefix` graphs, each with its own
TF state but pointing at the same NetBox, that both tried to create the same
`fediversity-operator` tag: the first won, the second hit
`[POST /extras/tags/][400] tag with this name already exists` and failed the
`apps-tf-incus` seed phase.

The marker tag is a single shared NetBox object, so make it a standalone
prerequisite -- a new `tf-netbox-store-tag` effect creates it once -- and have
`store-prefix` reference it via a `data.netbox_tag` lookup instead of creating
it. This mirrors how `cluster` references a separately seeded `cluster-type`.
The `apps-tf-incus` test seeds the tag ahead of both prefixes.

Assisted-by: Claude:claude-opus-4-8
netbox: derive prefix family from CIDR, not the absent family attribute
Some checks failed
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 16s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 14s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 22s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 25s
checks-api-docs / api-docs (pull_request) Successful in 23s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 28s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 34s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 29s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 29s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 7s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 15s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 25s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 41s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 16s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 48s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 15s
devShells-default / default (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 16s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 52s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 17s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 53s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 53s
checks-api-http / api-http (pull_request) Successful in 1m0s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 14s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 15s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 17s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 16s
nix-unit-lib-function / lib-function (pull_request) Successful in 22s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 13s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 22s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 11s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 21s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 12s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 11s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 25s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
Nix flake completeness check / _complete (pull_request) Successful in 2m11s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 8s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 12s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 8s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 9s
flake-show / flake-show (pull_request) Successful in 4m39s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m36s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m11s
checks-core-docs / core-docs (pull_request) Successful in 8m0s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m18s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m18s
checks-apps-tf-incus / apps-tf-incus (pull_request) Failing after 26m7s
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-apps-panel / apps-panel (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
9d9cb237c3
The deploy-phase allocation crashed with `Unsupported attribute` on
`p.family` (`netbox.tf` line 70) whenever the prefix selector used the
`tag`/`role`/`status` filter path. The singular `netbox_prefix` data source
(cidr selector) exposes a `family` attribute, but the plural `netbox_prefixes`
data source (the generic filter) does NOT -- its `prefixes` elements carry only
`prefix`/`id`/`status`/`tags`/`*_id`. The default `tag:fediversity-operator`
selector takes the filter path, so every real tag/role/status deploy hit the
missing attribute.

Derive the v4/v6 family from the `prefix` CIDR string instead (a `:` marks
IPv6). Both data sources expose `prefix`, so the derivation is uniform across
selector kinds. Verified against OpenTofu over the filter-shaped `prefixes`
list (id+prefix, no `family`): a v4+v6 pool resolves both prefix ids and
`has_v6 = true`; a v4-only pool leaves `netbox_v6_prefix_id` null and drops the
v6 allocation.

Assisted-by: Claude:claude-opus-4-8
netbox: seed the allocation prefix as non-pool so the network ID is skipped (#833)
All checks were successful
checks-api-python-tests / api-python-tests (pull_request) Successful in 9s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 8s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 18s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 18s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 26s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 27s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 28s
checks-api-docs / api-docs (pull_request) Successful in 26s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 40s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 34s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 33s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 21s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 9s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 19s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 47s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 18s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 53s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 8s
devShells-default / default (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 17s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 58s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 19s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 1m1s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 1m1s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 14s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 23s
checks-api-http / api-http (pull_request) Successful in 1m9s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 10s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 14s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 17s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 22s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 15s
nix-unit-lib-function / lib-function (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 15s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 15s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 15s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 19s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 10s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 13s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 21s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 15s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 11s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 25s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
Nix flake completeness check / _complete (pull_request) Successful in 2m17s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 8s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 8s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m47s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m53s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m19s
checks-core-docs / core-docs (pull_request) Successful in 8m14s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m23s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m24s
checks-apps-api / apps-api (pull_request) Successful in 44m10s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 45m39s
checks-apps-panel / apps-panel (pull_request) Successful in 49m35s
checks-apps-tf / apps-tf (pull_request) Successful in 53m57s
4a9fd31a76
The owner-provisioned prefix was seeded with `is_pool = true`. NetBox returns
the network and broadcast addresses as usable for a pool prefix, so the
in-graph `netbox_available_ip_address` allocation handed out the prefix's
network address (`192.168.10.232` for a `/29`, `fd00:10::` for a `/64`) as the
first free IP. NetBox then rejects assigning that network ID to an interface:
`... is a network ID, which may not be assigned to an interface`.

Leaving `is_pool` at its `false` default makes NetBox omit the network and
broadcast addresses (v4) and the subnet-router anycast `::` (v6) from the
available set, so the first address handed out is a valid host address
(`.233` / `fd00:10::1`).

Assisted-by: Claude:claude-opus-4-8
netbox: operator uses NetBox by default, URL derived from hosting-provider state (#833)
All checks were successful
checks-api-python-tests / api-python-tests (pull_request) Successful in 6s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 16s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 15s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 23s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 22s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 26s
checks-api-docs / api-docs (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 29s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 37s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 31s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 8s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 17s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 16s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 44s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 16s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 48s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 16s
devShells-default / default (pull_request) Successful in 21s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 55s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 18s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 54s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 14s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 56s
checks-api-http / api-http (pull_request) Successful in 1m5s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 14s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 21s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 17s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 16s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 23s
nix-unit-lib-function / lib-function (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 22s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 13s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 6s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 16s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 21s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 16s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 12s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 25s
Nix flake completeness check / _complete (pull_request) Successful in 2m11s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 15s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 8s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 8s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m39s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m44s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m6s
checks-core-docs / core-docs (pull_request) Successful in 8m18s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m19s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m18s
checks-apps-api / apps-api (pull_request) Successful in 43m26s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 45m29s
checks-apps-panel / apps-panel (pull_request) Successful in 49m33s
checks-apps-tf / apps-tf (pull_request) Successful in 53m21s
4e0a8cfc61
Make consuming the hosting provider's own NetBox the default behavior of an
operator deploy, with no enable flag. The operator graph already reads the
hosting-provider deploy's published `ipv4` outputs (to locate the shared
openbao/garage nodes); derive the NetBox URL from the same map
(`http://${ipv4["netbox"]}:8001`, the node's listen address). An explicit
`var.netbox_server_url` (a non-placeholder value) still wins, so pointing at an
EXTERNAL pre-existing NetBox needs only the url + token -- no enable flag either
way.

`netbox_enabled` is dropped from the operator graph: allocation now gates on a
URL having resolved (from state or the explicit var) AND a token being set
(`netbox_active`). This also resolves the first-deploy chicken-and-egg
gracefully: on the first deploy of a fresh hosting provider the netbox node does
not exist yet, so `ipv4["netbox"]` is absent, the derived URL is null, and the
deploy proceeds DHCP-only; a later redeploy (once netbox is up) resolves the
entry and allocates routed addresses, applied via NixOS networking on that
rebuild rather than at instance creation.

The `tf-incus-hosts` graph keeps its explicit `netbox_enabled` flag for now (it
has no remote-state to derive its own NetBox URL from); `mkIncusHostsEnvironment`
emits the flag only for that deployment type.

Assisted-by: Claude:claude-opus-4-8
Complete the default-on NetBox flow's credential half: the hosting-provider
deploy now provisions a NetBox API token and the operator deploy reads it back
from OpenBao KV, so an operator using the self-deployed NetBox needs no token
configured by hand (only an explicit external NetBox still takes a token).

HP side (`netbox.nix`): a `netbox-provision-token` oneshot runs after
`netbox.service`, mints a stable write-enabled token for a dedicated
`fediversity-operator` service account through `netbox-manage shell` (Django
ORM, no API auth), and publishes it base64-encoded to
`vars/secret/netbox/apiToken`. That path belongs to the `netbox` vars instance
the node already owns, so its existing per-instance OpenBao write grant covers
the upload with no extra policy. The token cannot ride the `generateFiles`
(`vars`) contract -- that generates at boot before NetBox's database is up -- so
the mint is a dedicated unit. It is idempotent (one token per service account),
so the key is stable across redeploys and the operator reads the same value.

Operator side (`main.tf`): on the default-on path (URL derived from HP state, no
explicit token) a count-gated `data.vault_kv_secret_v2` reads the published
token and `base64decode`s it; an explicit `var.netbox_api_token` (external
NetBox) still wins, and a first deploy (netbox absent) reads nothing and stays
DHCP-only. `netbox_active` and the provider's `api_token` now key on the
resolved `local.netbox_api_token`.

`ty.toml` scope-relaxes `unresolved-import` for the provisioning script, whose
`users.models` import resolves only in NetBox's runtime, matching the existing
Django-runtime gaps already relaxed there.

Assisted-by: Claude:claude-opus-4-8
Make the `tf-incus-hosts` graph use its self-deployed NetBox by default,
mirroring the operator graph: it reads its OWN published `all` state via
`terraform_remote_state` to learn the netbox/openbao node addresses (concrete
at plan time, unlike the in-graph `incus_instance` resources which are "known
after apply" and would leave the count-gated NetBox data sources unplannable).
The first apply (own state empty) resolves nothing and proceeds DHCP-only; a
redeploy resolves the entries and allocates routed addresses. Dropping the last
`netbox_enabled` flag, so an external pre-existing NetBox needs only a url +
token with no enable flag, matching the operator graph.

The self-read is backend-AGNOSTIC -- both `backend` and `config` come from
`self_state_backend`/`self_state_config` variables -- so the same mechanism
survives the fresh-provider bootstrap (#336/#882). The very first `all` apply
cannot write to the `terraform-backend` node it is itself bringing up, so it
settles for a `local` backend (state on the deployer's disk); the self-read
then points at that same local state (`backend = "local"`). Once state has
migrated to the deployed HTTP backend the deployer passes `backend = "http"`
instead, with no graph change. An empty `self_state_backend` disables
self-discovery (the `apps-api` / `apps-panel` tests, or an explicit external
NetBox).

Also fix a latent sensitivity bug in BOTH incus graphs: `local.netbox_api_token`
is derived from the sensitive `var.openbao_token` via the KV read, so the bare
`!= "unset"` gate in `netbox_active` was sensitive and tainted `netbox_nodes`,
which OpenTofu then rejects as a `for_each` argument on the default-on path.
Wrap the token-present check in `nonsensitive()` -- declassifying only the
boolean, never the token value (which stays sensitive where it is actually used
as the provider's `api_token`). The operator graph had the same latent issue
from its KV-token change; fixed here alongside.

Assisted-by: Claude:claude-opus-4-8
netbox: scope self-discovery to the all aggregate; document the test path (#833)
Some checks failed
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 13s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 13s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 22s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 23s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 27s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 34s
checks-api-docs / api-docs (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 30s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 30s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 16s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 8s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 49s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 17s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 9s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 19s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 55s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 57s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 15s
checks-api-http / api-http (pull_request) Successful in 1m3s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 23s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 16s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 15s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 15s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 23s
nix-unit-lib-function / lib-function (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 22s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 20s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 12s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 21s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 14s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 13s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 27s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 18s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 11s
Nix flake completeness check / _complete (pull_request) Successful in 2m11s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 8s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 8s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 8s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 8s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Failing after 3m22s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Failing after 3m22s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 9s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m40s
checks-core-docs / core-docs (pull_request) Successful in 8m2s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m15s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 10m3s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m20s
checks-apps-api / apps-api (pull_request) Failing after 21m25s
checks-apps-panel / apps-panel (pull_request) Failing after 21m38s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 45m37s
checks-apps-tf / apps-tf (pull_request) Successful in 53m39s
687c9c1213
The default-on NetBox self-discovery (a deploy reading its own published state
to find the self-deployed netbox/openbao node addresses) belongs only to the
`all` aggregate -- the deploy that actually brings those nodes up and whose
state carries their addresses. Disable it on the per-app `tf-incus-hosts` path:
a per-app deploy's state holds only that one app (no netbox entry), and on the
FIRST per-app apply the per-app state does not exist yet, so a self-read there
would make the `terraform_remote_state` data source error rather than fall
through to DHCP-only. A per-app deploy now relies on an explicit external NetBox
URL/token, or stays DHCP-only.

Document accordingly in the `apps-tf-incus` test, which drives the per-app
graphs (`all.pixelfed` / `all.garage`) with an explicit external NetBox URL +
token: that external path is unchanged and is what both a per-app deploy and a
pre-existing external NetBox use, needing only a url + token with no enable
flag. The default-on self-state + KV-token path lives in the `all` aggregate and
is not exercised by this per-app test.

Assisted-by: Claude:claude-opus-4-8
netbox: seed empty self-state so default-on self-read survives the first deploy (#833)
Some checks failed
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 10s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 12s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 20s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 22s
checks-api-docs / api-docs (pull_request) Successful in 23s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 27s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 36s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 30s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 30s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 27s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 8s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 17s
devShells-default / default (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 17s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 10s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 50s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 17s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 19s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 57s
checks-api-http / api-http (pull_request) Successful in 1m2s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 16s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 57s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 13s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 15s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 22s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 20s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 16s
nix-unit-lib-function / lib-function (pull_request) Successful in 22s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 15s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 8s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 15s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 20s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 11s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 14s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 12s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 26s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 2m10s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 8s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 8s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Failing after 3m21s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Failing after 3m27s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m41s
checks-core-docs / core-docs (pull_request) Successful in 8m5s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m22s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 9m49s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m14s
checks-apps-api / apps-api (pull_request) Failing after 21m22s
checks-apps-panel / apps-panel (pull_request) Failing after 21m34s
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
7ccffce789
The default-on NetBox self-discovery reads this deploy's OWN published state
(`data "terraform_remote_state" "self"`) to find its self-deployed
netbox/openbao node addresses. On the FIRST apply that state key has never been
written, and `terraform_remote_state` treats a missing state as a fatal error
(`No stored state was found ...`) for BOTH the `http` and `local` backends --
there is no "tolerate missing" flag. A deploy reading its own state key is
circular: the key this apply writes does not exist until after the first apply.

This broke every fresh incus-hosts deploy: `deployment-tf-incus-hosts`,
`integrations-spire-incus`, and (via `operator-tf-incus-all`) `apps-api` /
`apps-panel`.

Seed a valid empty state (outputs `{}`) at the self-state location before any
state-touching `tofu` verb runs, so the self-read succeeds-as-empty and the
graph falls through to DHCP-only on the first deploy (`try(..., {})` in
`main.tf`), picking up the real addresses on redeploys once the apply has
published them. The seed is idempotent -- it only writes when no state exists
yet, so a populated state is never clobbered, and the following apply overwrites
the seeded-empty state regardless.

`seed-self-state.sh` is backend-agnostic to match the self-read: it POSTs the
empty doc to the `http` state address (nimbolus backend) in steady state, or
writes the file for a `local` backend during the fresh-provider bootstrap
(#336/#882). It reads the same `TF_VAR_self_state_*` the self-read uses, so a
deployer's bootstrap `local` override is honored too.

The self-read is a `data` source evaluated by every plan/refresh, not just
`apply`, so the seed fronts every state-touching verb (`run`/`apply`/`plan`/
`refresh`/`destroy`) via a new `preRun` hook + `seedState` flag in `tfRun`. The
pure-inspection verbs (`output`/`show`/`validate`/`state-*`) do not refresh, so
they skip it and stay side-effect free. Effects that set no `preRun` (ssh,
tf-hosts) are unchanged.

Assisted-by: Claude:claude-opus-4-8
netbox: seed self-state via the backend's LOCK/POST/UNLOCK protocol (#833)
All checks were successful
checks-api-python-tests / api-python-tests (pull_request) Successful in 8s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 8s
checks-contracts-postgresql-rotation / contracts-postgresql-rotation (pull_request) Successful in 18s
checks-contracts-postgresql / contracts-postgresql (pull_request) Successful in 17s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 26s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 28s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 31s
checks-api-docs / api-docs (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 31s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 40s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 33s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 9s
checks-test-ldap-engine / test-ldap-engine (pull_request) Successful in 16s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-bind / hosting-provider-bind (pull_request) Successful in 19s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 49s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 16s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 19s
devShells-default / default (pull_request) Successful in 22s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 54s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 1m0s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 58s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 14s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 1m1s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 19s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
checks-api-http / api-http (pull_request) Successful in 1m10s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 16s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 15s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-postgresql / hosting-provider-postgresql (pull_request) Successful in 22s
nix-unit-lib-function / lib-function (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 16s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 16s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 13s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 8s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 12s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 20s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 16s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 8s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 15s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 21s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 12s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 11s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 25s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
Nix flake completeness check / _complete (pull_request) Successful in 2m18s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 8s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 8s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 8s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 6s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 9s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m47s
checks-integrations-spire-incus / integrations-spire-incus (pull_request) Successful in 5m50s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 6m17s
checks-core-docs / core-docs (pull_request) Successful in 8m16s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m24s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m24s
checks-apps-api / apps-api (pull_request) Successful in 44m6s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 46m11s
checks-apps-panel / apps-panel (pull_request) Successful in 50m16s
checks-apps-tf / apps-tf (pull_request) Successful in 54m27s
ce66271b32
The first cut of the empty-self-state seed POSTed the state document straight
to the `terraform-backend` state address. The nimbolus backend guards every
write with a lock: a bare POST is rejected `400` ("attempting to write state
with wrong lock") unless its `?ID=<lock-id>` matches a lock the caller
currently holds. That `400` is what made the first apply fail with
`curl: (22) ... 400` -- the seed aborted before `tofu` ever ran, so the
default-on self-read never got its empty state.

Mirror what OpenTofu itself does instead: `LOCK`, `POST` with that lock ID,
then `UNLOCK` (via an `EXIT` trap so a failed POST cannot strand the state
locked). `basic` auth hashes the password into the state ID, so the seed keeps
using the `username`/`password` from `self_state_config` -- the same creds the
self-read uses -- for the seeded key to line up with where the deploy reads.

Also stop passing `--fail` to the existence GET: a never-written state returns
`404`, which `--fail` would turn into curl exit 22; capture the code without it.

Verified end-to-end against a live `terraform-backend`: seeds an empty backend
(GET then reads 200), is idempotent on a populated one (no clobber of a real
`ipv4` output), leaves the backend writable for a subsequent real apply, and
no-ops when `self_state_backend` is empty.

Assisted-by: Claude:claude-opus-4-8
kiara changed title from WIP: netbox: operator TF effect consumes the allocated v4+v6 IP (#833) to netbox: operator TF effect consumes the allocated v4+v6 IP (#833) 2026-07-01 13:05:26 +02:00
kiara merged commit fa59bfe2be into main 2026-07-01 13:05:52 +02:00
kiara deleted branch operator-netbox 2026-07-01 13:05:53 +02:00
Sign in to join this conversation.
No reviewers
fediversity/developers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
fediversity/fediversity!1150
No description provided.