@@ -18,8 +18,8 @@ Assisted Installer `Agent` objects can appear.
1818 needed.
1919- Optionally approves matching Assisted Installer ` Agent ` objects.
2020- Deletes only owned VMs and stale unbound Agents when scale-down is allowed.
21- - Supports dry-run mode, status conditions, planned actions, and Kubernetes
22- Events for operational visibility.
21+ - Reports status conditions, planned actions, and Kubernetes Events for
22+ operational visibility.
2323
2424## Current Scope
2525
@@ -49,7 +49,7 @@ flowchart TD
4949 reconcile --> fresh["Read latest VsphereAgentPool\nthrough uncached API reader"]
5050 fresh --> discover["Resolve inputs\nAgentMachines, Machines, InfraEnv, matching Agents, owned/adopted VMs"]
5151 discover --> refresh["Refresh ownedVMs status\nProvisioning, Available, Bound, Released"]
52- refresh --> plan["Build plan\nAgentMachine count, waiting demand, buffer, available Agents, provisioning VMs"]
52+ refresh --> plan["Build plan\nAgentMachine count, waiting demand, available Agents, provisioning VMs"]
5353
5454 plan -->|deficit| iso["Ensure content-addressed ISO cache\nDownload, hash, upload if changed"]
5555 iso --> create["Create vSphere VM\nfolder, datastore cluster, network, CPU, memory, disk, ISO"]
@@ -73,7 +73,7 @@ flowchart TD
7373
7474 plan -->|surplus available owned Agent| surplus{"Any AgentMachine\nstill without an Agent?"}
7575 surplus -->|yes| wait
76- surplus -->|no| deletefree["Delete extra unbound VM and Agent\nrespect bufferAgents "]
76+ surplus -->|no| deletefree["Delete extra unbound VM and Agent"]
7777 deletefree --> agents
7878
7979 plan -->|no changes| noop["Noop\nstatus and conditions only"]
@@ -91,15 +91,16 @@ At the beginning of each reconcile, the controller reads the
9191based on the latest recorded ` ownedVMs ` status instead of stale informer state.
9292
9393Scale-up is demand driven. The controller counts ` AgentMachine ` objects for the
94- NodePool that report ` Ready=False ` with ` Reason=NoSuitableAgents ` , adds
95- ` spec.scaling.bufferAgents ` , subtracts available matching Agents and
96- already-provisioning owned VMs, then creates at most
97- ` spec.scaling.maxProvisioning ` VMs per reconcile. Each VM boots the active
98- InfraEnv ISO. The controller records the vSphere BIOS UUID, instance UUID, and
99- primary MAC address immediately after VM creation. When the Agent appears, it is
100- matched to the owned VM by BIOS UUID or MAC before any hostname fallback. The
101- controller then applies the configured labels, role, approval, and VM-name
102- hostname so the Agent CAPI provider can bind it to a Machine.
94+ NodePool that report ` Ready=False ` with ` Reason=NoSuitableAgents ` , subtracts
95+ available matching Agents and already-provisioning owned VMs, and records the
96+ remaining demand in status. The AgentMachine controller creates a
97+ ` VsphereAgent ` for each waiting AgentMachine; each ` VsphereAgent ` then creates a
98+ vSphere VM that boots the active InfraEnv ISO. The controller records the
99+ vSphere BIOS UUID, instance UUID, and primary MAC address immediately after VM
100+ creation. When the Agent appears, it is matched to the owned VM by BIOS UUID or
101+ MAC before any hostname fallback. The controller then applies the configured
102+ labels, role, approval, and VM-name hostname so the Agent CAPI provider can bind
103+ it to a Machine.
103104
104105Existing clusters are adopted through Agents. If a matching Agent already
105106exists, the controller records it in ` status.ownedVMs ` using the Agent hostname,
@@ -123,15 +124,15 @@ stale Agent can still be removed.
123124Install the latest release manifests:
124125
125126``` sh
126- kubectl apply -f https://github.com/containeroo/agent-forge-operator/releases/download/v0.0.11 /crds.yaml
127- kubectl apply -k github.com/containeroo/agent-forge-operator//config/default? ref=v0.0.11
127+ kubectl apply -f https://github.com/containeroo/agent-forge-operator/releases/download/v0.0.12 /crds.yaml
128+ kubectl apply -k github.com/containeroo/agent-forge-operator//config/default? ref=v0.0.12
128129```
129130
130131The published manager images are:
131132
132133``` text
133- ghcr.io/containeroo/agent-forge-operator:v0.0.11
134- containeroo/agent-forge-operator:v0.0.11
134+ ghcr.io/containeroo/agent-forge-operator:v0.0.12
135+ containeroo/agent-forge-operator:v0.0.12
135136```
136137
137138For a local image build:
@@ -144,8 +145,8 @@ make deploy IMG=<registry>/agent-forge-operator:<tag>
144145## Getting Started
145146
146147Start with [ docs/getting-started.md] ( docs/getting-started.md ) . It covers the
147- required cluster objects, vSphere Secret, a dry-run ` VsphereAgentPool ` , status
148- inspection, and switching from dry-run to active reconciliation.
148+ required cluster objects, vSphere Secret, ` VsphereAgentPool ` , status
149+ inspection, and active VM reconciliation.
149150
150151For the complete CRD field contract and status model, see
151152[ docs/vsphereagentpool-crd.md] ( docs/vsphereagentpool-crd.md ) .
@@ -159,7 +160,6 @@ metadata:
159160 name : demo-worker
160161 namespace : demo
161162spec :
162- dryRun : true
163163 hostedClusterRef :
164164 name : demo
165165 nodePoolRef :
@@ -188,10 +188,6 @@ spec:
188188 agentclusterinstalls.extensions.hive.openshift.io/location : lab-a
189189 customer : example
190190 hypershift.openshift.io/nodepool-role : worker
191- scaling :
192- bufferAgents : 0
193- maxProvisioning : 3
194- deletePolicy : OwnedOnly
195191 iso :
196192 checkInterval : 10m
197193 retainVersions : 2
@@ -240,8 +236,8 @@ The controller uses `govc` for vSphere operations. The container image includes
240236Releases are built by GoReleaser from pushed tags :
241237
242238` ` ` sh
243- git tag v0.0.11
244- git push origin v0.0.11
239+ git tag v0.0.12
240+ git push origin v0.0.12
245241` ` `
246242
247243The release workflow publishes multi-architecture images to GHCR and DockerHub
0 commit comments