@@ -542,7 +542,7 @@ func (og *operationGenerator) GenerateMountVolumeFunc(
542
542
return volumeToMount .GenerateError ("MountVolume.FindPluginBySpec failed" , err )
543
543
}
544
544
545
- affinityErr := checkNodeAffinity (og , volumeToMount , volumePlugin )
545
+ affinityErr := checkNodeAffinity (og , volumeToMount )
546
546
if affinityErr != nil {
547
547
return volumeToMount .GenerateError ("MountVolume.NodeAffinity check failed" , affinityErr )
548
548
}
@@ -948,17 +948,29 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
948
948
volumeToMount VolumeToMount ,
949
949
actualStateOfWorld ActualStateOfWorldMounterUpdater ) (volumetypes.GeneratedOperations , error ) {
950
950
951
+ originalSpec := volumeToMount .VolumeSpec
952
+ // Translate to CSI spec if migration enabled
953
+ if useCSIPlugin (og .volumePluginMgr , originalSpec ) {
954
+ csiSpec , err := translateSpec (originalSpec )
955
+ if err != nil {
956
+ return volumetypes.GeneratedOperations {}, volumeToMount .GenerateErrorDetailed ("MapVolume.TranslateSpec failed" , err )
957
+ }
958
+
959
+ volumeToMount .VolumeSpec = csiSpec
960
+ }
961
+
951
962
// Get block volume mapper plugin
952
- var blockVolumeMapper volume.BlockVolumeMapper
953
963
blockVolumePlugin , err :=
954
964
og .volumePluginMgr .FindMapperPluginBySpec (volumeToMount .VolumeSpec )
955
965
if err != nil {
956
966
return volumetypes.GeneratedOperations {}, volumeToMount .GenerateErrorDetailed ("MapVolume.FindMapperPluginBySpec failed" , err )
957
967
}
968
+
958
969
if blockVolumePlugin == nil {
959
970
return volumetypes.GeneratedOperations {}, volumeToMount .GenerateErrorDetailed ("MapVolume.FindMapperPluginBySpec failed to find BlockVolumeMapper plugin. Volume plugin is nil." , nil )
960
971
}
961
- affinityErr := checkNodeAffinity (og , volumeToMount , blockVolumePlugin )
972
+
973
+ affinityErr := checkNodeAffinity (og , volumeToMount )
962
974
if affinityErr != nil {
963
975
eventErr , detailedErr := volumeToMount .GenerateError ("MapVolume.NodeAffinity check failed" , affinityErr )
964
976
og .recorder .Eventf (volumeToMount .Pod , v1 .EventTypeWarning , kevents .FailedMountVolume , eventErr .Error ())
@@ -1077,7 +1089,7 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
1077
1089
blockVolumeMapper ,
1078
1090
volumeToMount .OuterVolumeSpecName ,
1079
1091
volumeToMount .VolumeGidValue ,
1080
- volumeToMount . VolumeSpec )
1092
+ originalSpec )
1081
1093
if markVolMountedErr != nil {
1082
1094
// On failure, return error. Caller will log and retry.
1083
1095
return volumeToMount .GenerateError ("MapVolume.MarkVolumeAsMounted failed" , markVolMountedErr )
@@ -1107,13 +1119,32 @@ func (og *operationGenerator) GenerateUnmapVolumeFunc(
1107
1119
volumeToUnmount MountedVolume ,
1108
1120
actualStateOfWorld ActualStateOfWorldMounterUpdater ) (volumetypes.GeneratedOperations , error ) {
1109
1121
1110
- // Get block volume unmapper plugin
1111
- var blockVolumeUnmapper volume.BlockVolumeUnmapper
1112
- blockVolumePlugin , err :=
1113
- og .volumePluginMgr .FindMapperPluginByName (volumeToUnmount .PluginName )
1114
- if err != nil {
1115
- return volumetypes.GeneratedOperations {}, volumeToUnmount .GenerateErrorDetailed ("UnmapVolume.FindMapperPluginByName failed" , err )
1122
+ var blockVolumePlugin volume.BlockVolumePlugin
1123
+ var err error
1124
+ // Translate to CSI spec if migration enabled
1125
+ // And get block volume unmapper plugin
1126
+ if volumeToUnmount .VolumeSpec != nil && useCSIPlugin (og .volumePluginMgr , volumeToUnmount .VolumeSpec ) {
1127
+ csiSpec , err := translateSpec (volumeToUnmount .VolumeSpec )
1128
+ if err != nil {
1129
+ return volumetypes.GeneratedOperations {}, volumeToUnmount .GenerateErrorDetailed ("UnmapVolume.TranslateSpec failed" , err )
1130
+ }
1131
+
1132
+ volumeToUnmount .VolumeSpec = csiSpec
1133
+
1134
+ blockVolumePlugin , err =
1135
+ og .volumePluginMgr .FindMapperPluginByName (csi .CSIPluginName )
1136
+ if err != nil {
1137
+ return volumetypes.GeneratedOperations {}, volumeToUnmount .GenerateErrorDetailed ("UnmapVolume.FindMapperPluginByName failed" , err )
1138
+ }
1139
+ } else {
1140
+ blockVolumePlugin , err =
1141
+ og .volumePluginMgr .FindMapperPluginByName (volumeToUnmount .PluginName )
1142
+ if err != nil {
1143
+ return volumetypes.GeneratedOperations {}, volumeToUnmount .GenerateErrorDetailed ("UnmapVolume.FindMapperPluginByName failed" , err )
1144
+ }
1116
1145
}
1146
+
1147
+ var blockVolumeUnmapper volume.BlockVolumeUnmapper
1117
1148
if blockVolumePlugin == nil {
1118
1149
return volumetypes.GeneratedOperations {}, volumeToUnmount .GenerateErrorDetailed ("UnmapVolume.FindMapperPluginByName failed to find BlockVolumeMapper plugin. Volume plugin is nil." , nil )
1119
1150
}
@@ -1184,11 +1215,29 @@ func (og *operationGenerator) GenerateUnmapDeviceFunc(
1184
1215
actualStateOfWorld ActualStateOfWorldMounterUpdater ,
1185
1216
mounter mount.Interface ) (volumetypes.GeneratedOperations , error ) {
1186
1217
1187
- blockVolumePlugin , err :=
1188
- og .volumePluginMgr .FindMapperPluginByName (deviceToDetach .PluginName )
1189
- if err != nil {
1190
- return volumetypes.GeneratedOperations {}, deviceToDetach .GenerateErrorDetailed ("UnmapDevice.FindMapperPluginByName failed" , err )
1218
+ var blockVolumePlugin volume.BlockVolumePlugin
1219
+ var err error
1220
+ // Translate to CSI spec if migration enabled
1221
+ if useCSIPlugin (og .volumePluginMgr , deviceToDetach .VolumeSpec ) {
1222
+ csiSpec , err := translateSpec (deviceToDetach .VolumeSpec )
1223
+ if err != nil {
1224
+ return volumetypes.GeneratedOperations {}, deviceToDetach .GenerateErrorDetailed ("UnmapDevice.TranslateSpec failed" , err )
1225
+ }
1226
+
1227
+ deviceToDetach .VolumeSpec = csiSpec
1228
+ blockVolumePlugin , err =
1229
+ og .volumePluginMgr .FindMapperPluginByName (csi .CSIPluginName )
1230
+ if err != nil {
1231
+ return volumetypes.GeneratedOperations {}, deviceToDetach .GenerateErrorDetailed ("UnmapDevice.FindMapperPluginByName failed" , err )
1232
+ }
1233
+ } else {
1234
+ blockVolumePlugin , err =
1235
+ og .volumePluginMgr .FindMapperPluginByName (deviceToDetach .PluginName )
1236
+ if err != nil {
1237
+ return volumetypes.GeneratedOperations {}, deviceToDetach .GenerateErrorDetailed ("UnmapDevice.FindMapperPluginByName failed" , err )
1238
+ }
1191
1239
}
1240
+
1192
1241
if blockVolumePlugin == nil {
1193
1242
return volumetypes.GeneratedOperations {}, deviceToDetach .GenerateErrorDetailed ("UnmapDevice.FindMapperPluginByName failed to find BlockVolumeMapper plugin. Volume plugin is nil." , nil )
1194
1243
}
@@ -1581,7 +1630,7 @@ func checkMountOptionSupport(og *operationGenerator, volumeToMount VolumeToMount
1581
1630
1582
1631
// checkNodeAffinity looks at the PV node affinity, and checks if the node has the same corresponding labels
1583
1632
// This ensures that we don't mount a volume that doesn't belong to this node
1584
- func checkNodeAffinity (og * operationGenerator , volumeToMount VolumeToMount , plugin volume. VolumePlugin ) error {
1633
+ func checkNodeAffinity (og * operationGenerator , volumeToMount VolumeToMount ) error {
1585
1634
if ! utilfeature .DefaultFeatureGate .Enabled (features .PersistentLocalVolumes ) {
1586
1635
return nil
1587
1636
}
0 commit comments