diff --git a/hack/.golint_failures b/hack/.golint_failures index dfb01b7005c..de58733f6fd 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -103,7 +103,6 @@ pkg/controller/deployment/util pkg/controller/disruption pkg/controller/endpoint pkg/controller/garbagecollector -pkg/controller/garbagecollector/metaonly pkg/controller/job pkg/controller/namespace pkg/controller/namespace/deletion diff --git a/pkg/controller/garbagecollector/metaonly/BUILD b/pkg/controller/garbagecollector/metaonly/BUILD index d20f61e88b1..671a5e2b8e6 100644 --- a/pkg/controller/garbagecollector/metaonly/BUILD +++ b/pkg/controller/garbagecollector/metaonly/BUILD @@ -3,38 +3,18 @@ package(default_visibility = ["//visibility:public"]) load( "@io_bazel_rules_go//go:def.bzl", "go_library", - "go_test", ) go_library( name = "go_default_library", srcs = [ - "metaonly.go", "types.go", "zz_generated.deepcopy.go", ], importpath = "k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly", deps = [ - "//pkg/api/legacyscheme:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", - ], -) - -go_test( - name = "go_default_test", - srcs = ["metaonly_test.go"], - embed = [":go_default_library"], - deps = [ - "//pkg/apis/core/install:go_default_library", - "//vendor/k8s.io/api/core/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", ], ) diff --git a/pkg/controller/garbagecollector/metaonly/metaonly.go b/pkg/controller/garbagecollector/metaonly/metaonly.go deleted file mode 100644 index aec98ba3356..00000000000 --- a/pkg/controller/garbagecollector/metaonly/metaonly.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package metaonly - -import ( - "fmt" - "strings" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/runtime/serializer" - "k8s.io/kubernetes/pkg/api/legacyscheme" -) - -type metaOnlyJSONScheme struct{} - -// This function can be extended to mapping different gvk to different MetadataOnlyObject, -// which embedded with different version of ObjectMeta. Currently the system -// only supports metav1.ObjectMeta. -func gvkToMetadataOnlyObject(gvk schema.GroupVersionKind) runtime.Object { - if strings.HasSuffix(gvk.Kind, "List") { - return &MetadataOnlyObjectList{} - } else { - return &MetadataOnlyObject{} - } -} - -func NewMetadataCodecFactory() serializer.CodecFactory { - // populating another scheme from legacyscheme.Scheme, registering every kind with - // MetadataOnlyObject (or MetadataOnlyObjectList). - scheme := runtime.NewScheme() - allTypes := legacyscheme.Scheme.AllKnownTypes() - for kind := range allTypes { - if kind.Version == runtime.APIVersionInternal { - continue - } - if kind == metav1.Unversioned.WithKind("Status") { - // this is added below as unversioned - continue - } - metaOnlyObject := gvkToMetadataOnlyObject(kind) - scheme.AddKnownTypeWithName(kind, metaOnlyObject) - } - scheme.AddUnversionedTypes(metav1.Unversioned, &metav1.Status{}) - return serializer.NewCodecFactory(scheme) -} - -// String converts a MetadataOnlyObject to a human-readable string. -func (metaOnly MetadataOnlyObject) String() string { - return fmt.Sprintf("%s/%s, name: %s, DeletionTimestamp:%v", metaOnly.TypeMeta.APIVersion, metaOnly.TypeMeta.Kind, metaOnly.ObjectMeta.Name, metaOnly.ObjectMeta.DeletionTimestamp) -} diff --git a/pkg/controller/garbagecollector/metaonly/metaonly_test.go b/pkg/controller/garbagecollector/metaonly/metaonly_test.go deleted file mode 100644 index 2bdf9c879d5..00000000000 --- a/pkg/controller/garbagecollector/metaonly/metaonly_test.go +++ /dev/null @@ -1,164 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package metaonly - -import ( - "encoding/json" - "reflect" - "testing" - - "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/runtime/serializer" - _ "k8s.io/kubernetes/pkg/apis/core/install" -) - -func getPod() *v1.Pod { - return &v1.Pod{ - TypeMeta: metav1.TypeMeta{ - Kind: "Pod", - APIVersion: "v1", - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "pod", - OwnerReferences: []metav1.OwnerReference{ - {UID: "1234"}, - }, - }, - Spec: v1.PodSpec{ - Containers: []v1.Container{ - { - Name: "fake-name", - Image: "fakeimage", - }, - }, - }, - } -} - -func getPodJson(t *testing.T) []byte { - data, err := json.Marshal(getPod()) - if err != nil { - t.Fatal(err) - } - return data -} - -func getPodListJson(t *testing.T) []byte { - data, err := json.Marshal(&v1.PodList{ - TypeMeta: metav1.TypeMeta{ - Kind: "PodList", - APIVersion: "v1", - }, - Items: []v1.Pod{ - *getPod(), - *getPod(), - }, - }) - if err != nil { - t.Fatal(err) - } - return data -} - -func verfiyMetadata(description string, t *testing.T, in *MetadataOnlyObject) { - pod := getPod() - if e, a := pod.ObjectMeta, in.ObjectMeta; !reflect.DeepEqual(e, a) { - t.Errorf("%s: expected %#v, got %#v", description, e, a) - } -} - -func TestDecodeToMetadataOnlyObject(t *testing.T) { - data := getPodJson(t) - cf := serializer.DirectCodecFactory{CodecFactory: NewMetadataCodecFactory()} - info, ok := runtime.SerializerInfoForMediaType(cf.SupportedMediaTypes(), runtime.ContentTypeJSON) - if !ok { - t.Fatalf("expected to get a JSON serializer") - } - codec := cf.DecoderToVersion(info.Serializer, schema.GroupVersion{Group: "SOMEGROUP", Version: "SOMEVERSION"}) - // decode with into - into := &MetadataOnlyObject{} - ret, _, err := codec.Decode(data, nil, into) - if err != nil { - t.Fatal(err) - } - metaOnly, ok := ret.(*MetadataOnlyObject) - if !ok { - t.Fatalf("expected ret to be *runtime.MetadataOnlyObject") - } - verfiyMetadata("check returned metaonly with into", t, metaOnly) - verfiyMetadata("check into", t, into) - // decode without into - ret, _, err = codec.Decode(data, nil, nil) - if err != nil { - t.Fatal(err) - } - metaOnly, ok = ret.(*MetadataOnlyObject) - if !ok { - t.Fatalf("expected ret to be *runtime.MetadataOnlyObject") - } - verfiyMetadata("check returned metaonly without into", t, metaOnly) -} - -func verifyListMetadata(t *testing.T, metaOnlyList *MetadataOnlyObjectList) { - items, err := meta.ExtractList(metaOnlyList) - if err != nil { - t.Fatal(err) - } - for _, item := range items { - metaOnly, ok := item.(*MetadataOnlyObject) - if !ok { - t.Fatalf("expected item to be *MetadataOnlyObject") - } - verfiyMetadata("check list", t, metaOnly) - } -} - -func TestDecodeToMetadataOnlyObjectList(t *testing.T) { - data := getPodListJson(t) - cf := serializer.DirectCodecFactory{CodecFactory: NewMetadataCodecFactory()} - info, ok := runtime.SerializerInfoForMediaType(cf.SupportedMediaTypes(), runtime.ContentTypeJSON) - if !ok { - t.Fatalf("expected to get a JSON serializer") - } - codec := cf.DecoderToVersion(info.Serializer, schema.GroupVersion{Group: "SOMEGROUP", Version: "SOMEVERSION"}) - // decode with into - into := &MetadataOnlyObjectList{} - ret, _, err := codec.Decode(data, nil, into) - if err != nil { - t.Fatal(err) - } - metaOnlyList, ok := ret.(*MetadataOnlyObjectList) - if !ok { - t.Fatalf("expected ret to be *runtime.UnstructuredList") - } - verifyListMetadata(t, metaOnlyList) - verifyListMetadata(t, into) - // decode without into - ret, _, err = codec.Decode(data, nil, nil) - if err != nil { - t.Fatal(err) - } - metaOnlyList, ok = ret.(*MetadataOnlyObjectList) - if !ok { - t.Fatalf("expected ret to be *runtime.UnstructuredList") - } - verifyListMetadata(t, metaOnlyList) -}