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