@@ -55,8 +55,10 @@ 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 | |
61+ | [ Infrastructure provider watching for bootstrap changes] | No | |
6062| [ Support for running multiple instances] | No | Mandatory for clusterctl CLI support |
6163| [ Clusterctl support] | No | Mandatory for clusterctl CLI support |
6264| [ BootstrapConfig: pausing] | No | |
@@ -420,6 +422,33 @@ validation behavior for all other cases.
420422
421423See [ the DockerMachineTemplate webhook] as a reference for a compatible implementation.
422424
425+ ### ClusterClass topology controller behavior for MachinePools
426+
427+ When using ClusterClass and managed topologies with MachinePools, the topology controller creates BootstrapConfig objects
428+ from BootstrapConfigTemplates. Unlike templates (which are immutable), these BootstrapConfig objects have mutable specs,
429+ but the topology controller handles spec changes through a ** rotation strategy** rather than in-place updates.
430+
431+ When the topology controller detects that the BootstrapConfigTemplate has changed (e.g., from template updates
432+ in ClusterClass), it performs a ** rotation** :
433+
434+ 1 . Creates a new BootstrapConfig object with a new name
435+ 2 . Updates the MachinePool's ` spec.template.spec.bootstrap.configRef ` to reference the new object
436+ 3 . The old BootstrapConfig is garbage collected when no longer referenced
437+
438+ <aside class =" note " >
439+
440+ <h1 >Provider expectations for rotation</h1 >
441+
442+ Bootstrap providers SHOULD be aware that when used with MachinePools, the BootstrapConfig object may be rotated
443+ (replaced with a new object) rather than updated in-place when spec changes occur.
444+
445+ </aside >
446+
447+ Metadata-only changes (labels, annotations) MUST NOT trigger rotation; they are patched in-place on the existing object.
448+
449+ Note: This rotation behavior is specific to MachinePools. For individual Machines (e.g., in MachineDeployments), BootstrapConfig
450+ objects are created per-Machine and follow the standard Machine lifecycle.
451+
423452### Sentinel file
424453
425454A bootstrap provider's bootstrap data must create ` /run/cluster-api/bootstrap-success.complete `
@@ -433,6 +462,13 @@ This taint is used to prevent workloads to be scheduled on Nodes before the node
433462As of today the Node initialization consists of syncing labels from Machines to Nodes. Once the labels have been
434463initially synced the taint is removed from the Node.
435464
465+ ### Infrastructure provider watching for bootstrap changes
466+
467+ Infrastructure providers watching for bootstrap changes SHOULD monitor the MachinePool's ` spec.template.spec.bootstrap.configRef.name `
468+ field. When the reference name changes, this indicates a rotation has occurred and may require triggering a node rollout.
469+
470+ This pattern is consistent with how MachineDeployments handle BootstrapTemplate rotations.
471+
436472### Support for running multiple instances
437473
438474Cluster API does not support running multiples instances of the same provider, which someone can
@@ -502,8 +538,10 @@ The following diagram shows the typical logic for a bootstrap provider:
502538[ BootstrapConfig: terminal failures ] : #bootstrapconfig-terminal-failures
503539[ BootstrapConfigTemplate, BootstrapConfigTemplateList resource definition ] : #bootstrapconfigtemplate-bootstrapconfigtemplatelist-resource-definition
504540[ BootstrapConfigTemplate: support for SSA dry run ] : #bootstrapconfigtemplate-support-for-ssa-dry-run
541+ [ ClusterClass topology controller behavior for MachinePools ] : #clusterclass-topology-controller-behavior-for-machinepools
505542[ Sentinel file ] : #sentinel-file
506543[ Taint Nodes at creation ] : #taint-nodes-at-creation
544+ [ Infrastructure provider watching for bootstrap changes ] : #infrastructure-provider-watching-for-bootstrap-changes
507545[ Support for running multiple instances ] : #support-for-running-multiple-instances
508546[ Support running multiple instances of the same provider ] : ../../core/support-multiple-instances.md
509547[ Clusterctl support ] : #clusterctl-support
0 commit comments