Skip to content

Commit abfb48d

Browse files
Merge pull request #282 from wking/resource-merge-index-mutating-existing
Bug 1783221: lib/resourcemerge/core: Fix panic on container/port removal
2 parents 54faf6f + e8e80c2 commit abfb48d

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

lib/resourcemerge/core.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ func ensurePodSpec(modified *bool, existing *corev1.PodSpec, required corev1.Pod
6262
}
6363

6464
func ensureContainers(modified *bool, existing *[]corev1.Container, required []corev1.Container) {
65-
for i, existingContainer := range *existing {
65+
for i := len(*existing) - 1; i >= 0; i-- {
66+
existingContainer := &(*existing)[i]
6667
var existingCurr *corev1.Container
6768
for _, requiredContainer := range required {
6869
if existingContainer.Name == requiredContainer.Name {
@@ -198,7 +199,8 @@ func ensureContainerPort(modified *bool, existing *corev1.ContainerPort, require
198199
}
199200

200201
func EnsureServicePorts(modified *bool, existing *[]corev1.ServicePort, required []corev1.ServicePort) {
201-
for i, existingServicePort := range *existing {
202+
for i := len(*existing) - 1; i >= 0; i-- {
203+
existingServicePort := &(*existing)[i]
202204
var existingCurr *corev1.ServicePort
203205
for _, requiredServicePort := range required {
204206
if existingServicePort.Name == requiredServicePort.Name {

lib/resourcemerge/core_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,27 @@ func TestEnsurePodSpec(t *testing.T) {
247247
},
248248
},
249249
},
250+
{
251+
name: "remove a container",
252+
existing: corev1.PodSpec{
253+
Containers: []corev1.Container{
254+
corev1.Container{Name: "test-A"},
255+
corev1.Container{Name: "test-B"},
256+
},
257+
},
258+
input: corev1.PodSpec{
259+
Containers: []corev1.Container{
260+
corev1.Container{Name: "test-B"},
261+
},
262+
},
263+
264+
expectedModified: true,
265+
expected: corev1.PodSpec{
266+
Containers: []corev1.Container{
267+
corev1.Container{Name: "test-B"},
268+
},
269+
},
270+
},
250271
}
251272

252273
for _, test := range tests {

0 commit comments

Comments
 (0)