From 0a862fdb70072498bed6d68bc9ca91e8d97a8aa2 Mon Sep 17 00:00:00 2001 From: Pyeongkang Choi <45748309+peaaceChoi@users.noreply.github.com> Date: Wed, 31 May 2023 16:38:04 +0900 Subject: [PATCH 1/2] Support intstr.IntOrString type --- cmd/kops/edit_instancegroup_test.go | 2 +- cmd/kops/test/edit_instance_group.yaml | 2 ++ util/pkg/reflectutils/access.go | 13 +++++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cmd/kops/edit_instancegroup_test.go b/cmd/kops/edit_instancegroup_test.go index 822e0a83a2..6a298b9f78 100644 --- a/cmd/kops/edit_instancegroup_test.go +++ b/cmd/kops/edit_instancegroup_test.go @@ -66,7 +66,7 @@ func TestEditInstanceGroup(t *testing.T) { editOptions := &EditInstanceGroupOptions{ ClusterName: clusterName, GroupName: "nodes", - Sets: []string{"spec.maxSize=10"}, + Sets: []string{"spec.maxSize=10", "spec.rollingUpdate.maxUnavailable=50%"}, } err := RunEditInstanceGroup(ctx, factory, &stdout, editOptions) if err != nil { diff --git a/cmd/kops/test/edit_instance_group.yaml b/cmd/kops/test/edit_instance_group.yaml index 945f275583..d47ff3b672 100644 --- a/cmd/kops/test/edit_instance_group.yaml +++ b/cmd/kops/test/edit_instance_group.yaml @@ -10,6 +10,8 @@ spec: image: ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20220404 maxSize: 10 role: Node + rollingUpdate: + maxUnavailable: 50% subnets: - subnet-us-test-1a taints: diff --git a/util/pkg/reflectutils/access.go b/util/pkg/reflectutils/access.go index e8bbf3132a..235e1a33c1 100644 --- a/util/pkg/reflectutils/access.go +++ b/util/pkg/reflectutils/access.go @@ -21,6 +21,8 @@ import ( "reflect" "strconv" "strings" + + "k8s.io/apimachinery/pkg/util/intstr" ) func SetString(target interface{}, targetPath string, newValue string) error { @@ -43,7 +45,7 @@ func SetString(target interface{}, targetPath string, newValue string) error { return fmt.Errorf("cannot set field %q (marked immutable)", path) } - if err := setPrimitive(v, newValue); err != nil { + if err := setType(v, newValue); err != nil { return fmt.Errorf("cannot set field %q: %v", path, err) } @@ -89,7 +91,7 @@ func SetString(target interface{}, targetPath string, newValue string) error { return nil } -func setPrimitive(v reflect.Value, newValue string) error { +func setType(v reflect.Value, newValue string) error { if !v.CanSet() { return fmt.Errorf("cannot set value") } @@ -103,7 +105,7 @@ func setPrimitive(v reflect.Value, newValue string) error { valueArray = reflect.AppendSlice(valueArray, v) for _, s := range tokens { valueItem := reflect.New(v.Type().Elem()) - if err := setPrimitive(valueItem.Elem(), s); err != nil { + if err := setType(valueItem.Elem(), s); err != nil { return err } valueArray = reflect.Append(valueArray, valueItem.Elem()) @@ -119,7 +121,7 @@ func setPrimitive(v reflect.Value, newValue string) error { if v.Type().Kind() == reflect.Ptr { val := reflect.New(v.Type().Elem()) - if err := setPrimitive(val.Elem(), newValue); err != nil { + if err := setType(val.Elem(), newValue); err != nil { return err } v.Set(val) @@ -159,6 +161,9 @@ func setPrimitive(v reflect.Value, newValue string) error { default: panic("missing case in switch") } + + case "intstr.IntOrString": + newV = reflect.ValueOf(intstr.Parse(newValue)) default: // This handles enums and other simple conversions From 9579feab98961e65a072a5dc908122e03dd6a8e0 Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Sat, 17 Jun 2023 09:25:13 +0300 Subject: [PATCH 2/2] Apply suggestions from code review --- util/pkg/reflectutils/access.go | 1 - 1 file changed, 1 deletion(-) diff --git a/util/pkg/reflectutils/access.go b/util/pkg/reflectutils/access.go index 235e1a33c1..fea62e7f3f 100644 --- a/util/pkg/reflectutils/access.go +++ b/util/pkg/reflectutils/access.go @@ -161,7 +161,6 @@ func setType(v reflect.Value, newValue string) error { default: panic("missing case in switch") } - case "intstr.IntOrString": newV = reflect.ValueOf(intstr.Parse(newValue))