mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 04:06:03 +00:00
Convert() should accept the new conversion Context value
Allows Convert() to reuse the same conversions as ConvertToVersion without being overly coupled to the version.
This commit is contained in:
parent
a7a7fd4631
commit
5f8366aac3
@ -50,7 +50,7 @@ type ProxyServerConfig struct {
|
||||
|
||||
func NewProxyConfig() *ProxyServerConfig {
|
||||
config := componentconfig.KubeProxyConfiguration{}
|
||||
api.Scheme.Convert(&v1alpha1.KubeProxyConfiguration{}, &config)
|
||||
api.Scheme.Convert(&v1alpha1.KubeProxyConfiguration{}, &config, nil)
|
||||
return &ProxyServerConfig{
|
||||
KubeProxyConfiguration: config,
|
||||
ContentType: "application/vnd.kubernetes.protobuf",
|
||||
|
@ -58,7 +58,7 @@ type KubeletServer struct {
|
||||
// NewKubeletServer will create a new KubeletServer with default values.
|
||||
func NewKubeletServer() *KubeletServer {
|
||||
config := componentconfig.KubeletConfiguration{}
|
||||
api.Scheme.Convert(&v1alpha1.KubeletConfiguration{}, &config)
|
||||
api.Scheme.Convert(&v1alpha1.KubeletConfiguration{}, &config, nil)
|
||||
return &KubeletServer{
|
||||
AuthPath: util.NewStringFlag("/var/lib/kubelet/kubernetes_auth"), // deprecated
|
||||
KubeConfig: util.NewStringFlag("/var/lib/kubelet/kubeconfig"),
|
||||
|
@ -28,7 +28,7 @@ import (
|
||||
|
||||
type fakeConvertor struct{}
|
||||
|
||||
func (fakeConvertor) Convert(in, out interface{}) error {
|
||||
func (fakeConvertor) Convert(in, out, context interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -106,7 +106,7 @@ func BenchmarkEncodeCodecFromInternalProtobuf(b *testing.B) {
|
||||
width := len(items)
|
||||
encodable := make([]api.Pod, width)
|
||||
for i := range items {
|
||||
if err := api.Scheme.Convert(&items[i], &encodable[i]); err != nil {
|
||||
if err := api.Scheme.Convert(&items[i], &encodable[i], nil); err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
@ -482,7 +482,7 @@ func BenchmarkEncodeCodecFromInternal(b *testing.B) {
|
||||
width := len(items)
|
||||
encodable := make([]api.Pod, width)
|
||||
for i := range items {
|
||||
if err := api.Scheme.Convert(&items[i], &encodable[i]); err != nil {
|
||||
if err := api.Scheme.Convert(&items[i], &encodable[i], nil); err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ func TestPodSpecConversion(t *testing.T) {
|
||||
ServiceAccountName: name,
|
||||
}
|
||||
v := versioned.PodSpec{}
|
||||
if err := api.Scheme.Convert(i, &v); err != nil {
|
||||
if err := api.Scheme.Convert(i, &v, nil); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if v.ServiceAccountName != name {
|
||||
@ -152,7 +152,7 @@ func TestPodSpecConversion(t *testing.T) {
|
||||
}
|
||||
for k, v := range testCases {
|
||||
got := api.PodSpec{}
|
||||
err := api.Scheme.Convert(v, &got)
|
||||
err := api.Scheme.Convert(v, &got, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error for case %d: %v", k, err)
|
||||
}
|
||||
@ -206,7 +206,7 @@ func TestResourceListConversion(t *testing.T) {
|
||||
|
||||
for i, test := range tests {
|
||||
output := api.ResourceList{}
|
||||
err := api.Scheme.Convert(&test.input, &output)
|
||||
err := api.Scheme.Convert(&test.input, &output, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error for case %d: %v", i, err)
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
|
||||
return nil
|
||||
}
|
||||
obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object)
|
||||
err = api.Scheme.Convert(obj2, obj3)
|
||||
err = api.Scheme.Convert(obj2, obj3, nil)
|
||||
if err != nil {
|
||||
t.Errorf("%v\nSource: %#v", err, obj2)
|
||||
return nil
|
||||
|
@ -67,7 +67,7 @@ func TestConversion(t *testing.T) {
|
||||
}
|
||||
for k, tc := range testcases {
|
||||
internal := &api.Policy{}
|
||||
if err := api.Scheme.Convert(tc.old, internal); err != nil {
|
||||
if err := api.Scheme.Convert(tc.old, internal, nil); err != nil {
|
||||
t.Errorf("%s: unexpected error: %v", k, err)
|
||||
}
|
||||
if !reflect.DeepEqual(internal, tc.expected) {
|
||||
|
@ -59,7 +59,7 @@ func TestJobSpecConversion(t *testing.T) {
|
||||
ManualSelector: test.in,
|
||||
}
|
||||
v := versioned.JobSpec{}
|
||||
if err := api.Scheme.Convert(i, &v); err != nil {
|
||||
if err := api.Scheme.Convert(i, &v, nil); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual(test.expectOut, v.AutoSelector) {
|
||||
@ -73,7 +73,7 @@ func TestJobSpecConversion(t *testing.T) {
|
||||
AutoSelector: test.in,
|
||||
}
|
||||
e := batch.JobSpec{}
|
||||
if err := api.Scheme.Convert(i, &e); err != nil {
|
||||
if err := api.Scheme.Convert(i, &e, nil); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual(test.expectOut, e.ManualSelector) {
|
||||
|
@ -728,7 +728,7 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
|
||||
return nil
|
||||
}
|
||||
obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object)
|
||||
err = api.Scheme.Convert(obj2, obj3)
|
||||
err = api.Scheme.Convert(obj2, obj3, nil)
|
||||
if err != nil {
|
||||
t.Errorf("%v\nSource: %#v", err, obj2)
|
||||
return nil
|
||||
|
@ -89,7 +89,7 @@ func NewFromFile(path string) (policyList, error) {
|
||||
if err := runtime.DecodeInto(decoder, b, oldPolicy); err != nil {
|
||||
return nil, policyLoadError{path, i, b, err}
|
||||
}
|
||||
if err := api.Scheme.Convert(oldPolicy, p); err != nil {
|
||||
if err := api.Scheme.Convert(oldPolicy, p, nil); err != nil {
|
||||
return nil, policyLoadError{path, i, b, err}
|
||||
}
|
||||
pl = append(pl, p)
|
||||
|
@ -562,7 +562,7 @@ func TestSubjectMatches(t *testing.T) {
|
||||
|
||||
for k, tc := range testCases {
|
||||
policy := &api.Policy{}
|
||||
if err := api.Scheme.Convert(tc.Policy, policy); err != nil {
|
||||
if err := api.Scheme.Convert(tc.Policy, policy, nil); err != nil {
|
||||
t.Errorf("%s: error converting: %v", k, err)
|
||||
continue
|
||||
}
|
||||
@ -950,7 +950,7 @@ func TestPolicy(t *testing.T) {
|
||||
}
|
||||
for _, test := range tests {
|
||||
policy := &api.Policy{}
|
||||
if err := api.Scheme.Convert(test.policy, policy); err != nil {
|
||||
if err := api.Scheme.Convert(test.policy, policy, nil); err != nil {
|
||||
t.Errorf("%s: error converting: %v", test.name, err)
|
||||
continue
|
||||
}
|
||||
|
@ -458,7 +458,7 @@ func GetPodFromTemplate(template *api.PodTemplateSpec, parentObject runtime.Obje
|
||||
if controllerRef != nil {
|
||||
pod.OwnerReferences = append(pod.OwnerReferences, *controllerRef)
|
||||
}
|
||||
if err := api.Scheme.Convert(&template.Spec, &pod.Spec); err != nil {
|
||||
if err := api.Scheme.Convert(&template.Spec, &pod.Spec, nil); err != nil {
|
||||
return nil, fmt.Errorf("unable to convert pod template: %v", err)
|
||||
}
|
||||
return pod, nil
|
||||
|
@ -209,7 +209,7 @@ func getJobFromTemplate(sj *batch.ScheduledJob, scheduledTime time.Time) (*batch
|
||||
Name: name,
|
||||
},
|
||||
}
|
||||
if err := api.Scheme.Convert(&sj.Spec.JobTemplate.Spec, &job.Spec); err != nil {
|
||||
if err := api.Scheme.Convert(&sj.Spec.JobTemplate.Spec, &job.Spec, nil); err != nil {
|
||||
return nil, fmt.Errorf("unable to convert job template: %v", err)
|
||||
}
|
||||
return job, nil
|
||||
|
@ -129,7 +129,7 @@ func TestReadPodsFromFile(t *testing.T) {
|
||||
for _, testCase := range testCases {
|
||||
func() {
|
||||
var versionedPod runtime.Object
|
||||
err := testapi.Default.Converter().Convert(&testCase.pod, &versionedPod)
|
||||
err := testapi.Default.Converter().Convert(&testCase.pod, &versionedPod, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("%s: error in versioning the pod: %v", testCase.desc, err)
|
||||
}
|
||||
|
@ -276,7 +276,7 @@ func TestExtractPodsFromHTTP(t *testing.T) {
|
||||
|
||||
for _, testCase := range testCases {
|
||||
var versionedPods runtime.Object
|
||||
err := testapi.Default.Converter().Convert(&testCase.pods, &versionedPods)
|
||||
err := testapi.Default.Converter().Convert(&testCase.pods, &versionedPods, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("%s: error in versioning the pods: %s", testCase.desc, err)
|
||||
}
|
||||
|
@ -53,8 +53,8 @@ func (t *thirdPartyObjectConverter) ConvertToVersion(in runtime.Object, outVersi
|
||||
}
|
||||
}
|
||||
|
||||
func (t *thirdPartyObjectConverter) Convert(in, out interface{}) error {
|
||||
return t.converter.Convert(in, out)
|
||||
func (t *thirdPartyObjectConverter) Convert(in, out, context interface{}) error {
|
||||
return t.converter.Convert(in, out, context)
|
||||
}
|
||||
|
||||
func (t *thirdPartyObjectConverter) ConvertFieldLabel(version, kind, label, value string) (string, string, error) {
|
||||
|
@ -145,16 +145,16 @@ func (c *parameterCodec) DecodeParameters(parameters url.Values, from unversione
|
||||
}
|
||||
targetGVK := targetGVKs[0]
|
||||
if targetGVK.GroupVersion() == from {
|
||||
return c.convertor.Convert(¶meters, into)
|
||||
return c.convertor.Convert(¶meters, into, nil)
|
||||
}
|
||||
input, err := c.creator.New(from.WithKind(targetGVK.Kind))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := c.convertor.Convert(¶meters, input); err != nil {
|
||||
if err := c.convertor.Convert(¶meters, input, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.convertor.Convert(input, into)
|
||||
return c.convertor.Convert(input, into, nil)
|
||||
}
|
||||
|
||||
// EncodeParameters converts the provided object into the to version, then converts that object to url.Values.
|
||||
|
@ -122,7 +122,7 @@ func TestStringMapConversion(t *testing.T) {
|
||||
|
||||
for k, tc := range testCases {
|
||||
out := &ExternalComplex{}
|
||||
if err := scheme.Convert(&tc.input, out); (tc.errFn == nil && err != nil) || (tc.errFn != nil && !tc.errFn(err)) {
|
||||
if err := scheme.Convert(&tc.input, out, nil); (tc.errFn == nil && err != nil) || (tc.errFn != nil && !tc.errFn(err)) {
|
||||
t.Errorf("%s: unexpected error: %v", k, err)
|
||||
continue
|
||||
} else if err != nil {
|
||||
|
@ -176,10 +176,12 @@ type ObjectVersioner interface {
|
||||
// ObjectConvertor converts an object to a different version.
|
||||
type ObjectConvertor interface {
|
||||
// Convert attempts to convert one object into another, or returns an error. This method does
|
||||
// not guarantee the in object is not mutated.
|
||||
Convert(in, out interface{}) error
|
||||
// not guarantee the in object is not mutated. The context argument will be passed to
|
||||
// all nested conversions.
|
||||
Convert(in, out, context interface{}) error
|
||||
// ConvertToVersion takes the provided object and converts it the provided version. This
|
||||
// method does not guarantee that the in object is not mutated.
|
||||
// method does not guarantee that the in object is not mutated. This method is similar to
|
||||
// Convert() but handles specific details of choosing the correct output version.
|
||||
ConvertToVersion(in Object, gv GroupVersioner) (out Object, err error)
|
||||
ConvertFieldLabel(version, kind, label, value string) (string, string, error)
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ func TestScheme(t *testing.T) {
|
||||
|
||||
// Test Convert
|
||||
external := &ExternalSimple{}
|
||||
err = scheme.Convert(simple, external)
|
||||
err = scheme.Convert(simple, external, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
@ -894,7 +894,7 @@ func TestMetaValuesUnregisteredConvert(t *testing.T) {
|
||||
|
||||
simple := &InternalSimple{TestString: "foo"}
|
||||
external := &ExternalSimple{}
|
||||
err = s.Convert(simple, external)
|
||||
err = s.Convert(simple, external, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ func (c *codec) Decode(data []byte, defaultGVK *unversioned.GroupVersionKind, in
|
||||
}
|
||||
return into, gvk, nil
|
||||
}
|
||||
if err := c.convertor.Convert(obj, into); err != nil {
|
||||
if err := c.convertor.Convert(obj, into, c.decodeVersion); err != nil {
|
||||
return nil, gvk, err
|
||||
}
|
||||
if isVersioned {
|
||||
|
@ -298,7 +298,7 @@ type checkConvertor struct {
|
||||
directConvert bool
|
||||
}
|
||||
|
||||
func (c *checkConvertor) Convert(in, out interface{}) error {
|
||||
func (c *checkConvertor) Convert(in, out, context interface{}) error {
|
||||
if !c.directConvert {
|
||||
return fmt.Errorf("unexpected call to Convert")
|
||||
}
|
||||
|
@ -168,7 +168,7 @@ func (s unstructuredJSONScheme) decodeToList(data []byte, list *UnstructuredList
|
||||
// sane implementation for APIs that require an object converter.
|
||||
type UnstructuredObjectConverter struct{}
|
||||
|
||||
func (UnstructuredObjectConverter) Convert(in, out interface{}) error {
|
||||
func (UnstructuredObjectConverter) Convert(in, out, context interface{}) error {
|
||||
unstructIn, ok := in.(*Unstructured)
|
||||
if !ok {
|
||||
return fmt.Errorf("input type %T in not valid for unstructured conversion", in)
|
||||
|
@ -41,7 +41,7 @@ type SchedulerServer struct {
|
||||
// NewSchedulerServer creates a new SchedulerServer with default parameters
|
||||
func NewSchedulerServer() *SchedulerServer {
|
||||
config := componentconfig.KubeSchedulerConfiguration{}
|
||||
api.Scheme.Convert(&v1alpha1.KubeSchedulerConfiguration{}, &config)
|
||||
api.Scheme.Convert(&v1alpha1.KubeSchedulerConfiguration{}, &config, nil)
|
||||
config.LeaderElection.LeaderElect = true
|
||||
s := SchedulerServer{
|
||||
KubeSchedulerConfiguration: config,
|
||||
|
Loading…
Reference in New Issue
Block a user