func checkGcsFuseErr()

in pkg/csi_driver/utils.go [376:427]


func checkGcsFuseErr(isInitContainer bool, pod *corev1.Pod, targetPath string) (codes.Code, error) {
	code := codes.Internal
	cs, err := getSidecarContainerStatus(isInitContainer, pod)
	if err != nil {
		return code, err
	}

	// the sidecar container has not started, skip the check
	if cs.State.Waiting != nil {
		return codes.OK, nil
	}

	emptyDirBasePath, err := util.PrepareEmptyDir(targetPath, false)
	if err != nil {
		return code, fmt.Errorf("failed to get emptyDir path: %w", err)
	}

	errMsg, err := os.ReadFile(emptyDirBasePath + "/error")
	if err != nil && !os.IsNotExist(err) {
		return code, fmt.Errorf("failed to open error file %q: %w", emptyDirBasePath+"/error", err)
	}
	if err == nil && len(errMsg) > 0 {
		errMsgStr := string(errMsg)
		code := codes.Internal
		if strings.Contains(errMsgStr, "Incorrect Usage") ||
			strings.Contains(errMsgStr, "unknown flag") {
			code = codes.InvalidArgument
		}

		if strings.Contains(errMsgStr, "signal: killed") {
			code = codes.ResourceExhausted
		}

		if strings.Contains(errMsgStr, "signal: terminated") {
			code = codes.Canceled
		}

		if strings.Contains(errMsgStr, "googleapi: Error 403") ||
			strings.Contains(errMsgStr, "IAM returned 403 Forbidden: Permission") ||
			strings.Contains(errMsgStr, "google: could not find default credentials") {
			code = codes.PermissionDenied
		}

		if strings.Contains(errMsgStr, "bucket doesn't exist") {
			code = codes.NotFound
		}

		return code, fmt.Errorf("gcsfuse failed with error: %v", errMsgStr)
	}

	return codes.OK, nil
}