const AnnBindCompleted … const AnnBoundByController … const AnnSelectedNode … const NotSupportedProvisioner … const AnnDynamicallyProvisioned … const AnnMigratedTo … const AnnStorageProvisioner … const AnnBetaStorageProvisioner … const PVDeletionProtectionFinalizer … const PVDeletionInTreeProtectionFinalizer … // IsDelayBindingProvisioning checks if claim provisioning with selected-node annotation func IsDelayBindingProvisioning(claim *v1.PersistentVolumeClaim) bool { … } // IsDelayBindingMode checks if claim is in delay binding mode. func IsDelayBindingMode(claim *v1.PersistentVolumeClaim, classLister storagelisters.StorageClassLister) (bool, error) { … } // GetBindVolumeToClaim returns a new volume which is bound to given claim. In // addition, it returns a bool which indicates whether we made modification on // original volume. func GetBindVolumeToClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) (*v1.PersistentVolume, bool, error) { … } // IsVolumeBoundToClaim returns true, if given volume is pre-bound or bound // to specific claim. Both claim.Name and claim.Namespace must be equal. // If claim.UID is present in volume.Spec.ClaimRef, it must be equal too. func IsVolumeBoundToClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) bool { … } // FindMatchingVolume goes through the list of volumes to find the best matching volume // for the claim. // // This function is used by both the PV controller and scheduler. // // delayBinding is true only in the PV controller path. When set, prebound PVs are still returned // as a match for the claim, but unbound PVs are skipped. // // node is set only in the scheduler path. When set, the PV node affinity is checked against // the node's labels. // // excludedVolumes is only used in the scheduler path, and is needed for evaluating multiple // unbound PVCs for a single Pod at one time. As each PVC finds a matching PV, the chosen // PV needs to be excluded from future matching. func FindMatchingVolume( claim *v1.PersistentVolumeClaim, volumes []*v1.PersistentVolume, node *v1.Node, excludedVolumes map[string]*v1.PersistentVolume, delayBinding bool, vacEnabled bool) (*v1.PersistentVolume, error) { … } // CheckVolumeModeMismatches is a convenience method that checks volumeMode for PersistentVolume // and PersistentVolumeClaims func CheckVolumeModeMismatches(pvcSpec *v1.PersistentVolumeClaimSpec, pvSpec *v1.PersistentVolumeSpec) bool { … } // CheckAccessModes returns true if PV satisfies all the PVC's requested AccessModes func CheckAccessModes(claim *v1.PersistentVolumeClaim, volume *v1.PersistentVolume) bool { … } func claimToClaimKey(claim *v1.PersistentVolumeClaim) string { … }