mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Add support for labelling 3rd party objects
This commit is contained in:
		@@ -210,7 +210,7 @@ func (o AnnotateOptions) RunAnnotate() error {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		obj, err := info.Mapping.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion())
 | 
			
		||||
		obj, err := cmdutil.MaybeConvertObject(info.Object, info.Mapping.GroupVersionKind.GroupVersion(), info.Mapping)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -237,7 +237,7 @@ func RunLabel(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri
 | 
			
		||||
			}
 | 
			
		||||
			outputObj = info.Object
 | 
			
		||||
		} else {
 | 
			
		||||
			obj, err := info.Mapping.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion())
 | 
			
		||||
			obj, err := cmdutil.MaybeConvertObject(info.Object, info.Mapping.GroupVersionKind.GroupVersion(), info.Mapping)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/meta"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/unversioned"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/client/typed/discovery"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl"
 | 
			
		||||
@@ -594,3 +595,15 @@ func ParsePairs(pairArgs []string, pairType string, supportRemove bool) (newPair
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MaybeConvertObject attempts to convert an object to a specific group/version.  If the object is
 | 
			
		||||
// a third party resource it is simply passed through.
 | 
			
		||||
func MaybeConvertObject(obj runtime.Object, gv unversioned.GroupVersion, converter runtime.ObjectConvertor) (runtime.Object, error) {
 | 
			
		||||
	switch obj.(type) {
 | 
			
		||||
	case *extensions.ThirdPartyResourceData:
 | 
			
		||||
		// conversion is not supported for 3rd party objects
 | 
			
		||||
		return obj, nil
 | 
			
		||||
	default:
 | 
			
		||||
		return converter.ConvertToVersion(obj, gv)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,8 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/testapi"
 | 
			
		||||
	apitesting "k8s.io/kubernetes/pkg/api/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/unversioned"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/v1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/validation/field"
 | 
			
		||||
)
 | 
			
		||||
@@ -302,3 +304,53 @@ func TestDumpReaderToFile(t *testing.T) {
 | 
			
		||||
		t.Fatalf("Wrong file content %s != %s", testString, stringData)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestMaybeConvert(t *testing.T) {
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		input    runtime.Object
 | 
			
		||||
		gv       unversioned.GroupVersion
 | 
			
		||||
		expected runtime.Object
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			input: &api.Pod{
 | 
			
		||||
				ObjectMeta: api.ObjectMeta{
 | 
			
		||||
					Name: "foo",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			gv: unversioned.GroupVersion{Group: "", Version: "v1"},
 | 
			
		||||
			expected: &v1.Pod{
 | 
			
		||||
				TypeMeta: unversioned.TypeMeta{
 | 
			
		||||
					APIVersion: "v1",
 | 
			
		||||
					Kind:       "Pod",
 | 
			
		||||
				},
 | 
			
		||||
				ObjectMeta: v1.ObjectMeta{
 | 
			
		||||
					Name: "foo",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			input: &extensions.ThirdPartyResourceData{
 | 
			
		||||
				ObjectMeta: api.ObjectMeta{
 | 
			
		||||
					Name: "foo",
 | 
			
		||||
				},
 | 
			
		||||
				Data: []byte("this is some data"),
 | 
			
		||||
			},
 | 
			
		||||
			expected: &extensions.ThirdPartyResourceData{
 | 
			
		||||
				ObjectMeta: api.ObjectMeta{
 | 
			
		||||
					Name: "foo",
 | 
			
		||||
				},
 | 
			
		||||
				Data: []byte("this is some data"),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		obj, err := MaybeConvertObject(test.input, test.gv, testapi.Default.Converter())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Errorf("unexpected error: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
		if !reflect.DeepEqual(test.expected, obj) {
 | 
			
		||||
			t.Errorf("expected:\n%#v\nsaw:\n%#v\n", test.expected, obj)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user