From b3728417568d2e103aa413a91fd9fbb8efa653d1 Mon Sep 17 00:00:00 2001 From: chengleqi Date: Tue, 28 Feb 2023 23:11:15 +0800 Subject: [PATCH 1/2] fix golangci-lint and add signature Signed-off-by: chengleqi --- pkg/cmd/set/set_image.go | 26 ++++++++++++++++--- pkg/cmd/set/set_image_test.go | 18 +++++++++++++ .../polymorphichelpers/updatepodspec.go | 6 +++++ 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/pkg/cmd/set/set_image.go b/pkg/cmd/set/set_image.go index 87ef2b5..5eee0fa 100644 --- a/pkg/cmd/set/set_image.go +++ b/pkg/cmd/set/set_image.go @@ -19,6 +19,7 @@ package set import ( "fmt" + kruiseappsv1alpha1 "github.com/openkruise/kruise-api/apps/v1alpha1" "github.com/openkruise/kruise-tools/pkg/internal/polymorphichelpers" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" @@ -240,9 +241,15 @@ func (o *SetImageOptions) Run() error { } continue } - - initContainerFound := setImage(spec.InitContainers, name, resolvedImageName) - containerFound := setImage(spec.Containers, name, resolvedImageName) + var initContainerFound, containerFound bool + // Check if the type is kruiseappsv1alpha1.SidecarSet, and if the placeholder is nil. + if t, ok := obj.(*kruiseappsv1alpha1.SidecarSet); ok && spec == nil { + initContainerFound = setSideCarImage(t.Spec.Containers, name, resolvedImageName) + containerFound = setSideCarImage(t.Spec.InitContainers, name, resolvedImageName) + } else { + initContainerFound = setImage(spec.InitContainers, name, resolvedImageName) + containerFound = setImage(spec.Containers, name, resolvedImageName) + } if !containerFound && !initContainerFound { allErrs = append(allErrs, fmt.Errorf("error: unable to find container named %q", name)) } @@ -316,6 +323,19 @@ func setImage(containers []corev1.Container, containerName string, image string) return containerFound } +// setSideCarImage +func setSideCarImage(containers []kruiseappsv1alpha1.SidecarContainer, containerName string, image string) bool { + containerFound := false + // Find the container to update, and update its image + for i, c := range containers { + if c.Name == containerName || containerName == "*" { + containerFound = true + containers[i].Image = image + } + } + return containerFound +} + // getResourcesAndImages retrieves resources and container name:images pair from given args func getResourcesAndImages(args []string) (resources []string, containerImages map[string]string, err error) { pairType := "image" diff --git a/pkg/cmd/set/set_image_test.go b/pkg/cmd/set/set_image_test.go index 9bea234..7bb1409 100644 --- a/pkg/cmd/set/set_image_test.go +++ b/pkg/cmd/set/set_image_test.go @@ -23,6 +23,8 @@ import ( "strings" "testing" + kruiseappsv1alpha1 "github.com/openkruise/kruise-api/apps/v1alpha1" + "github.com/stretchr/testify/assert" appsv1 "k8s.io/api/apps/v1" @@ -612,6 +614,22 @@ func TestSetImageRemote(t *testing.T) { path: "/namespaces/test/replicationcontrollers/nginx", args: []string{"replicationcontroller", "nginx", "*=thingy"}, }, + { + name: "set image kruiseappsv1alpha1.SidecarSet", + object: &kruiseappsv1alpha1.SidecarSet{ + ObjectMeta: metav1.ObjectMeta{Name: "nginx"}, + Spec: kruiseappsv1alpha1.SidecarSetSpec{ + Containers: []kruiseappsv1alpha1.SidecarContainer{ + { + Container: corev1.Container{Name: "nginx", Image: "nginx"}, + }, + }, + }, + }, + groupVersion: corev1.SchemeGroupVersion, + path: "/namespaces/test/sidecarsets/nginx", + args: []string{"sidecarsets", "nginx", "*=thingy"}, + }, } for _, input := range inputs { t.Run(input.name, func(t *testing.T) { diff --git a/pkg/internal/polymorphichelpers/updatepodspec.go b/pkg/internal/polymorphichelpers/updatepodspec.go index 1b3e8a4..e2c2f7f 100644 --- a/pkg/internal/polymorphichelpers/updatepodspec.go +++ b/pkg/internal/polymorphichelpers/updatepodspec.go @@ -40,6 +40,12 @@ func updatePodSpecForObject(obj runtime.Object, fn func(*v1.PodSpec) error) (boo return true, fn(&t.Spec.Template.Spec) case *kruiseappsv1alpha1.DaemonSet: return true, fn(&t.Spec.Template.Spec) + case *kruiseappsv1alpha1.SidecarSet: + // Because the fn function requires passing v1.PodSpec as a parameter, + // but kruiseappsv1alpha1.SidecarSet only has kruiseappsv1alpha1.SidecarContainer, + // and their types do not match. + // Therefore, passing nil as a placeholder here. + return true, fn(nil) case *v1.Pod: return true, fn(&t.Spec) // ReplicationController From b9a1b6f7bd695c610c6a78d587215944b2a971db Mon Sep 17 00:00:00 2001 From: chengleqi Date: Wed, 1 Mar 2023 11:00:25 +0800 Subject: [PATCH 2/2] fix typo Signed-off-by: chengleqi --- pkg/cmd/set/set_image.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/cmd/set/set_image.go b/pkg/cmd/set/set_image.go index 5eee0fa..7570b97 100644 --- a/pkg/cmd/set/set_image.go +++ b/pkg/cmd/set/set_image.go @@ -244,8 +244,8 @@ func (o *SetImageOptions) Run() error { var initContainerFound, containerFound bool // Check if the type is kruiseappsv1alpha1.SidecarSet, and if the placeholder is nil. if t, ok := obj.(*kruiseappsv1alpha1.SidecarSet); ok && spec == nil { - initContainerFound = setSideCarImage(t.Spec.Containers, name, resolvedImageName) - containerFound = setSideCarImage(t.Spec.InitContainers, name, resolvedImageName) + initContainerFound = setSideCarImage(t.Spec.InitContainers, name, resolvedImageName) + containerFound = setSideCarImage(t.Spec.Containers, name, resolvedImageName) } else { initContainerFound = setImage(spec.InitContainers, name, resolvedImageName) containerFound = setImage(spec.Containers, name, resolvedImageName)