refactor: rebrand iot → fleet, operator/agent crates → harmony-fleet-* #276
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/iot-rebrand"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The IoT vocabulary was anchoring the codebase to one customer's
domain. The reconciler pattern is generic — operator in k8s, NATS
KV as desired-state bus, agents reconciling podman / OKD / KVM /
anything that can register. "Fleet" captures that neutrally; IoT
stays acknowledged in docs as the first customer use case.
Done now, while nothing is deployed. After a partner fleet lands,
changing the CRD group alone is a multi-quarter migration.
Scope (nothing left over):
Paths + crates
Cargo.toml already tracks version)
Rust identifiers
check_iot_smoke_preflight_for_arch → fleet-prefixed variants
Wire / config surfaces
iot.nationtech.io→fleet.nationtech.ioiot.nationtech.io/finalizer→fleet.nationtech.io/finalizeriot-agent→fleet-agentiot-admin→fleet-adminDefaults
localhost/harmony-fleet-operator:latest
(cloud-images, ssh keypairs, libvirt pool)
What stayed
DeploymentName) — already neutral
desired-state) — already neutral
framework-scope, unchanged
Verification
(7), harmony-reconciler-contracts (13): green
fleet/scripts/load-test.sh): PASS. Image built as
localhost/harmony-fleet-operator:latest, chart installed as
release harmony-fleet-operator in namespace fleet-system,
all CR aggregates correct.
Zero stragglers: grep across the tree for \biot\b / IOT_ /
\bIot[A-Z] returns empty (excluding docs explicitly talking about
IoT as the first customer's domain).
The IoT vocabulary was anchoring the codebase to one customer's domain. The reconciler pattern is generic — operator in k8s, NATS KV as desired-state bus, agents reconciling podman / OKD / KVM / anything that can register. "Fleet" captures that neutrally; IoT stays acknowledged in docs as the first customer use case. Done now, while nothing is deployed. After a partner fleet lands, changing the CRD group alone is a multi-quarter migration. Scope (nothing left over): Paths + crates - iot/ → fleet/ - iot/iot-operator-v0 → fleet/harmony-fleet-operator - iot/iot-agent-v0 → fleet/harmony-fleet-agent - harmony/src/modules/iot → harmony/src/modules/fleet - ROADMAP/iot_platform → ROADMAP/fleet_platform - examples/iot_{vm_setup, load_test, nats_install} → examples/fleet_* - -v0 suffix dropped on the operator + agent crates (semver in Cargo.toml already tracks version) Rust identifiers - enum IotScore (podman score payload) → ReconcileScore - struct IotDeviceSetupScore/Config → FleetDeviceSetupScore/Config - InterpretName::IotDeviceSetup → InterpretName::FleetDeviceSetup - HarmonyIotPool → HarmonyFleetPool (libvirt pool) - HARMONY_IOT_POOL_NAME (default "harmony-iot") → HARMONY_FLEET_POOL_NAME ("harmony-fleet") - IotSshKeypair → FleetSshKeypair - ensure_iot_ssh_keypair / ensure_harmony_iot_pool / check_iot_smoke_preflight_for_arch → fleet-prefixed variants Wire / config surfaces - CRD group `iot.nationtech.io` → `fleet.nationtech.io` - Finalizer `iot.nationtech.io/finalizer` → `fleet.nationtech.io/finalizer` - Shortnames iotdep/iotdevice → fleetdep/fleetdev - Env var IOT_AGENT_CONFIG → FLEET_AGENT_CONFIG - Env var IOT_VM_ADMIN_PASSWORD → FLEET_VM_ADMIN_PASSWORD - Binary /usr/local/bin/iot-agent → /usr/local/bin/fleet-agent - Systemd user `iot-agent` → `fleet-agent` - VM admin user `iot-admin` → `fleet-admin` Defaults - Namespaces iot-system/iot-demo/iot-load → fleet-system/fleet-demo/fleet-load - Helm release iot-nats → fleet-nats - Helm release iot-operator-v0 → harmony-fleet-operator - Container image localhost/iot-operator-v0:latest → localhost/harmony-fleet-operator:latest - On-disk cache $HARMONY_DATA_DIR/iot/ → $HARMONY_DATA_DIR/fleet/ (cloud-images, ssh keypairs, libvirt pool) What stayed - harmony-reconciler-contracts — already neutrally named - Wire types (DeviceInfo, DeploymentState, HeartbeatPayload, DeploymentName) — already neutral - KV buckets (device-info, device-state, device-heartbeat, desired-state) — already neutral - CRD kind names (Deployment, Device) — already neutral - NatsBasicScore / NatsHelmChartScore / HelmChart / etc. — framework-scope, unchanged Verification - cargo check --workspace --all-targets: clean - All harmony lib tests (114), fleet-operator (6), fleet-agent (7), harmony-reconciler-contracts (13): green - End-to-end load-test (20 devices / 3 CRs / 20s under fleet/scripts/load-test.sh): PASS. Image built as localhost/harmony-fleet-operator:latest, chart installed as release harmony-fleet-operator in namespace fleet-system, all CR aggregates correct. Zero stragglers: grep across the tree for \biot\b / IOT_ / \bIot[A-Z] returns empty (excluding docs explicitly talking about IoT as the first customer's domain).● All three deliverables done
feat/iot-helm — 3 new commits on top of the existing PR
┌──────────┬────────────────────────────────────────────────────────────────────────────┐
│ SHA │ Commit │
├──────────┼────────────────────────────────────────────────────────────────────────────┤
│
a616204b│ NATS primitive extract (original, now superseded by…) │├──────────┼────────────────────────────────────────────────────────────────────────────┤
│
4254a209│ refactor(nats): share the helm-chart primitive across all NATS scores │├──────────┼────────────────────────────────────────────────────────────────────────────┤
│
61cdb9c3│ refactor(examples): rename iot_apply_deployment → harmony_apply_deployment │└──────────┴────────────────────────────────────────────────────────────────────────────┘
The NATS refactor correctly addresses your review: deleted node.rs (279 lines of reinvented-NATS parallel universe), introduced NatsHelmChartScore that pins the upstream
nats/nats chart + repo, rewrote NatsBasicScore as a minimal single-node values-yaml preset, pointed NatsK8sScore (supercluster) at the same wrapper. Two presets, one
primitive. K8sBareTopology grew an impl HelmCommand so the in-cluster NATS install path still compiles. 12 NATS unit tests green. End-to-end load-test.sh at 20 devices: PASS.
feat/iot-rebrand — 1 rebrand commit on top of feat/iot-helm
One atomic commit. 57 files, +499/−479 lines — mostly renames. Summary of moves:
all the ensure_iot_* / check_iot_* / InterpretName::IotDeviceSetup follow
/usr/local/bin/iot-agent → fleet-agent, systemd user iot-agent → fleet-agent, VM admin iot-admin → fleet-admin
$HARMONY_DATA_DIR/iot/ → fleet/
What stayed unchanged (already domain-neutral):
Verification
fleet-system, aggregates correct
Branch layout now
master
└── feat/iot-helm (this is what your PR review is on)
└── feat/iot-rebrand (1 atomic commit on top)
Push when you want to publish either. The rebrand commit is structured as one atomic change so it's readable end-to-end and revertable as a unit — any piece of the rename
that turns out wrong is one git revert away.