func (attacher *rbdAttacher) MountDevice(spec *volume.Spec, devicePath string, deviceMountPath string) error {
	klog.V(4).Infof("rbd: mouting device %s to %s", devicePath, deviceMountPath)
	notMnt, err := attacher.mounter.IsLikelyNotMountPoint(deviceMountPath)
	if err != nil {
		if os.IsNotExist(err) {
			if err := os.MkdirAll(deviceMountPath, 0750); err != nil {
				return err
			}
			notMnt = true
		} else {
			return err
		}
	}
	if !notMnt {
		return nil
	}
	fstype, err := getVolumeSourceFSType(spec)
	if err != nil {
		return err
	}
	ro, err := getVolumeSourceReadOnly(spec)
	if err != nil {
		return err
	}
	options := []string{}
	if ro {
		options = append(options, "ro")
	}
	mountOptions := volutil.MountOptionFromSpec(spec, options...)
	err = attacher.mounter.FormatAndMount(devicePath, deviceMountPath, fstype, mountOptions)
	if err != nil {
		os.Remove(deviceMountPath)
		return fmt.Errorf("rbd: failed to mount device %s at %s (fstype: %s), error %v", devicePath, deviceMountPath, fstype, err)
	}
	klog.V(3).Infof("rbd: successfully mount device %s at %s (fstype: %s)", devicePath, deviceMountPath, fstype)
	return nil
}
// MountDevice implements Attacher.MountDevice. It is called by the kubelet to
// mount device at the given mount path.
// This method is idempotent, callers are responsible for retrying on failure.
MountDevice implements Attacher.MountDevice. It is called by the kubelet to
mount device at the given mount path.
This method is idempotent, callers are responsible for retrying on failure.
// MountDevice implements Attacher . MountDevice . It is called by the kubelet to // mount device at the given mount path . // This method is idempotent callers are responsible for retrying on failure .
func (attacher *rbdAttacher) MountDevice(spec *volume.Spec, devicePath string, deviceMountPath string) error {
	klog.V(4).Infof("rbd: mouting device %s to %s", devicePath, deviceMountPath)
	notMnt, err := attacher.mounter.IsLikelyNotMountPoint(deviceMountPath)
	if err != nil {
		if os.IsNotExist(err) {
			if err := os.MkdirAll(deviceMountPath, 0750); err != nil {
				return err
			}
			notMnt = true
		} else {
			return err
		}
	}
	if !notMnt {
		return nil
	}
	fstype, err := getVolumeSourceFSType(spec)
	if err != nil {
		return err
	}
	ro, err := getVolumeSourceReadOnly(spec)
	if err != nil {
		return err
	}
	options := []string{}
	if ro {
		options = append(options, "ro")
	}
	mountOptions := volutil.MountOptionFromSpec(spec, options...)
	err = attacher.mounter.FormatAndMount(devicePath, deviceMountPath, fstype, mountOptions)
	if err != nil {
		os.Remove(deviceMountPath)
		return fmt.Errorf("rbd: failed to mount device %s at %s (fstype: %s), error %v", devicePath, deviceMountPath, fstype, err)
	}
	klog.V(3).Infof("rbd: successfully mount device %s at %s (fstype: %s)", devicePath, deviceMountPath, fstype)
	return nil
}
func ( attacher * rbdAttacher ) MountDevice ( spec * volume . Spec , devicePath string , deviceMountPath string ) error { klog . V ( 4 ) . Infof ( " " , devicePath , deviceMountPath ) notMnt , err := attacher . mounter . IsLikelyNotMountPoint ( deviceMountPath ) if err != nil { if os . IsNotExist ( err ) { if err := os . MkdirAll ( deviceMountPath , 0750 ) ; err != nil { return err } notMnt = true } else { return err } } if ! notMnt { return nil } fstype , err := getVolumeSourceFSType ( spec ) if err != nil { return err } ro , err := getVolumeSourceReadOnly ( spec ) if err != nil { return err } options := [ ] string { } if ro { options = append ( options , " " ) } mountOptions := volutil . MountOptionFromSpec ( spec , options ... ) err = attacher . mounter . FormatAndMount ( devicePath , deviceMountPath , fstype , mountOptions ) if err != nil { os . Remove ( deviceMountPath ) return fmt . Errorf ( " " , devicePath , deviceMountPath , fstype , err ) } klog . V ( 3 ) . Infof ( " " , devicePath , deviceMountPath , fstype ) return nil }
MountDevice implements Attacher.MountDevice.
MountDevice implements Attacher . MountDevice .