Skip to content

Commit ddda9de

Browse files
authored
Merge pull request #1028 from carlkyrillos/THREESCALE-10949-3
THREESCALE-10949 Preserve DC volumes' items
2 parents f6f5707 + 9147f7d commit ddda9de

File tree

1 file changed

+38
-3
lines changed

1 file changed

+38
-3
lines changed

pkg/upgrade/migrate_deployment_config_2.15.go

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package upgrade
33
import (
44
"context"
55
"fmt"
6+
"reflect"
67

78
appsv1 "github.com/openshift/api/apps/v1"
89
routev1 "github.com/openshift/api/route/v1"
@@ -284,16 +285,37 @@ func transferDeploymentConfigVolumes(dc *appsv1.DeploymentConfig, deployment *k8
284285
volumesAdded := false
285286

286287
// Map to store volume names present in deployment
287-
dVolumes := make(map[string]bool)
288+
dVolumes := make(map[string]corev1.Volume)
288289
for _, dVolume := range deployment.Spec.Template.Spec.Volumes {
289-
dVolumes[dVolume.Name] = true
290+
dVolumes[dVolume.Name] = dVolume
290291
}
291292

292293
// Determine which volumes exist in dc but not in deployment
293294
missingVolumes := make([]corev1.Volume, 0)
295+
missingItems := make(map[string][]corev1.KeyToPath)
294296
for _, dcVolume := range dc.Spec.Template.Spec.Volumes {
295-
if _, exists := dVolumes[dcVolume.Name]; !exists {
297+
if existingVolume, exists := dVolumes[dcVolume.Name]; !exists {
296298
missingVolumes = append(missingVolumes, dcVolume)
299+
} else {
300+
// If the volume is using a ConfigMap, check that the existing volume has all the same items as the dcVolume
301+
if existingVolume.ConfigMap != nil && dcVolume.ConfigMap != nil {
302+
if !reflect.DeepEqual(existingVolume.ConfigMap, dcVolume.ConfigMap) {
303+
itemDifference := make([]corev1.KeyToPath, 0)
304+
for _, dcItem := range dcVolume.ConfigMap.Items {
305+
itemFound := false
306+
for _, dItem := range existingVolume.ConfigMap.Items {
307+
if dcItem.Key == dItem.Key {
308+
itemFound = true
309+
break
310+
}
311+
}
312+
if !itemFound {
313+
itemDifference = append(itemDifference, dcItem)
314+
}
315+
}
316+
missingItems[existingVolume.Name] = itemDifference
317+
}
318+
}
297319
}
298320
}
299321

@@ -306,6 +328,19 @@ func transferDeploymentConfigVolumes(dc *appsv1.DeploymentConfig, deployment *k8
306328
volumesAdded = true
307329
}
308330

331+
// Add missing items to existing volumes in the Deployment
332+
if len(missingItems) > 0 {
333+
for i, v := range deployment.Spec.Template.Spec.Volumes {
334+
if items, exists := missingItems[v.Name]; exists {
335+
if deployment.Spec.Template.Spec.Volumes[i].ConfigMap.Items == nil {
336+
deployment.Spec.Template.Spec.Volumes[i].ConfigMap.Items = make([]corev1.KeyToPath, 0)
337+
}
338+
deployment.Spec.Template.Spec.Volumes[i].ConfigMap.Items = append(items, v.ConfigMap.Items...)
339+
}
340+
}
341+
volumesAdded = true
342+
}
343+
309344
// Loop through each container in dc to check for missing volume mounts
310345
for _, dcContainer := range dc.Spec.Template.Spec.Containers {
311346
// Find corresponding container in deployment

0 commit comments

Comments
 (0)