diff --git a/pkg/kn/commands/revision_describe.go b/pkg/kn/commands/revision_describe.go index 68c595a0a2..5ef5d8a11b 100644 --- a/pkg/kn/commands/revision_describe.go +++ b/pkg/kn/commands/revision_describe.go @@ -16,10 +16,11 @@ package commands import ( "errors" + "github.com/knative/client/pkg/serving" + "github.com/knative/serving/pkg/apis/serving/v1alpha1" "github.com/spf13/cobra" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/cli-runtime/pkg/genericclioptions" ) @@ -51,10 +52,10 @@ func NewRevisionDescribeCommand(p *KnParams) *cobra.Command { if err != nil { return err } - revision.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{ - Group: "knative.dev", - Version: "v1alpha1", - Kind: "Revision"}) + if err := serving.UpdateGroupVersionKind(revision, v1alpha1.SchemeGroupVersion); err != nil { + return err + } + err = printer.PrintObj(revision, cmd.OutOrStdout()) if err != nil { return err diff --git a/pkg/kn/commands/revision_get.go b/pkg/kn/commands/revision_get.go index 33d9f8b965..01980e3ceb 100644 --- a/pkg/kn/commands/revision_get.go +++ b/pkg/kn/commands/revision_get.go @@ -16,10 +16,10 @@ package commands import ( "fmt" - + "github.com/knative/client/pkg/serving" + "github.com/knative/serving/pkg/apis/serving/v1alpha1" "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" ) // NewRevisionGetCommand represents 'kn revision get' command @@ -46,10 +46,10 @@ func NewRevisionGetCommand(p *KnParams) *cobra.Command { fmt.Fprintf(cmd.OutOrStdout(), "No resources found.\n") return nil } - revision.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{ - Group: "knative.dev", - Version: "v1alpha1", - Kind: "revision"}) + if err := serving.UpdateGroupVersionKind(revision, v1alpha1.SchemeGroupVersion); err != nil { + return err + } + printer, err := revisionGetFlags.ToPrinter() if err != nil { return err diff --git a/pkg/kn/commands/service_describe.go b/pkg/kn/commands/service_describe.go index 7052ddad43..5cff1434bd 100644 --- a/pkg/kn/commands/service_describe.go +++ b/pkg/kn/commands/service_describe.go @@ -16,10 +16,11 @@ package commands import ( "errors" + "github.com/knative/client/pkg/serving" + "github.com/knative/serving/pkg/apis/serving/v1alpha1" "github.com/spf13/cobra" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/cli-runtime/pkg/genericclioptions" ) @@ -51,10 +52,10 @@ func NewServiceDescribeCommand(p *KnParams) *cobra.Command { if err != nil { return err } - describeService.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{ - Group: "knative.dev", - Version: "v1alpha1", - Kind: "Service"}) + if err := serving.UpdateGroupVersionKind(describeService, v1alpha1.SchemeGroupVersion); err != nil { + return err + } + err = printer.PrintObj(describeService, cmd.OutOrStdout()) if err != nil { return err diff --git a/pkg/kn/commands/service_get.go b/pkg/kn/commands/service_get.go index 1f22129649..30811bdf04 100644 --- a/pkg/kn/commands/service_get.go +++ b/pkg/kn/commands/service_get.go @@ -16,10 +16,10 @@ package commands import ( "fmt" - + "github.com/knative/client/pkg/serving" + "github.com/knative/serving/pkg/apis/serving/v1alpha1" "github.com/spf13/cobra" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" ) // NewServiceGetCommand represents 'kn service get' command @@ -46,10 +46,9 @@ func NewServiceGetCommand(p *KnParams) *cobra.Command { fmt.Fprintf(cmd.OutOrStdout(), "No resources found.\n") return nil } - service.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{ - Group: "knative.dev", - Version: "v1alpha1", - Kind: "Service"}) + if err := serving.UpdateGroupVersionKind(service, v1alpha1.SchemeGroupVersion); err != nil { + return err + } printer, err := serviceGetFlags.ToPrinter() if err != nil { diff --git a/pkg/serving/schema_handling.go b/pkg/serving/schema_handling.go new file mode 100644 index 0000000000..18183ef978 --- /dev/null +++ b/pkg/serving/schema_handling.go @@ -0,0 +1,31 @@ +package serving + +import ( + "errors" + "fmt" + "github.com/knative/serving/pkg/client/clientset/versioned/scheme" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +func UpdateGroupVersionKind(obj runtime.Object, gv schema.GroupVersion) error { + gvk, err := getGroupVersionKind(obj, gv) + if err != nil { + return err + } + obj.GetObjectKind().SetGroupVersionKind(*gvk) + return nil +} + +func getGroupVersionKind(obj runtime.Object, gv schema.GroupVersion) (*schema.GroupVersionKind, error) { + gvks, _, err := scheme.Scheme.ObjectKinds(obj) + if err != nil { + return nil, err + } + for _, gvk := range gvks { + if gvk.GroupVersion() == gv { + return &gvk, nil + } + } + return nil, errors.New(fmt.Sprintf("no group version %s registered in %s", gv, scheme.Scheme.Name())) +} diff --git a/pkg/serving/schema_handling_test.go b/pkg/serving/schema_handling_test.go new file mode 100644 index 0000000000..22d73f3273 --- /dev/null +++ b/pkg/serving/schema_handling_test.go @@ -0,0 +1,29 @@ +package serving + +import ( + "github.com/knative/serving/pkg/apis/serving/v1alpha1" + "k8s.io/apimachinery/pkg/runtime/schema" + "testing" +) + +func TestGVKUpdate(t *testing.T) { + service := v1alpha1.Service{} + err := UpdateGroupVersionKind(&service,v1alpha1.SchemeGroupVersion) + if err != nil { + t.Fatalf("cannot update GVK to a service %v",err) + } + if service.Kind != "Service" { + t.Fatalf("wrong kind '%s'", service.Kind) + } + if service.APIVersion != v1alpha1.SchemeGroupVersion.Group + "/" + v1alpha1.SchemeGroupVersion.Version { + t.Fatalf("wrong version '%s'", service.APIVersion) + } +} + +func TestGVKUpdateNegative(t *testing.T) { + service := v1alpha1.Service{} + err := UpdateGroupVersionKind(&service,schema.GroupVersion{Group: "bla", Version: "blub"}) + if err == nil { + t.Fatal("expect an error for an unregistered group version") + } +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 8996c447e6..621f404836 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -76,14 +76,14 @@ github.com/knative/pkg/configmap github.com/knative/serving/pkg/apis/serving github.com/knative/serving/pkg/apis/serving/v1alpha1 github.com/knative/serving/pkg/client/clientset/versioned/typed/serving/v1alpha1 +github.com/knative/serving/pkg/client/clientset/versioned/scheme github.com/knative/serving/pkg/apis/autoscaling github.com/knative/serving/pkg/apis/networking github.com/knative/serving/pkg/apis/networking/v1alpha1 github.com/knative/serving/pkg/apis/serving/v1beta1 -github.com/knative/serving/pkg/client/clientset/versioned/scheme github.com/knative/serving/pkg/client/clientset/versioned/typed/serving/v1alpha1/fake -github.com/knative/serving/pkg/apis/config github.com/knative/serving/pkg/apis/autoscaling/v1alpha1 +github.com/knative/serving/pkg/apis/config # github.com/knative/test-infra v0.0.0-20190517181617-d1bb39bbca6e github.com/knative/test-infra/scripts # github.com/magiconair/properties v1.8.0 @@ -201,10 +201,10 @@ k8s.io/apimachinery/pkg/api/resource k8s.io/apimachinery/pkg/apis/meta/v1 k8s.io/apimachinery/pkg/apis/meta/v1beta1 k8s.io/apimachinery/pkg/runtime -k8s.io/apimachinery/pkg/runtime/schema k8s.io/apimachinery/pkg/util/duration k8s.io/apimachinery/pkg/api/meta k8s.io/apimachinery/pkg/util/runtime +k8s.io/apimachinery/pkg/runtime/schema k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/validation k8s.io/apimachinery/pkg/util/sets