mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Merge pull request #24882 from brendandburns/3rdparty
Automatic merge from submit-queue Add support for 3rd party objects to kubectl label Fixes https://github.com/kubernetes/kubernetes/issues/24583 @kubernetes/rh-ux
This commit is contained in:
commit
6a234a2cc2
@ -210,7 +210,7 @@ func (o AnnotateOptions) RunAnnotate() error {
|
|||||||
return err
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -237,7 +237,7 @@ func RunLabel(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri
|
|||||||
}
|
}
|
||||||
outputObj = info.Object
|
outputObj = info.Object
|
||||||
} else {
|
} 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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/client/typed/discovery"
|
"k8s.io/kubernetes/pkg/client/typed/discovery"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
@ -594,3 +595,15 @@ func ParsePairs(pairArgs []string, pairType string, supportRemove bool) (newPair
|
|||||||
|
|
||||||
return
|
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"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
apitesting "k8s.io/kubernetes/pkg/api/testing"
|
apitesting "k8s.io/kubernetes/pkg/api/testing"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"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/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/validation/field"
|
"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)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user