Walkthrough
This walkthrough assumes both member labs have been deployed on your local manifold-lab minikube cluster and that kubectl is on your PATH. See Objectives for the one-time environment setup.
Wrangler here is a topology and fleet authoring layer, not a runtime. Applying the fleet ConfigMap does not start Picos, does not create Channels, and does not reconcile desired state — the two underlying labs’ own manifests remain the runtime path. This lab teaches how declarative multi-Pico topology and lifecycle intent are described above the runtime.
Step 2 — Apply the fleet ConfigMap onto the RuntimeEnvironment
The Wrangler fleet is applied to the cluster as a ConfigMap so the declared truth is reachable inside the same manifold namespace the two member labs use:
kubectl apply -f labs/hello-pico-fleet-wrangler/downloads/fleet-configmap.yamlExpected kubectl output:
configmap/hello-pico-fleet created
Applying the ConfigMap does not restart or replace the two member labs’ runtime manifests — it only records the fleet description on the cluster.
Step 3 — Read the fleet back from the cluster
Read the fleet spec back and confirm it matches the authored fragment:
kubectl -n manifold get configmap hello-pico-fleet -o yamlThe embedded data.fleet.yaml block must contain the same apiVersion, kind, metadata.name, spec.topologies, spec.picos, spec.bindings, and spec.lifecycle values you reviewed in Step 1. Nothing else on the cluster changes.
Step 4 — Run the shipped shape verification
From the lab’s downloads/ directory:
cd labs/hello-pico-fleet-wrangler/downloads
bash verify.shverify.sh runs offline (it does not touch Kubernetes) and confirms:
fleet.yamlandfleet-configmap.yamlparse as YAML.- The fleet targets
runtimeEnvironment: manifold-on-kubernetes. - Every member topology references an existing
wrangler.oe.academy/v1alpha1InteractionTopologyfragment under one of the two member labs. - Every declared binding references a Channel that the referenced InteractionTopology already declares — no invented Channels.
- A fleet-level
lifecycle.desiredState: deployedis present. - The ConfigMap carrier embeds the same fleet spec as
fleet.yaml(spec-compared; falls back to a lighter textual check withoutPyYAML).
Expected last line:
verify: OK — Wrangler fleet is layered honestly over the approved runtime
Step 5 — Capture the produced artifact
Capture the authored fragment, the applied ConfigMap manifest, and the on-cluster read-back into a hello-pico-fleet/ directory:
mkdir -p build/hello-pico-fleet
cp labs/hello-pico-fleet-wrangler/downloads/fleet.yaml \
labs/hello-pico-fleet-wrangler/downloads/fleet-configmap.yaml \
build/hello-pico-fleet/
kubectl -n manifold get configmap hello-pico-fleet -o yaml \
> build/hello-pico-fleet/fleet-configmap.applied.yamlStep 6 — Cleanup
Remove the fleet ConfigMap from the cluster and the local capture directory:
kubectl -n manifold delete configmap hello-pico-fleet --ignore-not-found
rm -rf build/hello-pico-fleetThe two member labs’ own runtime manifests are unaffected by this cleanup — they follow their own cleanup steps.
Troubleshooting
- If
kubectl applyfails because themanifoldnamespace does not exist, deploy at least one member lab first — both labs create themanifoldnamespace as part of their own Step 1. - If
verify.shfails at the “ConfigMap embedded fleet spec does not match authored fleet.yaml” step, you have edited only one of the two files. Keepfleet.yamland thedata.fleet.yamlblock insidefleet-configmap.yamlin sync — they are two views of the same authored spec. - If a binding names a Channel the referenced InteractionTopology does not declare,
verify.shfails. Fleet bindings only surface Channels that already exist on the underlying topologies; they do not invent new ones.
Next
Compare your work against the reference solution.