@@ -18,18 +18,21 @@ package clusterapi
18
18
19
19
import (
20
20
"context"
21
+ "encoding/json"
21
22
"fmt"
22
23
"path"
23
24
"strings"
24
25
"time"
25
26
26
27
"github.com/pkg/errors"
28
+ autoscalingv1 "k8s.io/api/autoscaling/v1"
27
29
apiv1 "k8s.io/api/core/v1"
28
30
corev1 "k8s.io/api/core/v1"
29
31
"k8s.io/apimachinery/pkg/api/resource"
30
32
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
31
33
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
32
34
"k8s.io/apimachinery/pkg/runtime/schema"
35
+ "k8s.io/apimachinery/pkg/types"
33
36
"k8s.io/apimachinery/pkg/util/validation"
34
37
klog "k8s.io/klog/v2"
35
38
)
@@ -118,17 +121,18 @@ func (r unstructuredScalableResource) SetSize(nreplicas int) error {
118
121
return err
119
122
}
120
123
121
- s , err := r .controller .managementScaleClient .Scales (r .Namespace ()).Get (context .TODO (), gvr .GroupResource (), r .Name (), metav1.GetOptions {})
122
- if err != nil {
123
- return err
124
+ spec := autoscalingv1.Scale {
125
+ Spec : autoscalingv1.ScaleSpec {
126
+ Replicas : int32 (nreplicas ),
127
+ },
124
128
}
125
129
126
- if s == nil {
127
- return fmt .Errorf ("unknown %s %s/%s" , r .Kind (), r .Namespace (), r .Name ())
130
+ patch , err := json .Marshal (spec )
131
+ if err != nil {
132
+ return fmt .Errorf ("could not marshal json patch for scaling: %w" , err )
128
133
}
129
134
130
- s .Spec .Replicas = int32 (nreplicas )
131
- _ , updateErr := r .controller .managementScaleClient .Scales (r .Namespace ()).Update (context .TODO (), gvr .GroupResource (), s , metav1.UpdateOptions {})
135
+ _ , updateErr := r .controller .managementScaleClient .Scales (r .Namespace ()).Patch (context .TODO (), gvr , r .Name (), types .MergePatchType , patch , metav1.PatchOptions {})
132
136
133
137
if updateErr == nil {
134
138
updateErr = unstructured .SetNestedField (r .unstructured .UnstructuredContent (), int64 (nreplicas ), "spec" , "replicas" )
0 commit comments