(resource schema.GroupResource, scale *autoscaling.Scale)
| 154 | } |
| 155 | |
| 156 | func (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 |
nothing calls this directly
no test coverage detected