@@ -163,6 +163,25 @@ Templates writers should use the common variables to ensure consistency across p
163
163
Additionally, value of the command argument to `clusterctl config cluster <cluster-name>` (`<cluster-name>` in this case), will
164
164
be applied to every occurrence of the `${ CLUSTER_NAME }` variable.
165
165
166
+ # # OwnerReferences chain
167
+
168
+ Each provider is responsible to ensure that all the providers resources (like e.g. `VSphereCluster`, `VSphereMachine`, `VSphereVM` etc.
169
+ for the `vsphere` provider) MUST have a `Metadata.OwnerReferences` entry that links directly or indirectly to a `Cluster` object.
170
+
171
+ Please note that all the provider specific resources that are referenced by the Cluster API core objects will get the `OwnerReference`
172
+ sets by the Cluster API core controllers, e.g. :
173
+
174
+ - The Cluster controller ensures that all the objects reference in `Cluster.Spec.InfrastructureRef` get an `OwnerReference`
175
+ that links directly to the corresponding `Cluster`.
176
+ - The Machine controller ensures that all the objects reference in `Machine.Spec.InfrastructureRef` get an `OwnerReference`
177
+ that links to the corresponding `Machine`, and the `Machine` is linked to the `Cluster` through its own `OwnerReference` chain.
178
+
179
+ That means that, practically speaking, the provider implementers are responsibility is to ensure that the `OwnerReference`
180
+ is set only for objects that are not directly referenced by Cluster API core objects, e.g. :
181
+
182
+ - All the `VSphereVM` should get an `OwnerReference` that links to the corresponding `VSphereMachine`, and the `VSphereMachine`
183
+ is linked to the `Cluster` through its own `OwnerReference` chain.
184
+
166
185
# # Additional notes
167
186
168
187
# ## Components YAML transformations
@@ -199,10 +218,25 @@ If, for any reason, the provider authors/YAML designers decide not to comply wit
199
218
The provider authors/YAML designers should be aware that it is their responsibility to ensure the proper
200
219
functioning of all the `clusterctl` features both in single tenancy or multi-tenancy scenarios and/or document known limitations.
201
220
202
- # ## Move constraints
221
+ # ## Move
203
222
204
- WIP
223
+ Provider authors should be aware that `clusterctl move` command implement a discovery mechanism that considers :
224
+
225
+ * All the objects of Kind defined in one of the CRDs installed by clusterctl using `clusterctl init`.
226
+ * `Serets` and `ConfigMaps` objects.
227
+ * the `OwnerReference` chain of the above objects.
228
+
229
+ `clusterctl move` does NOT consider any objects :
205
230
231
+ * Not included in the set of objects defined above.
232
+ * Included in the set of objects defined above, but not directly or indirectly to a `Cluster` object through the `OwnerReference` chain.
233
+
234
+ If moving some of excluded object is required, the provider authors should create documentation describing the
235
+ the exact move sequence to be executed by the user.
236
+
237
+ Additionally, provider authors should be aware that `clusterctl move` assumes all the provider's Controllers respect the
238
+ ` Cluster.Spec.Paused` field introduced in the v1alpha3 Cluster API specification.
239
+
206
240
# ## Adopt
207
241
208
242
WIP
0 commit comments