# Functions
ClusterClassesAreCompatible checks the compatibility between new and old versions of a Cluster Class.
ClusterClassReferencesAreValid checks that each template reference in the ClusterClass is valid .
IsMachineDeploymentUpgrading determines if the MachineDeployment is upgrading.
IsMachinePoolUpgrading determines if the MachinePool is upgrading.
LocalObjectTemplateIsValid ensures the template is in the correct namespace, has no nil references, and has a valid Kind and GroupVersion.
LocalObjectTemplatesAreCompatible checks if two referenced objects are compatible, meaning that they are of the same GroupKind and in the same namespace.
MachineDeploymentClassesAreCompatible checks if each MachineDeploymentClass in the new ClusterClass is a compatible change from the previous ClusterClass.
MachineDeploymentClassesAreUnique checks that no two MachineDeploymentClasses in a ClusterClass share a name.
MachineDeploymentTopologiesAreValidAndDefinedInClusterClass checks that each MachineDeploymentTopology name is not empty and unique, and each class in use is defined in ClusterClass.spec.Workers.MachineDeployments.
MachinePoolClassesAreCompatible checks if each MachinePoolClass in the new ClusterClass is a compatible change from the previous ClusterClass.
MachinePoolClassesAreUnique checks that no two MachinePoolClasses in a ClusterClass share a name.
MachinePoolTopologiesAreValidAndDefinedInClusterClass checks that each MachinePoolTopology name is not empty and unique, and each class in use is defined in ClusterClass.spec.Workers.MachinePools.
ObjectsAreCompatible checks if two referenced objects are compatible, meaning that they are of the same GroupKind and in the same namespace.
ObjectsAreInTheSameNamespace checks if two referenced objects are in the same namespace.
ObjectsAreStrictlyCompatible checks if two referenced objects are strictly compatible, meaning that they are compatible and the name of the objects do not change.