@@ -55,6 +55,7 @@ repo or add an item to the agenda in the [Cluster API community meeting](https:/
5555| [ BootstrapConfig: terminal failures] | No | |
5656| [ BootstrapConfigTemplate, BootstrapConfigTemplateList resource definition] | Yes | |
5757| [ BootstrapConfigTemplate: support for SSA dry run] | No | Mandatory for ClusterClasses support |
58+ | [ ClusterClass topology controller behavior for MachinePools] | No | Mandatory for ClusterClasses support |
5859| [ Sentinel file] | No | |
5960| [ Taint Nodes at creation] | No | |
6061| [ Support for running multiple instances] | No | Mandatory for clusterctl CLI support |
@@ -420,6 +421,38 @@ validation behavior for all other cases.
420421
421422See [ the DockerMachineTemplate webhook] as a reference for a compatible implementation.
422423
424+ ### ClusterClass topology controller behavior for MachinePools
425+
426+ When using ClusterClass and managed topologies with MachinePools, the topology controller creates BootstrapConfig objects
427+ from BootstrapConfigTemplates. Unlike templates (which are immutable), these BootstrapConfig objects are treated as
428+ ** effectively immutable for spec changes** .
429+
430+ When the topology controller detects spec changes to a BootstrapConfig used by a MachinePool (e.g., from template updates
431+ in ClusterClass), it performs a ** rotation** :
432+
433+ 1 . Creates a new BootstrapConfig object with a new name
434+ 2 . Updates the MachinePool's ` spec.template.spec.bootstrap.configRef ` to reference the new object
435+ 3 . The old BootstrapConfig is garbage collected when no longer referenced
436+
437+ <aside class =" note " >
438+
439+ <h1 >Provider expectations for rotation</h1 >
440+
441+ Bootstrap providers SHOULD be aware that when used with MachinePools, the BootstrapConfig object may be rotated
442+ (replaced with a new object) rather than updated in-place when spec changes occur.
443+
444+ Infrastructure providers watching for bootstrap changes should monitor the MachinePool's ` spec.template.spec.bootstrap.configRef.name `
445+ field. When the reference name changes, this indicates a rotation has occurred and may require triggering a node rollout.
446+
447+ This pattern is consistent with how MachineDeployments handle BootstrapTemplate rotations.
448+
449+ </aside >
450+
451+ Note: Metadata-only changes (labels, annotations) do NOT trigger rotation; they are patched in-place on the existing object.
452+
453+ Note: This rotation behavior is specific to MachinePools. For individual Machines (e.g., in MachineDeployments), BootstrapConfig
454+ objects are created per-Machine and follow the standard Machine lifecycle.
455+
423456### Sentinel file
424457
425458A bootstrap provider's bootstrap data must create ` /run/cluster-api/bootstrap-success.complete `
@@ -502,6 +535,7 @@ The following diagram shows the typical logic for a bootstrap provider:
502535[ BootstrapConfig: terminal failures ] : #bootstrapconfig-terminal-failures
503536[ BootstrapConfigTemplate, BootstrapConfigTemplateList resource definition ] : #bootstrapconfigtemplate-bootstrapconfigtemplatelist-resource-definition
504537[ BootstrapConfigTemplate: support for SSA dry run ] : #bootstrapconfigtemplate-support-for-ssa-dry-run
538+ [ ClusterClass topology controller behavior for MachinePools ] : #clusterclass-topology-controller-behavior-for-machinepools
505539[ Sentinel file ] : #sentinel-file
506540[ Taint Nodes at creation ] : #taint-nodes-at-creation
507541[ Support for running multiple instances ] : #support-for-running-multiple-instances
0 commit comments