in pkg/webhook/volumes.go [36:82]
func (si *SidecarInjector) isGcsFuseCSIVolume(volume corev1.Volume, namespace string) (bool, bool, map[string]string, error) {
var isDynamicMount bool
// Check if it is ephemeral volume.
if volume.CSI != nil {
if volume.CSI.Driver == gcsFuseCsiDriverName {
// Ephemeral volume is using dynamic mounting,
// See details: https://cloud.google.com/storage/docs/gcsfuse-mount#dynamic-mount
if val, ok := volume.CSI.VolumeAttributes["bucketName"]; ok && val == "_" {
isDynamicMount = true
}
return true, isDynamicMount, volume.CSI.VolumeAttributes, nil
}
return false, false, nil, nil
}
// Check if it's a persistent volume.
pvc := volume.PersistentVolumeClaim
if pvc == nil {
return false, false, nil, nil
}
pvcName := pvc.ClaimName
pvcObj, err := si.GetPVC(namespace, pvcName)
if err != nil {
return false, false, nil, err
}
// Check if the PVC is a preprovisioned gcsfuse volume.
pv, ok, err := si.GetPreprovisionCSIVolume(gcsFuseCsiDriverName, pvcObj)
if err != nil || pv == nil {
klog.Warningf("unable to determine if PVC %s/%s is a pre-provisioned gcsfuse volume: %v", namespace, pvcName, err)
return false, false, nil, nil
}
if ok {
if pv.Spec.CSI != nil && pv.Spec.CSI.VolumeHandle == "_" {
isDynamicMount = true
}
return true, isDynamicMount, pv.Spec.CSI.VolumeAttributes, nil
}
return false, false, nil, nil
}