MCPcopy
hub / github.com/kubernetes/client-go / Update

Method Update

scale/client.go:156–215  ·  view source on GitHub ↗
(resource schema.GroupResource, scale *autoscaling.Scale)

Source from the content-addressed store, hash-verified

154}
155
156func (c *namespacedScaleClient) Update(resource schema.GroupResource, scale *autoscaling.Scale) (*autoscaling.Scale, error) {
157 path, gvr, err := c.client.pathAndVersionFor(resource)
158 if err != nil {
159 return nil, fmt.Errorf("unable to get client for %s: %v", resource.String(), err)
160 }
161
162 // Currently, a /scale endpoint can receive and return different scale types.
163 // Until we have support for the alternative API representations proposal,
164 // we need to deal with sending and accepting different API versions.
165
166 // figure out what scale we actually need here
167 desiredGVK, err := c.client.scaleKindResolver.ScaleForResource(gvr)
168 if err != nil {
169 return nil, fmt.Errorf("could not find proper group-version for scale subresource of %s: %v", gvr.String(), err)
170 }
171
172 // convert this to whatever this endpoint wants
173 scaleUpdate, err := scaleConverter.ConvertToVersion(scale, desiredGVK.GroupVersion())
174 if err != nil {
175 return nil, fmt.Errorf("could not convert scale update to external Scale: %v", err)
176 }
177 encoder := scaleConverter.codecs.LegacyCodec(desiredGVK.GroupVersion())
178 scaleUpdateBytes, err := runtime.Encode(encoder, scaleUpdate)
179 if err != nil {
180 return nil, fmt.Errorf("could not encode scale update to external Scale: %v", err)
181 }
182
183 result := c.client.clientBase.Put().
184 AbsPath(path).
185 Namespace(c.namespace).
186 Resource(gvr.Resource).
187 Name(scale.Name).
188 SubResource("scale").
189 Body(scaleUpdateBytes).
190 Do()
191 if err := result.Error(); err != nil {
192 // propagate "raw" error from the API
193 // this allows callers to interpret underlying Reason field
194 // for example: errors.IsConflict(err)
195 return nil, err
196 }
197
198 scaleBytes, err := result.Raw()
199 if err != nil {
200 return nil, err
201 }
202 decoder := scaleConverter.codecs.UniversalDecoder(scaleConverter.ScaleVersions()...)
203 rawScaleObj, err := runtime.Decode(decoder, scaleBytes)
204 if err != nil {
205 return nil, err
206 }
207
208 // convert whatever this is back to autoscaling/v1.Scale
209 scaleObj, err := scaleConverter.ConvertToVersion(rawScaleObj, autoscaling.SchemeGroupVersion)
210 if err != nil {
211 return nil, fmt.Errorf("received an object from a /scale endpoint which was not convertible to autoscaling Scale: %v", err)
212 }
213

Callers

nothing calls this directly

Calls 15

pathAndVersionForMethod · 0.80
ConvertToVersionMethod · 0.80
BodyMethod · 0.80
SubResourceMethod · 0.80
AbsPathMethod · 0.80
RawMethod · 0.80
ScaleVersionsMethod · 0.80
ErrorfMethod · 0.65
StringMethod · 0.65
ScaleForResourceMethod · 0.65
DoMethod · 0.65
ResourceMethod · 0.65

Tested by

no test coverage detected