in plugins/rbd.go [122:165]
func (p rbdCSITranslator) TranslateInTreeInlineVolumeToCSI(volume *v1.Volume, podNamespace string) (*v1.PersistentVolume, error) {
if volume == nil || volume.RBD == nil {
return nil, fmt.Errorf("volume is nil or RBDVolume not defined on volume")
}
var am v1.PersistentVolumeAccessMode
if volume.RBD.ReadOnly {
am = v1.ReadOnlyMany
} else {
am = v1.ReadWriteOnce
}
secRef := &v1.SecretReference{}
if volume.RBD.SecretRef != nil {
secRef.Name = volume.RBD.SecretRef.Name
secRef.Namespace = podNamespace
}
volumeAttr := make(map[string]string)
volumeAttr[clusterIDKey] = fmt.Sprintf("%x", md5.Sum([]byte(strings.Join(volume.RBD.CephMonitors, ","))))
volumeAttr[poolKey] = defaultPoolVal
if volume.RBD.RBDPool != "" {
volumeAttr[poolKey] = volume.RBD.RBDPool
}
volumeAttr[staticVolKey] = defaultMigStaticVal
volumeAttr[imgFeatureKey] = defaultImgFeatureVal
pv := &v1.PersistentVolume{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("%s-%s", RBDDriverName, volume.RBD.RBDImage),
},
Spec: v1.PersistentVolumeSpec{
PersistentVolumeSource: v1.PersistentVolumeSource{
CSI: &v1.CSIPersistentVolumeSource{
Driver: RBDDriverName,
VolumeHandle: volume.RBD.RBDImage,
FSType: volume.RBD.FSType,
VolumeAttributes: volumeAttr,
NodeStageSecretRef: secRef,
ControllerExpandSecretRef: secRef,
},
},
AccessModes: []v1.PersistentVolumeAccessMode{am},
},
}
return pv, nil
}