From be0750f6d6af6980c3d586e0ac9591e7d5dc2f12 Mon Sep 17 00:00:00 2001 From: yue9944882 <291271447@qq.com> Date: Fri, 8 Nov 2019 23:22:00 +0800 Subject: [PATCH 1/5] rm -rf staging/src/k8s.io/apiextensions-apiserver/pkg/client --- .../client/clientset/internalclientset/BUILD | 40 ---- .../clientset/internalclientset/clientset.go | 97 ---------- .../client/clientset/internalclientset/doc.go | 20 -- .../clientset/internalclientset/fake/BUILD | 45 ----- .../fake/clientset_generated.go | 82 -------- .../clientset/internalclientset/fake/doc.go | 20 -- .../internalclientset/fake/register.go | 56 ------ .../clientset/internalclientset/scheme/BUILD | 36 ---- .../clientset/internalclientset/scheme/doc.go | 20 -- .../internalclientset/scheme/register.go | 41 ---- .../typed/apiextensions/internalversion/BUILD | 42 ---- .../internalversion/apiextensions_client.go | 96 ---------- .../customresourcedefinition.go | 180 ------------------ .../apiextensions/internalversion/doc.go | 20 -- .../apiextensions/internalversion/fake/BUILD | 41 ---- .../apiextensions/internalversion/fake/doc.go | 20 -- .../fake/fake_apiextensions_client.go | 40 ---- .../fake/fake_customresourcedefinition.go | 131 ------------- .../internalversion/generated_expansion.go | 21 -- .../client/informers/internalversion/BUILD | 43 ----- .../internalversion/apiextensions/BUILD | 33 ---- .../apiextensions/interface.go | 46 ----- .../apiextensions/internalversion/BUILD | 39 ---- .../customresourcedefinition.go | 88 --------- .../internalversion/interface.go | 45 ----- .../informers/internalversion/factory.go | 180 ------------------ .../informers/internalversion/generic.go | 62 ------ .../internalversion/internalinterfaces/BUILD | 32 ---- .../internalinterfaces/factory_interfaces.go | 40 ---- .../apiextensions/internalversion/BUILD | 35 ---- .../customresourcedefinition.go | 65 ------- .../internalversion/expansion_generated.go | 23 --- 32 files changed, 1779 deletions(-) delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/clientset.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/doc.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/clientset_generated.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/doc.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/register.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/doc.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/register.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/apiextensions_client.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/customresourcedefinition.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/doc.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/doc.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/fake_apiextensions_client.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/fake_customresourcedefinition.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/generated_expansion.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/interface.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/customresourcedefinition.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/interface.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/factory.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/generic.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces/factory_interfaces.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/BUILD delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/customresourcedefinition.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/expansion_generated.go diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/BUILD deleted file mode 100644 index a40d80a59f7..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "clientset.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/client-go/discovery:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", - "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake:all-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme:all-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:all-srcs", - ], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/clientset.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/clientset.go deleted file mode 100644 index af78ee5ad32..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/clientset.go +++ /dev/null @@ -1,97 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package internalclientset - -import ( - "fmt" - - apiextensionsinternalversion "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion" - discovery "k8s.io/client-go/discovery" - rest "k8s.io/client-go/rest" - flowcontrol "k8s.io/client-go/util/flowcontrol" -) - -type Interface interface { - Discovery() discovery.DiscoveryInterface - Apiextensions() apiextensionsinternalversion.ApiextensionsInterface -} - -// Clientset contains the clients for groups. Each group has exactly one -// version included in a Clientset. -type Clientset struct { - *discovery.DiscoveryClient - apiextensions *apiextensionsinternalversion.ApiextensionsClient -} - -// Apiextensions retrieves the ApiextensionsClient -func (c *Clientset) Apiextensions() apiextensionsinternalversion.ApiextensionsInterface { - return c.apiextensions -} - -// Discovery retrieves the DiscoveryClient -func (c *Clientset) Discovery() discovery.DiscoveryInterface { - if c == nil { - return nil - } - return c.DiscoveryClient -} - -// NewForConfig creates a new Clientset for the given config. -// If config's RateLimiter is not set and QPS and Burst are acceptable, -// NewForConfig will generate a rate-limiter in configShallowCopy. -func NewForConfig(c *rest.Config) (*Clientset, error) { - configShallowCopy := *c - if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { - if configShallowCopy.Burst <= 0 { - return nil, fmt.Errorf("Burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") - } - configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) - } - var cs Clientset - var err error - cs.apiextensions, err = apiextensionsinternalversion.NewForConfig(&configShallowCopy) - if err != nil { - return nil, err - } - - cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) - if err != nil { - return nil, err - } - return &cs, nil -} - -// NewForConfigOrDie creates a new Clientset for the given config and -// panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *Clientset { - var cs Clientset - cs.apiextensions = apiextensionsinternalversion.NewForConfigOrDie(c) - - cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) - return &cs -} - -// New creates a new Clientset for the given RESTClient. -func New(c rest.Interface) *Clientset { - var cs Clientset - cs.apiextensions = apiextensionsinternalversion.New(c) - - cs.DiscoveryClient = discovery.NewDiscoveryClient(c) - return &cs -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/doc.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/doc.go deleted file mode 100644 index 01b3d5e0f63..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// This package has the automatically generated clientset. -package internalclientset diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/BUILD deleted file mode 100644 index 14e7b5b166f..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "clientset_generated.go", - "doc.go", - "register.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", - "//staging/src/k8s.io/client-go/discovery:go_default_library", - "//staging/src/k8s.io/client-go/discovery/fake:go_default_library", - "//staging/src/k8s.io/client-go/testing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/clientset_generated.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/clientset_generated.go deleted file mode 100644 index fcfb73e23e9..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/clientset_generated.go +++ /dev/null @@ -1,82 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset" - apiextensionsinternalversion "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion" - fakeapiextensionsinternalversion "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/discovery" - fakediscovery "k8s.io/client-go/discovery/fake" - "k8s.io/client-go/testing" -) - -// NewSimpleClientset returns a clientset that will respond with the provided objects. -// It's backed by a very simple object tracker that processes creates, updates and deletions as-is, -// without applying any validations and/or defaults. It shouldn't be considered a replacement -// for a real clientset and is mostly useful in simple unit tests. -func NewSimpleClientset(objects ...runtime.Object) *Clientset { - o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) - for _, obj := range objects { - if err := o.Add(obj); err != nil { - panic(err) - } - } - - cs := &Clientset{tracker: o} - cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} - cs.AddReactor("*", "*", testing.ObjectReaction(o)) - cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { - gvr := action.GetResource() - ns := action.GetNamespace() - watch, err := o.Watch(gvr, ns) - if err != nil { - return false, nil, err - } - return true, watch, nil - }) - - return cs -} - -// Clientset implements clientset.Interface. Meant to be embedded into a -// struct to get a default implementation. This makes faking out just the method -// you want to test easier. -type Clientset struct { - testing.Fake - discovery *fakediscovery.FakeDiscovery - tracker testing.ObjectTracker -} - -func (c *Clientset) Discovery() discovery.DiscoveryInterface { - return c.discovery -} - -func (c *Clientset) Tracker() testing.ObjectTracker { - return c.tracker -} - -var _ clientset.Interface = &Clientset{} - -// Apiextensions retrieves the ApiextensionsClient -func (c *Clientset) Apiextensions() apiextensionsinternalversion.ApiextensionsInterface { - return &fakeapiextensionsinternalversion.FakeApiextensions{Fake: &c.Fake} -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/doc.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/doc.go deleted file mode 100644 index 9b99e716709..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// This package has the automatically generated fake clientset. -package fake diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/register.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/register.go deleted file mode 100644 index 884c7095db1..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/fake/register.go +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - apiextensionsinternalversion "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - schema "k8s.io/apimachinery/pkg/runtime/schema" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" -) - -var scheme = runtime.NewScheme() -var codecs = serializer.NewCodecFactory(scheme) -var parameterCodec = runtime.NewParameterCodec(scheme) -var localSchemeBuilder = runtime.SchemeBuilder{ - apiextensionsinternalversion.AddToScheme, -} - -// AddToScheme adds all types of this clientset into the given scheme. This allows composition -// of clientsets, like in: -// -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) -// -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) -// -// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types -// correctly. -var AddToScheme = localSchemeBuilder.AddToScheme - -func init() { - v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) - utilruntime.Must(AddToScheme(scheme)) -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/BUILD deleted file mode 100644 index 3945ab1989e..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "register.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/doc.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/doc.go deleted file mode 100644 index 7dc3756168f..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// This package contains the scheme of the automatically generated clientset. -package scheme diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/register.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/register.go deleted file mode 100644 index 01df98a6bed..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme/register.go +++ /dev/null @@ -1,41 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package scheme - -import ( - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - schema "k8s.io/apimachinery/pkg/runtime/schema" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" -) - -var Scheme = runtime.NewScheme() -var Codecs = serializer.NewCodecFactory(Scheme) -var ParameterCodec = runtime.NewParameterCodec(Scheme) - -func init() { - v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) - Install(Scheme) -} - -// Install registers the API group and adds types to a scheme -func Install(scheme *runtime.Scheme) { - apiextensions.Install(scheme) -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/BUILD deleted file mode 100644 index cba0c42a902..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "apiextensions_client.go", - "customresourcedefinition.go", - "doc.go", - "generated_expansion.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake:all-srcs", - ], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/apiextensions_client.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/apiextensions_client.go deleted file mode 100644 index 31b34404c4e..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/apiextensions_client.go +++ /dev/null @@ -1,96 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package internalversion - -import ( - "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme" - rest "k8s.io/client-go/rest" -) - -type ApiextensionsInterface interface { - RESTClient() rest.Interface - CustomResourceDefinitionsGetter -} - -// ApiextensionsClient is used to interact with features provided by the apiextensions.k8s.io group. -type ApiextensionsClient struct { - restClient rest.Interface -} - -func (c *ApiextensionsClient) CustomResourceDefinitions() CustomResourceDefinitionInterface { - return newCustomResourceDefinitions(c) -} - -// NewForConfig creates a new ApiextensionsClient for the given config. -func NewForConfig(c *rest.Config) (*ApiextensionsClient, error) { - config := *c - if err := setConfigDefaults(&config); err != nil { - return nil, err - } - client, err := rest.RESTClientFor(&config) - if err != nil { - return nil, err - } - return &ApiextensionsClient{client}, nil -} - -// NewForConfigOrDie creates a new ApiextensionsClient for the given config and -// panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *ApiextensionsClient { - client, err := NewForConfig(c) - if err != nil { - panic(err) - } - return client -} - -// New creates a new ApiextensionsClient for the given RESTClient. -func New(c rest.Interface) *ApiextensionsClient { - return &ApiextensionsClient{c} -} - -func setConfigDefaults(config *rest.Config) error { - config.APIPath = "/apis" - if config.UserAgent == "" { - config.UserAgent = rest.DefaultKubernetesUserAgent() - } - if config.GroupVersion == nil || config.GroupVersion.Group != scheme.Scheme.PrioritizedVersionsForGroup("apiextensions.k8s.io")[0].Group { - gv := scheme.Scheme.PrioritizedVersionsForGroup("apiextensions.k8s.io")[0] - config.GroupVersion = &gv - } - config.NegotiatedSerializer = scheme.Codecs - - if config.QPS == 0 { - config.QPS = 5 - } - if config.Burst == 0 { - config.Burst = 10 - } - - return nil -} - -// RESTClient returns a RESTClient that is used to communicate -// with API server by this client implementation. -func (c *ApiextensionsClient) RESTClient() rest.Interface { - if c == nil { - return nil - } - return c.restClient -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/customresourcedefinition.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/customresourcedefinition.go deleted file mode 100644 index 5724386879f..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/customresourcedefinition.go +++ /dev/null @@ -1,180 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package internalversion - -import ( - "time" - - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - scheme "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" -) - -// CustomResourceDefinitionsGetter has a method to return a CustomResourceDefinitionInterface. -// A group's client should implement this interface. -type CustomResourceDefinitionsGetter interface { - CustomResourceDefinitions() CustomResourceDefinitionInterface -} - -// CustomResourceDefinitionInterface has methods to work with CustomResourceDefinition resources. -type CustomResourceDefinitionInterface interface { - Create(*apiextensions.CustomResourceDefinition) (*apiextensions.CustomResourceDefinition, error) - Update(*apiextensions.CustomResourceDefinition) (*apiextensions.CustomResourceDefinition, error) - UpdateStatus(*apiextensions.CustomResourceDefinition) (*apiextensions.CustomResourceDefinition, error) - Delete(name string, options *v1.DeleteOptions) error - DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*apiextensions.CustomResourceDefinition, error) - List(opts v1.ListOptions) (*apiextensions.CustomResourceDefinitionList, error) - Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *apiextensions.CustomResourceDefinition, err error) - CustomResourceDefinitionExpansion -} - -// customResourceDefinitions implements CustomResourceDefinitionInterface -type customResourceDefinitions struct { - client rest.Interface -} - -// newCustomResourceDefinitions returns a CustomResourceDefinitions -func newCustomResourceDefinitions(c *ApiextensionsClient) *customResourceDefinitions { - return &customResourceDefinitions{ - client: c.RESTClient(), - } -} - -// Get takes name of the customResourceDefinition, and returns the corresponding customResourceDefinition object, and an error if there is any. -func (c *customResourceDefinitions) Get(name string, options v1.GetOptions) (result *apiextensions.CustomResourceDefinition, err error) { - result = &apiextensions.CustomResourceDefinition{} - err = c.client.Get(). - Resource("customresourcedefinitions"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of CustomResourceDefinitions that match those selectors. -func (c *customResourceDefinitions) List(opts v1.ListOptions) (result *apiextensions.CustomResourceDefinitionList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &apiextensions.CustomResourceDefinitionList{} - err = c.client.Get(). - Resource("customresourcedefinitions"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested customResourceDefinitions. -func (c *customResourceDefinitions) Watch(opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Resource("customresourcedefinitions"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch() -} - -// Create takes the representation of a customResourceDefinition and creates it. Returns the server's representation of the customResourceDefinition, and an error, if there is any. -func (c *customResourceDefinitions) Create(customResourceDefinition *apiextensions.CustomResourceDefinition) (result *apiextensions.CustomResourceDefinition, err error) { - result = &apiextensions.CustomResourceDefinition{} - err = c.client.Post(). - Resource("customresourcedefinitions"). - Body(customResourceDefinition). - Do(). - Into(result) - return -} - -// Update takes the representation of a customResourceDefinition and updates it. Returns the server's representation of the customResourceDefinition, and an error, if there is any. -func (c *customResourceDefinitions) Update(customResourceDefinition *apiextensions.CustomResourceDefinition) (result *apiextensions.CustomResourceDefinition, err error) { - result = &apiextensions.CustomResourceDefinition{} - err = c.client.Put(). - Resource("customresourcedefinitions"). - Name(customResourceDefinition.Name). - Body(customResourceDefinition). - Do(). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *customResourceDefinitions) UpdateStatus(customResourceDefinition *apiextensions.CustomResourceDefinition) (result *apiextensions.CustomResourceDefinition, err error) { - result = &apiextensions.CustomResourceDefinition{} - err = c.client.Put(). - Resource("customresourcedefinitions"). - Name(customResourceDefinition.Name). - SubResource("status"). - Body(customResourceDefinition). - Do(). - Into(result) - return -} - -// Delete takes name of the customResourceDefinition and deletes it. Returns an error if one occurs. -func (c *customResourceDefinitions) Delete(name string, options *v1.DeleteOptions) error { - return c.client.Delete(). - Resource("customresourcedefinitions"). - Name(name). - Body(options). - Do(). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *customResourceDefinitions) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Resource("customresourcedefinitions"). - VersionedParams(&listOptions, scheme.ParameterCodec). - Timeout(timeout). - Body(options). - Do(). - Error() -} - -// Patch applies the patch and returns the patched customResourceDefinition. -func (c *customResourceDefinitions) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *apiextensions.CustomResourceDefinition, err error) { - result = &apiextensions.CustomResourceDefinition{} - err = c.client.Patch(pt). - Resource("customresourcedefinitions"). - SubResource(subresources...). - Name(name). - Body(data). - Do(). - Into(result) - return -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/doc.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/doc.go deleted file mode 100644 index 86602442bab..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// This package has the automatically generated typed clients. -package internalversion diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/BUILD deleted file mode 100644 index 720d13fcf0f..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "fake_apiextensions_client.go", - "fake_customresourcedefinition.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", - "//staging/src/k8s.io/client-go/testing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/doc.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/doc.go deleted file mode 100644 index 16f44399065..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// Package fake has the automatically generated clients. -package fake diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/fake_apiextensions_client.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/fake_apiextensions_client.go deleted file mode 100644 index 1a601e5b098..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/fake_apiextensions_client.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - internalversion "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion" - rest "k8s.io/client-go/rest" - testing "k8s.io/client-go/testing" -) - -type FakeApiextensions struct { - *testing.Fake -} - -func (c *FakeApiextensions) CustomResourceDefinitions() internalversion.CustomResourceDefinitionInterface { - return &FakeCustomResourceDefinitions{c} -} - -// RESTClient returns a RESTClient that is used to communicate -// with API server by this client implementation. -func (c *FakeApiextensions) RESTClient() rest.Interface { - var ret *rest.RESTClient - return ret -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/fake_customresourcedefinition.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/fake_customresourcedefinition.go deleted file mode 100644 index 037c9342ef8..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/fake/fake_customresourcedefinition.go +++ /dev/null @@ -1,131 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - testing "k8s.io/client-go/testing" -) - -// FakeCustomResourceDefinitions implements CustomResourceDefinitionInterface -type FakeCustomResourceDefinitions struct { - Fake *FakeApiextensions -} - -var customresourcedefinitionsResource = schema.GroupVersionResource{Group: "apiextensions.k8s.io", Version: "", Resource: "customresourcedefinitions"} - -var customresourcedefinitionsKind = schema.GroupVersionKind{Group: "apiextensions.k8s.io", Version: "", Kind: "CustomResourceDefinition"} - -// Get takes name of the customResourceDefinition, and returns the corresponding customResourceDefinition object, and an error if there is any. -func (c *FakeCustomResourceDefinitions) Get(name string, options v1.GetOptions) (result *apiextensions.CustomResourceDefinition, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootGetAction(customresourcedefinitionsResource, name), &apiextensions.CustomResourceDefinition{}) - if obj == nil { - return nil, err - } - return obj.(*apiextensions.CustomResourceDefinition), err -} - -// List takes label and field selectors, and returns the list of CustomResourceDefinitions that match those selectors. -func (c *FakeCustomResourceDefinitions) List(opts v1.ListOptions) (result *apiextensions.CustomResourceDefinitionList, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootListAction(customresourcedefinitionsResource, customresourcedefinitionsKind, opts), &apiextensions.CustomResourceDefinitionList{}) - if obj == nil { - return nil, err - } - - label, _, _ := testing.ExtractFromListOptions(opts) - if label == nil { - label = labels.Everything() - } - list := &apiextensions.CustomResourceDefinitionList{ListMeta: obj.(*apiextensions.CustomResourceDefinitionList).ListMeta} - for _, item := range obj.(*apiextensions.CustomResourceDefinitionList).Items { - if label.Matches(labels.Set(item.Labels)) { - list.Items = append(list.Items, item) - } - } - return list, err -} - -// Watch returns a watch.Interface that watches the requested customResourceDefinitions. -func (c *FakeCustomResourceDefinitions) Watch(opts v1.ListOptions) (watch.Interface, error) { - return c.Fake. - InvokesWatch(testing.NewRootWatchAction(customresourcedefinitionsResource, opts)) -} - -// Create takes the representation of a customResourceDefinition and creates it. Returns the server's representation of the customResourceDefinition, and an error, if there is any. -func (c *FakeCustomResourceDefinitions) Create(customResourceDefinition *apiextensions.CustomResourceDefinition) (result *apiextensions.CustomResourceDefinition, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootCreateAction(customresourcedefinitionsResource, customResourceDefinition), &apiextensions.CustomResourceDefinition{}) - if obj == nil { - return nil, err - } - return obj.(*apiextensions.CustomResourceDefinition), err -} - -// Update takes the representation of a customResourceDefinition and updates it. Returns the server's representation of the customResourceDefinition, and an error, if there is any. -func (c *FakeCustomResourceDefinitions) Update(customResourceDefinition *apiextensions.CustomResourceDefinition) (result *apiextensions.CustomResourceDefinition, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootUpdateAction(customresourcedefinitionsResource, customResourceDefinition), &apiextensions.CustomResourceDefinition{}) - if obj == nil { - return nil, err - } - return obj.(*apiextensions.CustomResourceDefinition), err -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeCustomResourceDefinitions) UpdateStatus(customResourceDefinition *apiextensions.CustomResourceDefinition) (*apiextensions.CustomResourceDefinition, error) { - obj, err := c.Fake. - Invokes(testing.NewRootUpdateSubresourceAction(customresourcedefinitionsResource, "status", customResourceDefinition), &apiextensions.CustomResourceDefinition{}) - if obj == nil { - return nil, err - } - return obj.(*apiextensions.CustomResourceDefinition), err -} - -// Delete takes name of the customResourceDefinition and deletes it. Returns an error if one occurs. -func (c *FakeCustomResourceDefinitions) Delete(name string, options *v1.DeleteOptions) error { - _, err := c.Fake. - Invokes(testing.NewRootDeleteAction(customresourcedefinitionsResource, name), &apiextensions.CustomResourceDefinition{}) - return err -} - -// DeleteCollection deletes a collection of objects. -func (c *FakeCustomResourceDefinitions) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewRootDeleteCollectionAction(customresourcedefinitionsResource, listOptions) - - _, err := c.Fake.Invokes(action, &apiextensions.CustomResourceDefinitionList{}) - return err -} - -// Patch applies the patch and returns the patched customResourceDefinition. -func (c *FakeCustomResourceDefinitions) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *apiextensions.CustomResourceDefinition, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(customresourcedefinitionsResource, name, pt, data, subresources...), &apiextensions.CustomResourceDefinition{}) - if obj == nil { - return nil, err - } - return obj.(*apiextensions.CustomResourceDefinition), err -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/generated_expansion.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/generated_expansion.go deleted file mode 100644 index a8882102137..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion/generated_expansion.go +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package internalversion - -type CustomResourceDefinitionExpansion interface{} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/BUILD deleted file mode 100644 index 1063cf5bba9..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "factory.go", - "generic.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions:all-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces:all-srcs", - ], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/BUILD deleted file mode 100644 index 5ef53e759ff..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["interface.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:all-srcs", - ], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/interface.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/interface.go deleted file mode 100644 index 8236e2acce9..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/interface.go +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package apiextensions - -import ( - internalversion "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces" -) - -// Interface provides access to each of this group's versions. -type Interface interface { - // InternalVersion provides access to shared informers for resources in InternalVersion. - InternalVersion() internalversion.Interface -} - -type group struct { - factory internalinterfaces.SharedInformerFactory - namespace string - tweakListOptions internalinterfaces.TweakListOptionsFunc -} - -// New returns a new Interface. -func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { - return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} -} - -// InternalVersion returns a new internalversion.Interface. -func (g *group) InternalVersion() internalversion.Interface { - return internalversion.New(g.factory, g.namespace, g.tweakListOptions) -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/BUILD deleted file mode 100644 index ab0085dc479..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "customresourcedefinition.go", - "interface.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", - "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/customresourcedefinition.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/customresourcedefinition.go deleted file mode 100644 index 2c54f3ce5fa..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/customresourcedefinition.go +++ /dev/null @@ -1,88 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package internalversion - -import ( - time "time" - - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - internalclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset" - internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces" - internalversion "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - watch "k8s.io/apimachinery/pkg/watch" - cache "k8s.io/client-go/tools/cache" -) - -// CustomResourceDefinitionInformer provides access to a shared informer and lister for -// CustomResourceDefinitions. -type CustomResourceDefinitionInformer interface { - Informer() cache.SharedIndexInformer - Lister() internalversion.CustomResourceDefinitionLister -} - -type customResourceDefinitionInformer struct { - factory internalinterfaces.SharedInformerFactory - tweakListOptions internalinterfaces.TweakListOptionsFunc -} - -// NewCustomResourceDefinitionInformer constructs a new informer for CustomResourceDefinition type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewCustomResourceDefinitionInformer(client internalclientset.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredCustomResourceDefinitionInformer(client, resyncPeriod, indexers, nil) -} - -// NewFilteredCustomResourceDefinitionInformer constructs a new informer for CustomResourceDefinition type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewFilteredCustomResourceDefinitionInformer(client internalclientset.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { - return cache.NewSharedIndexInformer( - &cache.ListWatch{ - ListFunc: func(options v1.ListOptions) (runtime.Object, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.Apiextensions().CustomResourceDefinitions().List(options) - }, - WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.Apiextensions().CustomResourceDefinitions().Watch(options) - }, - }, - &apiextensions.CustomResourceDefinition{}, - resyncPeriod, - indexers, - ) -} - -func (f *customResourceDefinitionInformer) defaultInformer(client internalclientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredCustomResourceDefinitionInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) -} - -func (f *customResourceDefinitionInformer) Informer() cache.SharedIndexInformer { - return f.factory.InformerFor(&apiextensions.CustomResourceDefinition{}, f.defaultInformer) -} - -func (f *customResourceDefinitionInformer) Lister() internalversion.CustomResourceDefinitionLister { - return internalversion.NewCustomResourceDefinitionLister(f.Informer().GetIndexer()) -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/interface.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/interface.go deleted file mode 100644 index d9444144b19..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion/interface.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package internalversion - -import ( - internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces" -) - -// Interface provides access to all the informers in this group version. -type Interface interface { - // CustomResourceDefinitions returns a CustomResourceDefinitionInformer. - CustomResourceDefinitions() CustomResourceDefinitionInformer -} - -type version struct { - factory internalinterfaces.SharedInformerFactory - namespace string - tweakListOptions internalinterfaces.TweakListOptionsFunc -} - -// New returns a new Interface. -func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { - return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} -} - -// CustomResourceDefinitions returns a CustomResourceDefinitionInformer. -func (v *version) CustomResourceDefinitions() CustomResourceDefinitionInformer { - return &customResourceDefinitionInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/factory.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/factory.go deleted file mode 100644 index 84b04523d2b..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/factory.go +++ /dev/null @@ -1,180 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package internalversion - -import ( - reflect "reflect" - sync "sync" - time "time" - - internalclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset" - apiextensions "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions" - internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - schema "k8s.io/apimachinery/pkg/runtime/schema" - cache "k8s.io/client-go/tools/cache" -) - -// SharedInformerOption defines the functional option type for SharedInformerFactory. -type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory - -type sharedInformerFactory struct { - client internalclientset.Interface - namespace string - tweakListOptions internalinterfaces.TweakListOptionsFunc - lock sync.Mutex - defaultResync time.Duration - customResync map[reflect.Type]time.Duration - - informers map[reflect.Type]cache.SharedIndexInformer - // startedInformers is used for tracking which informers have been started. - // This allows Start() to be called multiple times safely. - startedInformers map[reflect.Type]bool -} - -// WithCustomResyncConfig sets a custom resync period for the specified informer types. -func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { - return func(factory *sharedInformerFactory) *sharedInformerFactory { - for k, v := range resyncConfig { - factory.customResync[reflect.TypeOf(k)] = v - } - return factory - } -} - -// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. -func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { - return func(factory *sharedInformerFactory) *sharedInformerFactory { - factory.tweakListOptions = tweakListOptions - return factory - } -} - -// WithNamespace limits the SharedInformerFactory to the specified namespace. -func WithNamespace(namespace string) SharedInformerOption { - return func(factory *sharedInformerFactory) *sharedInformerFactory { - factory.namespace = namespace - return factory - } -} - -// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. -func NewSharedInformerFactory(client internalclientset.Interface, defaultResync time.Duration) SharedInformerFactory { - return NewSharedInformerFactoryWithOptions(client, defaultResync) -} - -// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. -// Listers obtained via this SharedInformerFactory will be subject to the same filters -// as specified here. -// Deprecated: Please use NewSharedInformerFactoryWithOptions instead -func NewFilteredSharedInformerFactory(client internalclientset.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { - return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) -} - -// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. -func NewSharedInformerFactoryWithOptions(client internalclientset.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { - factory := &sharedInformerFactory{ - client: client, - namespace: v1.NamespaceAll, - defaultResync: defaultResync, - informers: make(map[reflect.Type]cache.SharedIndexInformer), - startedInformers: make(map[reflect.Type]bool), - customResync: make(map[reflect.Type]time.Duration), - } - - // Apply all options - for _, opt := range options { - factory = opt(factory) - } - - return factory -} - -// Start initializes all requested informers. -func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { - f.lock.Lock() - defer f.lock.Unlock() - - for informerType, informer := range f.informers { - if !f.startedInformers[informerType] { - go informer.Run(stopCh) - f.startedInformers[informerType] = true - } - } -} - -// WaitForCacheSync waits for all started informers' cache were synced. -func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { - informers := func() map[reflect.Type]cache.SharedIndexInformer { - f.lock.Lock() - defer f.lock.Unlock() - - informers := map[reflect.Type]cache.SharedIndexInformer{} - for informerType, informer := range f.informers { - if f.startedInformers[informerType] { - informers[informerType] = informer - } - } - return informers - }() - - res := map[reflect.Type]bool{} - for informType, informer := range informers { - res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) - } - return res -} - -// InternalInformerFor returns the SharedIndexInformer for obj using an internal -// client. -func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { - f.lock.Lock() - defer f.lock.Unlock() - - informerType := reflect.TypeOf(obj) - informer, exists := f.informers[informerType] - if exists { - return informer - } - - resyncPeriod, exists := f.customResync[informerType] - if !exists { - resyncPeriod = f.defaultResync - } - - informer = newFunc(f.client, resyncPeriod) - f.informers[informerType] = informer - - return informer -} - -// SharedInformerFactory provides shared informers for resources in all known -// API group versions. -type SharedInformerFactory interface { - internalinterfaces.SharedInformerFactory - ForResource(resource schema.GroupVersionResource) (GenericInformer, error) - WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool - - Apiextensions() apiextensions.Interface -} - -func (f *sharedInformerFactory) Apiextensions() apiextensions.Interface { - return apiextensions.New(f, f.namespace, f.tweakListOptions) -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/generic.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/generic.go deleted file mode 100644 index c12c440749f..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/generic.go +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package internalversion - -import ( - "fmt" - - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - schema "k8s.io/apimachinery/pkg/runtime/schema" - cache "k8s.io/client-go/tools/cache" -) - -// GenericInformer is type of SharedIndexInformer which will locate and delegate to other -// sharedInformers based on type -type GenericInformer interface { - Informer() cache.SharedIndexInformer - Lister() cache.GenericLister -} - -type genericInformer struct { - informer cache.SharedIndexInformer - resource schema.GroupResource -} - -// Informer returns the SharedIndexInformer. -func (f *genericInformer) Informer() cache.SharedIndexInformer { - return f.informer -} - -// Lister returns the GenericLister. -func (f *genericInformer) Lister() cache.GenericLister { - return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) -} - -// ForResource gives generic access to a shared informer of the matching type -// TODO extend this to unknown resources with a client pool -func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { - switch resource { - // Group=apiextensions.k8s.io, Version=internalVersion - case apiextensions.SchemeGroupVersion.WithResource("customresourcedefinitions"): - return &genericInformer{resource: resource.GroupResource(), informer: f.Apiextensions().InternalVersion().CustomResourceDefinitions().Informer()}, nil - - } - - return nil, fmt.Errorf("no informer found for %v", resource) -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces/BUILD deleted file mode 100644 index 7c9581cfb42..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["factory_interfaces.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces/factory_interfaces.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces/factory_interfaces.go deleted file mode 100644 index 2e4439a647d..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces/factory_interfaces.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package internalinterfaces - -import ( - time "time" - - internalclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - cache "k8s.io/client-go/tools/cache" -) - -// NewInformerFunc takes internalclientset.Interface and time.Duration to return a SharedIndexInformer. -type NewInformerFunc func(internalclientset.Interface, time.Duration) cache.SharedIndexInformer - -// SharedInformerFactory a small interface to allow for adding an informer without an import cycle -type SharedInformerFactory interface { - Start(stopCh <-chan struct{}) - InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer -} - -// TweakListOptionsFunc is a function that transforms a v1.ListOptions. -type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/BUILD deleted file mode 100644 index 7e669ec712f..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "customresourcedefinition.go", - "expansion_generated.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion", - importpath = "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion", - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", - "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/customresourcedefinition.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/customresourcedefinition.go deleted file mode 100644 index f64f01d9d00..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/customresourcedefinition.go +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by lister-gen. DO NOT EDIT. - -package internalversion - -import ( - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/tools/cache" -) - -// CustomResourceDefinitionLister helps list CustomResourceDefinitions. -type CustomResourceDefinitionLister interface { - // List lists all CustomResourceDefinitions in the indexer. - List(selector labels.Selector) (ret []*apiextensions.CustomResourceDefinition, err error) - // Get retrieves the CustomResourceDefinition from the index for a given name. - Get(name string) (*apiextensions.CustomResourceDefinition, error) - CustomResourceDefinitionListerExpansion -} - -// customResourceDefinitionLister implements the CustomResourceDefinitionLister interface. -type customResourceDefinitionLister struct { - indexer cache.Indexer -} - -// NewCustomResourceDefinitionLister returns a new CustomResourceDefinitionLister. -func NewCustomResourceDefinitionLister(indexer cache.Indexer) CustomResourceDefinitionLister { - return &customResourceDefinitionLister{indexer: indexer} -} - -// List lists all CustomResourceDefinitions in the indexer. -func (s *customResourceDefinitionLister) List(selector labels.Selector) (ret []*apiextensions.CustomResourceDefinition, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*apiextensions.CustomResourceDefinition)) - }) - return ret, err -} - -// Get retrieves the CustomResourceDefinition from the index for a given name. -func (s *customResourceDefinitionLister) Get(name string) (*apiextensions.CustomResourceDefinition, error) { - obj, exists, err := s.indexer.GetByKey(name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(apiextensions.Resource("customresourcedefinition"), name) - } - return obj.(*apiextensions.CustomResourceDefinition), nil -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/expansion_generated.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/expansion_generated.go deleted file mode 100644 index 5e3ae381dd7..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion/expansion_generated.go +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright 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. -*/ - -// Code generated by lister-gen. DO NOT EDIT. - -package internalversion - -// CustomResourceDefinitionListerExpansion allows custom methods to be added to -// CustomResourceDefinitionLister. -type CustomResourceDefinitionListerExpansion interface{} From 168f8f54f01b3b283fdd7494c5e94b22da4b2f72 Mon Sep 17 00:00:00 2001 From: yue9944882 <291271447@qq.com> Date: Fri, 8 Nov 2019 23:23:50 +0800 Subject: [PATCH 2/5] switch to v1 crd switch api helper functions to v1 CRD api switch v1 CRD for apiserver internal switch to v1 CRD for internal controllers api storage/validation related changes move local-defaulting utils private to prevent spreading boilerplate keep the subresource status/scale spec nil unless it's enabled clean up empty space --- cmd/kube-apiserver/app/aggregator.go | 4 +- .../crdregistration_controller.go | 6 +- .../crdregistration_controller_test.go | 4 +- .../pkg/apihelpers/helpers.go | 197 ++++- .../pkg/apihelpers/helpers_test.go | 481 +++++++++++- .../pkg/apiserver/apiserver.go | 30 +- .../pkg/apiserver/conversion/converter.go | 3 +- .../apiserver/conversion/converter_test.go | 2 +- .../apiserver/conversion/webhook_converter.go | 12 +- .../customresource_discovery_controller.go | 13 +- .../pkg/apiserver/customresource_handler.go | 83 ++- .../apiserver/customresource_handler_test.go | 4 +- .../pkg/apiserver/helpers.go | 51 ++ .../apiserver/validation/validation_test.go | 6 +- .../apiapproval/apiapproval_controller.go | 15 +- .../apiapproval_controller_test.go | 5 +- .../establish/establishing_controller.go | 15 +- .../pkg/controller/finalizer/crd_finalizer.go | 31 +- .../nonstructuralschema_controller.go | 36 +- .../pkg/controller/openapi/builder/builder.go | 19 +- .../openapi/builder/builder_test.go | 50 +- .../pkg/controller/openapi/controller.go | 11 +- .../controller/status/naming_controller.go | 17 +- .../status/naming_controller_test.go | 9 +- .../pkg/registry/customresource/etcd_test.go | 7 +- .../tableconvertor/tableconvertor.go | 2 +- .../test/integration/validation_test.go | 692 +++++++++--------- 27 files changed, 1264 insertions(+), 541 deletions(-) create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/helpers.go diff --git a/cmd/kube-apiserver/app/aggregator.go b/cmd/kube-apiserver/app/aggregator.go index 30f3b01915e..c21c6e81387 100644 --- a/cmd/kube-apiserver/app/aggregator.go +++ b/cmd/kube-apiserver/app/aggregator.go @@ -28,7 +28,7 @@ import ( "k8s.io/klog" - apiextensionsinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion" + apiextensionsinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -140,7 +140,7 @@ func createAggregatorServer(aggregatorConfig *aggregatorapiserver.Config, delega autoRegistrationController := autoregister.NewAutoRegisterController(aggregatorServer.APIRegistrationInformers.Apiregistration().V1().APIServices(), apiRegistrationClient) apiServices := apiServicesToRegister(delegateAPIServer, autoRegistrationController) crdRegistrationController := crdregistration.NewCRDRegistrationController( - apiExtensionInformers.Apiextensions().InternalVersion().CustomResourceDefinitions(), + apiExtensionInformers.Apiextensions().V1().CustomResourceDefinitions(), autoRegistrationController) err = aggregatorServer.GenericAPIServer.AddPostStartHook("kube-apiserver-autoregistration", func(context genericapiserver.PostStartHookContext) error { diff --git a/pkg/master/controller/crdregistration/crdregistration_controller.go b/pkg/master/controller/crdregistration/crdregistration_controller.go index 0afbfd91e25..3f67871bb31 100644 --- a/pkg/master/controller/crdregistration/crdregistration_controller.go +++ b/pkg/master/controller/crdregistration/crdregistration_controller.go @@ -22,9 +22,9 @@ import ( "k8s.io/klog" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - crdinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + crdinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" diff --git a/pkg/master/controller/crdregistration/crdregistration_controller_test.go b/pkg/master/controller/crdregistration/crdregistration_controller_test.go index 782d120ab14..3d98d68f1d8 100644 --- a/pkg/master/controller/crdregistration/crdregistration_controller_test.go +++ b/pkg/master/controller/crdregistration/crdregistration_controller_test.go @@ -20,8 +20,8 @@ import ( "reflect" "testing" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/tools/cache" diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers.go index b874785a16d..523d968a500 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers.go @@ -20,8 +20,10 @@ import ( "fmt" "net/url" "strings" + "time" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // IsProtectedCommunityGroup returns whether or not a group specified for a CRD is protected for the community and needs @@ -54,18 +56,205 @@ const ( // GetAPIApprovalState returns the state of the API approval and reason for that state func GetAPIApprovalState(annotations map[string]string) (state APIApprovalState, reason string) { - annotation := annotations[v1beta1.KubeAPIApprovedAnnotation] + annotation := annotations[apiextensions.KubeAPIApprovedAnnotation] // we use the result of this parsing in the switch/case below url, annotationURLParseErr := url.ParseRequestURI(annotation) switch { case len(annotation) == 0: - return APIApprovalMissing, fmt.Sprintf("protected groups must have approval annotation %q, see https://github.com/kubernetes/enhancements/pull/1111", v1beta1.KubeAPIApprovedAnnotation) + return APIApprovalMissing, fmt.Sprintf("protected groups must have approval annotation %q, see https://github.com/kubernetes/enhancements/pull/1111", apiextensions.KubeAPIApprovedAnnotation) case strings.HasPrefix(annotation, "unapproved"): return APIApprovalBypassed, fmt.Sprintf("not approved: %q", annotation) case annotationURLParseErr == nil && url != nil && len(url.Host) > 0 && len(url.Scheme) > 0: return APIApproved, fmt.Sprintf("approved in %v", annotation) default: - return APIApprovalInvalid, fmt.Sprintf("protected groups must have approval annotation %q with either a URL or a reason starting with \"unapproved\", see https://github.com/kubernetes/enhancements/pull/1111", v1beta1.KubeAPIApprovedAnnotation) + return APIApprovalInvalid, fmt.Sprintf("protected groups must have approval annotation %q with either a URL or a reason starting with \"unapproved\", see https://github.com/kubernetes/enhancements/pull/1111", apiextensions.KubeAPIApprovedAnnotation) } } + +// SetCRDCondition sets the status condition. It either overwrites the existing one or creates a new one. +func SetCRDCondition(crd *apiextensions.CustomResourceDefinition, newCondition apiextensions.CustomResourceDefinitionCondition) { + newCondition.LastTransitionTime = metav1.NewTime(time.Now()) + + existingCondition := FindCRDCondition(crd, newCondition.Type) + if existingCondition == nil { + crd.Status.Conditions = append(crd.Status.Conditions, newCondition) + return + } + + if existingCondition.Status != newCondition.Status || existingCondition.LastTransitionTime.IsZero() { + existingCondition.LastTransitionTime = newCondition.LastTransitionTime + } + + existingCondition.Status = newCondition.Status + existingCondition.Reason = newCondition.Reason + existingCondition.Message = newCondition.Message +} + +// RemoveCRDCondition removes the status condition. +func RemoveCRDCondition(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) { + newConditions := []apiextensions.CustomResourceDefinitionCondition{} + for _, condition := range crd.Status.Conditions { + if condition.Type != conditionType { + newConditions = append(newConditions, condition) + } + } + crd.Status.Conditions = newConditions +} + +// FindCRDCondition returns the condition you're looking for or nil. +func FindCRDCondition(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) *apiextensions.CustomResourceDefinitionCondition { + for i := range crd.Status.Conditions { + if crd.Status.Conditions[i].Type == conditionType { + return &crd.Status.Conditions[i] + } + } + + return nil +} + +// IsCRDConditionTrue indicates if the condition is present and strictly true. +func IsCRDConditionTrue(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) bool { + return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensions.ConditionTrue) +} + +// IsCRDConditionFalse indicates if the condition is present and false. +func IsCRDConditionFalse(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) bool { + return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensions.ConditionFalse) +} + +// IsCRDConditionPresentAndEqual indicates if the condition is present and equal to the given status. +func IsCRDConditionPresentAndEqual(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType, status apiextensions.ConditionStatus) bool { + for _, condition := range crd.Status.Conditions { + if condition.Type == conditionType { + return condition.Status == status + } + } + return false +} + +// IsCRDConditionEquivalent returns true if the lhs and rhs are equivalent except for times. +func IsCRDConditionEquivalent(lhs, rhs *apiextensions.CustomResourceDefinitionCondition) bool { + if lhs == nil && rhs == nil { + return true + } + if lhs == nil || rhs == nil { + return false + } + + return lhs.Message == rhs.Message && lhs.Reason == rhs.Reason && lhs.Status == rhs.Status && lhs.Type == rhs.Type +} + +// CRDHasFinalizer returns true if the finalizer is in the list. +func CRDHasFinalizer(crd *apiextensions.CustomResourceDefinition, needle string) bool { + for _, finalizer := range crd.Finalizers { + if finalizer == needle { + return true + } + } + + return false +} + +// CRDRemoveFinalizer removes the finalizer if present. +func CRDRemoveFinalizer(crd *apiextensions.CustomResourceDefinition, needle string) { + newFinalizers := []string{} + for _, finalizer := range crd.Finalizers { + if finalizer != needle { + newFinalizers = append(newFinalizers, finalizer) + } + } + crd.Finalizers = newFinalizers +} + +// HasServedCRDVersion returns true if the given version is in the list of CRD's versions and the Served flag is set. +func HasServedCRDVersion(crd *apiextensions.CustomResourceDefinition, version string) bool { + for _, v := range crd.Spec.Versions { + if v.Name == version { + return v.Served + } + } + return false +} + +// GetCRDStorageVersion returns the storage version for given CRD. +func GetCRDStorageVersion(crd *apiextensions.CustomResourceDefinition) (string, error) { + for _, v := range crd.Spec.Versions { + if v.Storage { + return v.Name, nil + } + } + // This should not happened if crd is valid + return "", fmt.Errorf("invalid apiextensions.CustomResourceDefinition, no storage version") +} + +// IsStoredVersion returns whether the given version is the storage version of the CRD. +func IsStoredVersion(crd *apiextensions.CustomResourceDefinition, version string) bool { + for _, v := range crd.Status.StoredVersions { + if version == v { + return true + } + } + return false +} + +// GetSchemaForVersion returns the validation schema for the given version or nil. +func GetSchemaForVersion(crd *apiextensions.CustomResourceDefinition, version string) (*apiextensions.CustomResourceValidation, error) { + for _, v := range crd.Spec.Versions { + if version == v.Name { + return v.Schema, nil + } + } + return nil, fmt.Errorf("version %s not found in apiextensions.CustomResourceDefinition: %v", version, crd.Name) +} + +// GetSubresourcesForVersion returns the subresources for given version or nil. +func GetSubresourcesForVersion(crd *apiextensions.CustomResourceDefinition, version string) (*apiextensions.CustomResourceSubresources, error) { + for _, v := range crd.Spec.Versions { + if version == v.Name { + return v.Subresources, nil + } + } + return nil, fmt.Errorf("version %s not found in apiextensions.CustomResourceDefinition: %v", version, crd.Name) +} + +// HasPerVersionSchema returns true if a CRD uses per-version schema. +func HasPerVersionSchema(versions []apiextensions.CustomResourceDefinitionVersion) bool { + for _, v := range versions { + if v.Schema != nil { + return true + } + } + return false +} + +// HasPerVersionSubresources returns true if a CRD uses per-version subresources. +func HasPerVersionSubresources(versions []apiextensions.CustomResourceDefinitionVersion) bool { + for _, v := range versions { + if v.Subresources != nil { + return true + } + } + return false +} + +// HasPerVersionColumns returns true if a CRD uses per-version columns. +func HasPerVersionColumns(versions []apiextensions.CustomResourceDefinitionVersion) bool { + for _, v := range versions { + if len(v.AdditionalPrinterColumns) > 0 { + return true + } + } + return false +} + +// HasVersionServed returns true if given CRD has given version served. +func HasVersionServed(crd *apiextensions.CustomResourceDefinition, version string) bool { + for _, v := range crd.Spec.Versions { + if !v.Served || v.Name != version { + continue + } + return true + } + return false +} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers_test.go index 7e12f7ec572..1b8fef9ae98 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers_test.go @@ -17,9 +17,12 @@ limitations under the License. package apihelpers import ( + "reflect" "testing" + "time" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestIsProtectedCommunityGroup(t *testing.T) { @@ -76,22 +79,22 @@ func TestGetAPIApprovalState(t *testing.T) { }{ { name: "bare unapproved", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: "unapproved"}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "unapproved"}, expected: APIApprovalBypassed, }, { name: "unapproved with message", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: "unapproved, experimental-only"}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "unapproved, experimental-only"}, expected: APIApprovalBypassed, }, { name: "mismatched case", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: "Unapproved"}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "Unapproved"}, expected: APIApprovalInvalid, }, { name: "empty", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: ""}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: ""}, expected: APIApprovalMissing, }, { @@ -101,27 +104,27 @@ func TestGetAPIApprovalState(t *testing.T) { }, { name: "url", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: "https://github.com/kubernetes/kubernetes/pull/78458"}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "https://github.com/kubernetes/kubernetes/pull/78458"}, expected: APIApproved, }, { name: "url - no scheme", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: "github.com/kubernetes/kubernetes/pull/78458"}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "github.com/kubernetes/kubernetes/pull/78458"}, expected: APIApprovalInvalid, }, { name: "url - no host", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: "http:///kubernetes/kubernetes/pull/78458"}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "http:///kubernetes/kubernetes/pull/78458"}, expected: APIApprovalInvalid, }, { name: "url - just path", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: "/"}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "/"}, expected: APIApprovalInvalid, }, { name: "missing scheme", - annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: "github.com/kubernetes/kubernetes/pull/78458"}, + annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "github.com/kubernetes/kubernetes/pull/78458"}, expected: APIApprovalInvalid, }, } @@ -136,3 +139,461 @@ func TestGetAPIApprovalState(t *testing.T) { }) } } + +func TestCRDHasFinalizer(t *testing.T) { + tests := []struct { + name string + crd *apiextensions.CustomResourceDefinition + finalizerToCheck string + + expected bool + }{ + { + name: "missing", + crd: &apiextensions.CustomResourceDefinition{ + ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it"}}, + }, + finalizerToCheck: "it", + expected: false, + }, + { + name: "present", + crd: &apiextensions.CustomResourceDefinition{ + ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it", "it"}}, + }, + finalizerToCheck: "it", + expected: true, + }, + } + for _, tc := range tests { + actual := CRDHasFinalizer(tc.crd, tc.finalizerToCheck) + if tc.expected != actual { + t.Errorf("%v expected %v, got %v", tc.name, tc.expected, actual) + } + } +} + +func TestCRDRemoveFinalizer(t *testing.T) { + tests := []struct { + name string + crd *apiextensions.CustomResourceDefinition + finalizerToCheck string + + expected []string + }{ + { + name: "missing", + crd: &apiextensions.CustomResourceDefinition{ + ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it"}}, + }, + finalizerToCheck: "it", + expected: []string{"not-it"}, + }, + { + name: "present", + crd: &apiextensions.CustomResourceDefinition{ + ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it", "it"}}, + }, + finalizerToCheck: "it", + expected: []string{"not-it"}, + }, + } + for _, tc := range tests { + CRDRemoveFinalizer(tc.crd, tc.finalizerToCheck) + if !reflect.DeepEqual(tc.expected, tc.crd.Finalizers) { + t.Errorf("%v expected %v, got %v", tc.name, tc.expected, tc.crd.Finalizers) + } + } +} + +func TestSetCRDCondition(t *testing.T) { + tests := []struct { + name string + crdCondition []apiextensions.CustomResourceDefinitionCondition + newCondition apiextensions.CustomResourceDefinitionCondition + expectedcrdCondition []apiextensions.CustomResourceDefinitionCondition + }{ + { + name: "test setCRDcondition when one condition", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + newCondition: apiextensions.CustomResourceDefinitionCondition{ + Type: apiextensions.Established, + Status: apiextensions.ConditionFalse, + Reason: "NotAccepted", + Message: "Not accepted", + LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), + }, + expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionFalse, + Reason: "NotAccepted", + Message: "Not accepted", + LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), + }, + }, + }, + { + name: "test setCRDcondition when two condition", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionTrue, + Reason: "NoConflicts", + Message: "no conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + newCondition: apiextensions.CustomResourceDefinitionCondition{ + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionFalse, + Reason: "Conflicts", + Message: "conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), + }, + expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionFalse, + Reason: "Conflicts", + Message: "conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), + }, + }, + }, + { + name: "test setCRDcondition when condition needs to be appended", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + newCondition: apiextensions.CustomResourceDefinitionCondition{ + Type: apiextensions.Terminating, + Status: apiextensions.ConditionFalse, + Reason: "Neverapiextensions.Established", + Message: "resource was never apiextensions.Established", + LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), + }, + expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.Terminating, + Status: apiextensions.ConditionFalse, + Reason: "Neverapiextensions.Established", + Message: "resource was never apiextensions.Established", + LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), + }, + }, + }, + { + name: "set new condition which doesn't have lastTransitionTime set", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + newCondition: apiextensions.CustomResourceDefinitionCondition{ + Type: apiextensions.Established, + Status: apiextensions.ConditionFalse, + Reason: "NotAccepted", + Message: "Not accepted", + }, + expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionFalse, + Reason: "NotAccepted", + Message: "Not accepted", + LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), + }, + }, + }, + { + name: "append new condition which doesn't have lastTransitionTime set", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + newCondition: apiextensions.CustomResourceDefinitionCondition{ + Type: apiextensions.Terminating, + Status: apiextensions.ConditionFalse, + Reason: "Neverapiextensions.Established", + Message: "resource was never apiextensions.Established", + }, + expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.Terminating, + Status: apiextensions.ConditionFalse, + Reason: "Neverapiextensions.Established", + Message: "resource was never apiextensions.Established", + LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), + }, + }, + }, + } + for _, tc := range tests { + crd := generateCRDwithCondition(tc.crdCondition) + SetCRDCondition(crd, tc.newCondition) + if len(tc.expectedcrdCondition) != len(crd.Status.Conditions) { + t.Errorf("%v expected %v, got %v", tc.name, tc.expectedcrdCondition, crd.Status.Conditions) + } + for i := range tc.expectedcrdCondition { + if !IsCRDConditionEquivalent(&tc.expectedcrdCondition[i], &crd.Status.Conditions[i]) { + t.Errorf("%v expected %v, got %v", tc.name, tc.expectedcrdCondition[i], crd.Status.Conditions[i]) + } + if crd.Status.Conditions[i].LastTransitionTime.IsZero() { + t.Errorf("%q/%d lastTransitionTime should not be null: %v", tc.name, i, crd.Status.Conditions[i]) + } + } + } +} + +func TestRemoveCRDCondition(t *testing.T) { + tests := []struct { + name string + crdCondition []apiextensions.CustomResourceDefinitionCondition + conditionType apiextensions.CustomResourceDefinitionConditionType + expectedcrdCondition []apiextensions.CustomResourceDefinitionCondition + }{ + { + name: "test remove CRDCondition when the conditionType meets", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionTrue, + Reason: "NoConflicts", + Message: "no conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + conditionType: apiextensions.NamesAccepted, + expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2011, 1, 2, 0, 0, 0, 0, time.UTC), + }, + }, + }, + { + name: "test remove CRDCondition when the conditionType not meets", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionTrue, + Reason: "NoConflicts", + Message: "no conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + conditionType: apiextensions.Terminating, + expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionTrue, + Reason: "NoConflicts", + Message: "no conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + }, + } + for _, tc := range tests { + crd := generateCRDwithCondition(tc.crdCondition) + RemoveCRDCondition(crd, tc.conditionType) + if len(tc.expectedcrdCondition) != len(crd.Status.Conditions) { + t.Errorf("%v expected %v, got %v", tc.name, tc.expectedcrdCondition, crd.Status.Conditions) + } + for i := range tc.expectedcrdCondition { + if !IsCRDConditionEquivalent(&tc.expectedcrdCondition[i], &crd.Status.Conditions[i]) { + t.Errorf("%v expected %v, got %v", tc.name, tc.expectedcrdCondition, crd.Status.Conditions) + } + } + } +} + +func TestIsCRDConditionPresentAndEqual(t *testing.T) { + tests := []struct { + name string + crdCondition []apiextensions.CustomResourceDefinitionCondition + conditionType apiextensions.CustomResourceDefinitionConditionType + status apiextensions.ConditionStatus + expectresult bool + }{ + { + name: "test CRDCondition is not Present", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionTrue, + Reason: "NoConflicts", + Message: "no conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + conditionType: apiextensions.Terminating, + status: apiextensions.ConditionTrue, + expectresult: false, + }, + { + name: "test CRDCondition is Present but not Equal", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionTrue, + Reason: "NoConflicts", + Message: "no conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + conditionType: apiextensions.Established, + status: apiextensions.ConditionFalse, + expectresult: false, + }, + { + name: "test CRDCondition is Present and Equal", + crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + { + Type: apiextensions.Established, + Status: apiextensions.ConditionTrue, + Reason: "Accepted", + Message: "the initial names have been accepted", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + { + Type: apiextensions.NamesAccepted, + Status: apiextensions.ConditionTrue, + Reason: "NoConflicts", + Message: "no conflicts found", + LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + conditionType: apiextensions.NamesAccepted, + status: apiextensions.ConditionTrue, + expectresult: true, + }, + } + for _, tc := range tests { + crd := generateCRDwithCondition(tc.crdCondition) + res := IsCRDConditionPresentAndEqual(crd, tc.conditionType, tc.status) + if res != tc.expectresult { + t.Errorf("%v expected %t, got %t", tc.name, tc.expectresult, res) + } + } +} + +func generateCRDwithCondition(conditions []apiextensions.CustomResourceDefinitionCondition) *apiextensions.CustomResourceDefinition { + testCRDObjectMeta := metav1.ObjectMeta{ + Name: "plural.group.com", + ResourceVersion: "12", + } + testCRDSpec := apiextensions.CustomResourceDefinitionSpec{ + Group: "group.com", + Names: apiextensions.CustomResourceDefinitionNames{ + Plural: "plural", + Singular: "singular", + Kind: "kind", + ListKind: "listkind", + }, + } + testCRDAcceptedNames := apiextensions.CustomResourceDefinitionNames{ + Plural: "plural", + Singular: "singular", + Kind: "kind", + ListKind: "listkind", + } + return &apiextensions.CustomResourceDefinition{ + ObjectMeta: testCRDObjectMeta, + Spec: testCRDSpec, + Status: apiextensions.CustomResourceDefinitionStatus{ + AcceptedNames: testCRDAcceptedNames, + Conditions: conditions, + }, + } +} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go index 89b9060e1b7..84066786776 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go @@ -25,10 +25,10 @@ import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" _ "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset" _ "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions" - internalinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion" + externalinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions" "k8s.io/apiextensions-apiserver/pkg/controller/apiapproval" "k8s.io/apiextensions-apiserver/pkg/controller/establish" "k8s.io/apiextensions-apiserver/pkg/controller/finalizer" @@ -109,7 +109,7 @@ type CustomResourceDefinitions struct { GenericAPIServer *genericapiserver.GenericAPIServer // provided for easier embedding - Informers internalinformers.SharedInformerFactory + Informers externalinformers.SharedInformerFactory } // Complete fills in any fields not set that are required to have valid data. It's mutating the receiver. @@ -164,13 +164,13 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) return nil, err } - crdClient, err := internalclientset.NewForConfig(s.GenericAPIServer.LoopbackClientConfig) + crdClient, err := clientset.NewForConfig(s.GenericAPIServer.LoopbackClientConfig) if err != nil { // it's really bad that this is leaking here, but until we can fix the test (which I'm pretty sure isn't even testing what it wants to test), // we need to be able to move forward return nil, fmt.Errorf("failed to create clientset: %v", err) } - s.Informers = internalinformers.NewSharedInformerFactory(crdClient, 5*time.Minute) + s.Informers = externalinformers.NewSharedInformerFactory(crdClient, 5*time.Minute) delegateHandler := delegationTarget.UnprotectedHandler() if delegateHandler == nil { @@ -185,11 +185,11 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) discovery: map[string]*discovery.APIGroupHandler{}, delegate: delegateHandler, } - establishingController := establish.NewEstablishingController(s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(), crdClient.Apiextensions()) + establishingController := establish.NewEstablishingController(s.Informers.Apiextensions().V1().CustomResourceDefinitions(), crdClient.ApiextensionsV1()) crdHandler, err := NewCustomResourceDefinitionHandler( versionDiscoveryHandler, groupDiscoveryHandler, - s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(), + s.Informers.Apiextensions().V1().CustomResourceDefinitions(), delegateHandler, c.ExtraConfig.CRDRESTOptionsGetter, c.GenericConfig.AdmissionControl, @@ -209,18 +209,18 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", crdHandler) s.GenericAPIServer.Handler.NonGoRestfulMux.HandlePrefix("/apis/", crdHandler) - crdController := NewDiscoveryController(s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(), versionDiscoveryHandler, groupDiscoveryHandler) - namingController := status.NewNamingConditionController(s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(), crdClient.Apiextensions()) - nonStructuralSchemaController := nonstructuralschema.NewConditionController(s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(), crdClient.Apiextensions()) - apiApprovalController := apiapproval.NewKubernetesAPIApprovalPolicyConformantConditionController(s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(), crdClient.Apiextensions()) + crdController := NewDiscoveryController(s.Informers.Apiextensions().V1().CustomResourceDefinitions(), versionDiscoveryHandler, groupDiscoveryHandler) + namingController := status.NewNamingConditionController(s.Informers.Apiextensions().V1().CustomResourceDefinitions(), crdClient.ApiextensionsV1()) + nonStructuralSchemaController := nonstructuralschema.NewConditionController(s.Informers.Apiextensions().V1().CustomResourceDefinitions(), crdClient.ApiextensionsV1()) + apiApprovalController := apiapproval.NewKubernetesAPIApprovalPolicyConformantConditionController(s.Informers.Apiextensions().V1().CustomResourceDefinitions(), crdClient.ApiextensionsV1()) finalizingController := finalizer.NewCRDFinalizer( - s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(), - crdClient.Apiextensions(), + s.Informers.Apiextensions().V1().CustomResourceDefinitions(), + crdClient.ApiextensionsV1(), crdHandler, ) var openapiController *openapicontroller.Controller if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourcePublishOpenAPI) { - openapiController = openapicontroller.NewController(s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions()) + openapiController = openapicontroller.NewController(s.Informers.Apiextensions().V1().CustomResourceDefinitions()) } s.GenericAPIServer.AddPostStartHookOrDie("start-apiextensions-informers", func(context genericapiserver.PostStartHookContext) error { @@ -249,7 +249,7 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) // but we won't go healthy until we can handle the ones already present. s.GenericAPIServer.AddPostStartHookOrDie("crd-informer-synced", func(context genericapiserver.PostStartHookContext) error { return wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { - return s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Informer().HasSynced(), nil + return s.Informers.Apiextensions().V1().CustomResourceDefinitions().Informer().HasSynced(), nil }, context.StopCh) }) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go index d9827ca4cb8..625c7ae20c4 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go @@ -20,7 +20,7 @@ import ( "fmt" autoscalingv1 "k8s.io/api/autoscaling/v1" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" @@ -84,7 +84,6 @@ func (m *CRConverterFactory) NewConverter(crd *apiextensions.CustomResourceDefin // Determine whether we should expect to be asked to "convert" autoscaling/v1 Scale types convertScale := false if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) { - convertScale = crd.Spec.Subresources != nil && crd.Spec.Subresources.Scale != nil for _, version := range crd.Spec.Versions { if version.Subresources != nil && version.Subresources.Scale != nil { convertScale = true diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter_test.go index 933b1c037cf..1b5ebd3e0e6 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter_test.go @@ -21,7 +21,7 @@ import ( "strings" "testing" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/webhook_converter.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/webhook_converter.go index 8013e89767b..0cdf39a5ec4 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/webhook_converter.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/webhook_converter.go @@ -22,7 +22,7 @@ import ( "fmt" "time" - internal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apivalidation "k8s.io/apimachinery/pkg/api/validation" @@ -73,8 +73,8 @@ type webhookConverter struct { conversionReviewVersions []string } -func webhookClientConfigForCRD(crd *internal.CustomResourceDefinition) *webhook.ClientConfig { - apiConfig := crd.Spec.Conversion.WebhookClientConfig +func webhookClientConfigForCRD(crd *apiextensions.CustomResourceDefinition) *webhook.ClientConfig { + apiConfig := crd.Spec.Conversion.Webhook.ClientConfig ret := webhook.ClientConfig{ Name: fmt.Sprintf("conversion_webhook_for_%s", crd.Name), CABundle: apiConfig.CABundle, @@ -86,7 +86,7 @@ func webhookClientConfigForCRD(crd *internal.CustomResourceDefinition) *webhook. ret.Service = &webhook.ClientConfigService{ Name: apiConfig.Service.Name, Namespace: apiConfig.Service.Namespace, - Port: apiConfig.Service.Port, + Port: *apiConfig.Service.Port, } if apiConfig.Service.Path != nil { ret.Service.Path = *apiConfig.Service.Path @@ -97,7 +97,7 @@ func webhookClientConfigForCRD(crd *internal.CustomResourceDefinition) *webhook. var _ crConverterInterface = &webhookConverter{} -func (f *webhookConverterFactory) NewWebhookConverter(crd *internal.CustomResourceDefinition) (*webhookConverter, error) { +func (f *webhookConverterFactory) NewWebhookConverter(crd *apiextensions.CustomResourceDefinition) (*webhookConverter, error) { restClient, err := f.clientManager.HookClient(*webhookClientConfigForCRD(crd)) if err != nil { return nil, err @@ -108,7 +108,7 @@ func (f *webhookConverterFactory) NewWebhookConverter(crd *internal.CustomResour name: crd.Name, nopConverter: nopConverter{}, - conversionReviewVersions: crd.Spec.Conversion.ConversionReviewVersions, + conversionReviewVersions: crd.Spec.Conversion.Webhook.ConversionReviewVersions, }, nil } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go index f1592444a4c..8d6030eb4b8 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go @@ -34,9 +34,10 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" ) type DiscoveryController struct { @@ -86,7 +87,7 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error { foundVersion := false foundGroup := false for _, crd := range crds { - if !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { + if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { continue } @@ -126,7 +127,7 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error { verbs := metav1.Verbs([]string{"delete", "deletecollection", "get", "list", "patch", "create", "update", "watch"}) // if we're terminating we don't allow some verbs - if apiextensions.IsCRDConditionTrue(crd, apiextensions.Terminating) { + if apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Terminating) { verbs = metav1.Verbs([]string{"delete", "deletecollection", "get", "list", "watch"}) } @@ -141,7 +142,7 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error { StorageVersionHash: storageVersionHash, }) - subresources, err := apiextensions.GetSubresourcesForVersion(crd, version.Version) + subresources, err := apiextensionshelpers.GetSubresourcesForVersion(crd, version.Version) if err != nil { return err } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index 4e15edd708d..ef701fece09 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -29,15 +29,17 @@ import ( "github.com/go-openapi/strfmt" "github.com/go-openapi/validate" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apiserver/conversion" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" structuraldefaulting "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/defaulting" schemaobjectmeta "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/objectmeta" structuralpruning "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning" apiservervalidation "k8s.io/apiextensions-apiserver/pkg/apiserver/validation" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/controller/establish" "k8s.io/apiextensions-apiserver/pkg/controller/finalizer" "k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder" @@ -287,7 +289,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { return } - if !apiextensions.HasServedCRDVersion(crd, requestInfo.APIVersion) { + if !apiextensionshelpers.HasServedCRDVersion(crd, requestInfo.APIVersion) { r.delegate.ServeHTTP(w, req) return } @@ -296,13 +298,13 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { // but it becomes "unserved" because another names update leads to a conflict // and EstablishingController wasn't fast enough to put the CRD into the Established condition. // We accept this as the problem is small and self-healing. - if !apiextensions.IsCRDConditionTrue(crd, apiextensions.NamesAccepted) && - !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { + if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.NamesAccepted) && + !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { r.delegate.ServeHTTP(w, req) return } - terminating := apiextensions.IsCRDConditionTrue(crd, apiextensions.Terminating) + terminating := apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Terminating) crdInfo, err := r.getOrCreateServingInfoFor(crd.UID, crd.Name) if apierrors.IsNotFound(err) { @@ -335,7 +337,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { } var handlerFunc http.HandlerFunc - subresources, err := apiextensions.GetSubresourcesForVersion(crd, requestInfo.APIVersion) + subresources, err := apiextensionshelpers.GetSubresourcesForVersion(crd, requestInfo.APIVersion) if err != nil { utilruntime.HandleError(err) responsewriters.ErrorNegotiated( @@ -467,8 +469,8 @@ func (r *crdHandler) updateCustomResourceDefinition(oldObj, newObj interface{}) // For HA clusters, we want to prevent race conditions when changing status to Established, // so we want to be sure that CRD is Installing at least for 5 seconds before Establishing it. // TODO: find a real HA safe checkpointing mechanism instead of an arbitrary wait. - if !apiextensions.IsCRDConditionTrue(newCRD, apiextensions.Established) && - apiextensions.IsCRDConditionTrue(newCRD, apiextensions.NamesAccepted) { + if !apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensions.Established) && + apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensions.NamesAccepted) { if r.masterCount > 1 { r.establishingController.QueueCRD(newCRD.Name, 5*time.Second) } else { @@ -607,7 +609,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd return ret, nil } - storageVersion, err := apiextensions.GetCRDStorageVersion(crd) + storageVersion, err := apiextensionshelpers.GetCRDStorageVersion(crd) if err != nil { return nil, err } @@ -622,7 +624,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd structuralSchemas := map[string]*structuralschema.Structural{} for _, v := range crd.Spec.Versions { - val, err := apiextensions.GetSchemaForVersion(crd, v.Name) + val, err := apiextensionshelpers.GetSchemaForVersion(crd, v.Name) if err != nil { utilruntime.HandleError(err) return nil, fmt.Errorf("the server could not properly serve the CR schema") @@ -630,14 +632,18 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd if val == nil { continue } - s, err := structuralschema.NewStructural(val.OpenAPIV3Schema) - if *crd.Spec.PreserveUnknownFields == false && err != nil { + internalValidation := &apiextensionsinternal.CustomResourceValidation{} + if err := apiextensions.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(val, internalValidation, nil); err != nil { + return nil, fmt.Errorf("failed converting CRD validation to internal version: %v", err) + } + s, err := structuralschema.NewStructural(internalValidation.OpenAPIV3Schema) + if crd.Spec.PreserveUnknownFields == false && err != nil { // This should never happen. If it does, it is a programming error. utilruntime.HandleError(fmt.Errorf("failed to convert schema to structural: %v", err)) return nil, fmt.Errorf("the server could not properly serve the CR schema") // validation should avoid this } - if *crd.Spec.PreserveUnknownFields == false { + if crd.Spec.PreserveUnknownFields == false { // we don't own s completely, e.g. defaults are not deep-copied. So better make a copy here. s = s.DeepCopy() @@ -679,36 +685,39 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd typer := newUnstructuredObjectTyper(parameterScheme) creator := unstructuredCreator{} - validationSchema, err := apiextensions.GetSchemaForVersion(crd, v.Name) + validationSchema, err := apiextensionshelpers.GetSchemaForVersion(crd, v.Name) if err != nil { utilruntime.HandleError(err) return nil, fmt.Errorf("the server could not properly serve the CR schema") } - validator, _, err := apiservervalidation.NewSchemaValidator(validationSchema) + var internalValidationSchema *apiextensionsinternal.CustomResourceValidation + if validationSchema != nil { + internalValidationSchema = &apiextensionsinternal.CustomResourceValidation{} + if err := apiextensions.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(validationSchema, internalValidationSchema, nil); err != nil { + return nil, fmt.Errorf("failed to convert CRD validation to internal version: %v", err) + } + } + validator, _, err := apiservervalidation.NewSchemaValidator(internalValidationSchema) if err != nil { return nil, err } - // Check for nil because we dereference this throughout the handler code. - // Note: we always default this to non-nil. But we should guard these dereferences any way. - if crd.Spec.PreserveUnknownFields == nil { - return nil, fmt.Errorf("unexpected nil spec.preserveUnknownFields in the CustomResourceDefinition") - } - - var statusSpec *apiextensions.CustomResourceSubresourceStatus + var statusSpec *apiextensionsinternal.CustomResourceSubresourceStatus var statusValidator *validate.SchemaValidator - subresources, err := apiextensions.GetSubresourcesForVersion(crd, v.Name) + subresources, err := apiextensionshelpers.GetSubresourcesForVersion(crd, v.Name) if err != nil { utilruntime.HandleError(err) return nil, fmt.Errorf("the server could not properly serve the CR subresources") } if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && subresources != nil && subresources.Status != nil { equivalentResourceRegistry.RegisterKindFor(resource, "status", kind) - - statusSpec = subresources.Status + statusSpec = &apiextensionsinternal.CustomResourceSubresourceStatus{} + if err := apiextensions.Convert_v1_CustomResourceSubresourceStatus_To_apiextensions_CustomResourceSubresourceStatus(subresources.Status, statusSpec, nil); err != nil { + return nil, fmt.Errorf("failed converting CRD status subresource to internal version: %v", err) + } // for the status subresource, validate only against the status schema - if validationSchema != nil && validationSchema.OpenAPIV3Schema != nil && validationSchema.OpenAPIV3Schema.Properties != nil { - if statusSchema, ok := validationSchema.OpenAPIV3Schema.Properties["status"]; ok { + if internalValidationSchema != nil && internalValidationSchema.OpenAPIV3Schema != nil && internalValidationSchema.OpenAPIV3Schema.Properties != nil { + if statusSchema, ok := internalValidationSchema.OpenAPIV3Schema.Properties["status"]; ok { openapiSchema := &spec.Schema{} if err := apiservervalidation.ConvertJSONSchemaPropsWithPostProcess(&statusSchema, openapiSchema, apiservervalidation.StripUnsupportedFormatsPostProcess); err != nil { return nil, err @@ -718,14 +727,16 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd } } - var scaleSpec *apiextensions.CustomResourceSubresourceScale + var scaleSpec *apiextensionsinternal.CustomResourceSubresourceScale if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && subresources != nil && subresources.Scale != nil { equivalentResourceRegistry.RegisterKindFor(resource, "scale", autoscalingv1.SchemeGroupVersion.WithKind("Scale")) - - scaleSpec = subresources.Scale + scaleSpec = &apiextensionsinternal.CustomResourceSubresourceScale{} + if err := apiextensions.Convert_v1_CustomResourceSubresourceScale_To_apiextensions_CustomResourceSubresourceScale(subresources.Scale, scaleSpec, nil); err != nil { + return nil, fmt.Errorf("failed converting CRD status subresource to internal version: %v", err) + } } - columns, err := apiextensions.GetColumnsForVersion(crd, v.Name) + columns, err := getColumnsForVersion(crd, v.Name) if err != nil { utilruntime.HandleError(err) return nil, fmt.Errorf("the server could not properly serve the CR columns") @@ -756,7 +767,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd encoderVersion: schema.GroupVersion{Group: crd.Spec.Group, Version: storageVersion}, structuralSchemas: structuralSchemas, structuralSchemaGK: kind.GroupKind(), - preserveUnknownFields: *crd.Spec.PreserveUnknownFields, + preserveUnknownFields: crd.Spec.PreserveUnknownFields, }, crd.Status.AcceptedNames.Categories, table, @@ -779,7 +790,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd converter: safeConverter, structuralSchemas: structuralSchemas, structuralSchemaGK: kind.GroupKind(), - preserveUnknownFields: *crd.Spec.PreserveUnknownFields, + preserveUnknownFields: crd.Spec.PreserveUnknownFields, } var standardSerializers []runtime.SerializerInfo for _, s := range negotiatedSerializer.SupportedMediaTypes() { @@ -830,7 +841,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd reqScope.Creater, reqScope.Kind, reqScope.HubGroupVersion, - *crd.Spec.PreserveUnknownFields, + crd.Spec.PreserveUnknownFields, ) if err != nil { return nil, err diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler_test.go index 9d1db5d27f3..951d02d6278 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler_test.go @@ -25,9 +25,9 @@ import ( "sigs.k8s.io/yaml" "testing" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apiserver/conversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer/protobuf" diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/helpers.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/helpers.go new file mode 100644 index 00000000000..83ae312726f --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/helpers.go @@ -0,0 +1,51 @@ +/* +Copyright 2019 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 apiserver + +import ( + "fmt" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +var swaggerMetadataDescriptions = metav1.ObjectMeta{}.SwaggerDoc() + +// getColumnsForVersion returns the columns for given version or nil. +// NOTE: the newly logically-defaulted columns is not pointing to the original CRD object. +// One cannot mutate the original CRD columns using the logically-defaulted columns. Please iterate through +// the original CRD object instead. +func getColumnsForVersion(crd *apiextensionsv1.CustomResourceDefinition, version string) ([]apiextensionsv1.CustomResourceColumnDefinition, error) { + for _, v := range crd.Spec.Versions { + if version == v.Name { + return serveDefaultColumnsIfEmpty(v.AdditionalPrinterColumns), nil + } + } + return nil, fmt.Errorf("version %s not found in apiextensionsv1.CustomResourceDefinition: %v", version, crd.Name) +} + +// serveDefaultColumnsIfEmpty applies logically defaulting to columns, if the input columns is empty. +// NOTE: in this way, the newly logically-defaulted columns is not pointing to the original CRD object. +// One cannot mutate the original CRD columns using the logically-defaulted columns. Please iterate through +// the original CRD object instead. +func serveDefaultColumnsIfEmpty(columns []apiextensionsv1.CustomResourceColumnDefinition) []apiextensionsv1.CustomResourceColumnDefinition { + if len(columns) > 0 { + return columns + } + return []apiextensionsv1.CustomResourceColumnDefinition{ + {Name: "Age", Type: "date", Description: swaggerMetadataDescriptions["creationTimestamp"], JSONPath: ".metadata.creationTimestamp"}, + } +} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/validation_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/validation_test.go index 54361461ede..2250c32c4e8 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/validation_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/validation_test.go @@ -24,7 +24,7 @@ import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" apiextensionsfuzzer "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/fuzzer" - apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/api/apitesting/fuzzer" apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/runtime" @@ -43,7 +43,7 @@ func TestRoundTrip(t *testing.T) { if err := apiextensions.AddToScheme(scheme); err != nil { t.Fatal(err) } - if err := apiextensionsv1beta1.AddToScheme(scheme); err != nil { + if err := apiextensionsv1.AddToScheme(scheme); err != nil { t.Fatal(err) } @@ -81,7 +81,7 @@ func TestRoundTrip(t *testing.T) { } // JSON -> external - external := &apiextensionsv1beta1.JSONSchemaProps{} + external := &apiextensionsv1.JSONSchemaProps{} if err := json.Unmarshal(openAPIJSON, external); err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller.go index 599f3d38f86..b2c860c8d43 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller.go @@ -22,11 +22,10 @@ import ( "time" "k8s.io/apiextensions-apiserver/pkg/apihelpers" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - client "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" @@ -133,7 +132,7 @@ func (c *KubernetesAPIApprovalPolicyConformantConditionController) sync(key stri } // avoid repeated calculation for the same annotation - protectionAnnotationValue := inCustomResourceDefinition.Annotations[v1beta1.KubeAPIApprovedAnnotation] + protectionAnnotationValue := inCustomResourceDefinition.Annotations[apiextensions.KubeAPIApprovedAnnotation] c.lastSeenProtectedAnnotationLock.Lock() lastSeen, seenBefore := c.lastSeenProtectedAnnotation[inCustomResourceDefinition.Name] c.lastSeenProtectedAnnotationLock.Unlock() @@ -147,7 +146,7 @@ func (c *KubernetesAPIApprovalPolicyConformantConditionController) sync(key stri // because group is immutable, if we have no condition now, we have no need to remove a condition. return nil } - old := apiextensions.FindCRDCondition(inCustomResourceDefinition, apiextensions.KubernetesAPIApprovalPolicyConformant) + old := apihelpers.FindCRDCondition(inCustomResourceDefinition, apiextensions.KubernetesAPIApprovalPolicyConformant) // don't attempt a write if all the condition details are the same if old != nil && old.Status == cond.Status && old.Reason == cond.Reason && old.Message == cond.Message { @@ -157,7 +156,7 @@ func (c *KubernetesAPIApprovalPolicyConformantConditionController) sync(key stri // update condition crd := inCustomResourceDefinition.DeepCopy() - apiextensions.SetCRDCondition(crd, *cond) + apihelpers.SetCRDCondition(crd, *cond) _, err = c.crdClient.CustomResourceDefinitions().UpdateStatus(crd) if apierrors.IsNotFound(err) || apierrors.IsConflict(err) { diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller_test.go index 49fa7a9fc08..387ea9b8729 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller_test.go @@ -19,8 +19,7 @@ package apiapproval import ( "testing" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -89,7 +88,7 @@ func TestCalculateCondition(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { crd := &apiextensions.CustomResourceDefinition{ - ObjectMeta: metav1.ObjectMeta{Name: "foo", Annotations: map[string]string{v1beta1.KubeAPIApprovedAnnotation: test.annotationValue}}, + ObjectMeta: metav1.ObjectMeta{Name: "foo", Annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: test.annotationValue}}, Spec: apiextensions.CustomResourceDefinitionSpec{ Group: test.group, }, diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/establishing_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/establishing_controller.go index 6f61fe753a2..37c22791f9b 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/establishing_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/establishing_controller.go @@ -27,10 +27,11 @@ import ( "k8s.io/client-go/util/workqueue" "k8s.io/klog" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - client "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" ) // EstablishingController controls how and when CRD is established. @@ -119,8 +120,8 @@ func (ec *EstablishingController) sync(key string) error { return err } - if !apiextensions.IsCRDConditionTrue(cachedCRD, apiextensions.NamesAccepted) || - apiextensions.IsCRDConditionTrue(cachedCRD, apiextensions.Established) { + if !apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensions.NamesAccepted) || + apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensions.Established) { return nil } @@ -131,7 +132,7 @@ func (ec *EstablishingController) sync(key string) error { Reason: "InitialNamesAccepted", Message: "the initial names have been accepted", } - apiextensions.SetCRDCondition(crd, establishedCondition) + apiextensionshelpers.SetCRDCondition(crd, establishedCondition) // Update server with new CRD condition. _, err = ec.crdClient.CustomResourceDefinitions().UpdateStatus(crd) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go index 81330540d7c..f3b1a43f954 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go @@ -36,10 +36,11 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - client "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" ) // OverlappingBuiltInResources returns the set of built-in group/resources that are persisted @@ -113,14 +114,14 @@ func (c *CRDFinalizer) sync(key string) error { } // no work to do - if cachedCRD.DeletionTimestamp.IsZero() || !apiextensions.CRDHasFinalizer(cachedCRD, apiextensions.CustomResourceCleanupFinalizer) { + if cachedCRD.DeletionTimestamp.IsZero() || !apiextensionshelpers.CRDHasFinalizer(cachedCRD, apiextensions.CustomResourceCleanupFinalizer) { return nil } crd := cachedCRD.DeepCopy() // update the status condition. This cleanup could take a while. - apiextensions.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ + apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ Type: apiextensions.Terminating, Status: apiextensions.ConditionTrue, Reason: "InstanceDeletionInProgress", @@ -139,15 +140,15 @@ func (c *CRDFinalizer) sync(key string) error { // Since we control the endpoints, we know that delete collection works. No need to delete if not established. if OverlappingBuiltInResources()[schema.GroupResource{Group: crd.Spec.Group, Resource: crd.Spec.Names.Plural}] { // Skip deletion, explain why, and proceed to remove the finalizer and delete the CRD - apiextensions.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ + apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ Type: apiextensions.Terminating, Status: apiextensions.ConditionFalse, Reason: "OverlappingBuiltInResource", Message: "instances overlap with built-in resources in storage", }) - } else if apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { + } else if apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { cond, deleteErr := c.deleteInstances(crd) - apiextensions.SetCRDCondition(crd, cond) + apiextensionshelpers.SetCRDCondition(crd, cond) if deleteErr != nil { if _, err = c.crdClient.CustomResourceDefinitions().UpdateStatus(crd); err != nil { utilruntime.HandleError(err) @@ -155,7 +156,7 @@ func (c *CRDFinalizer) sync(key string) error { return deleteErr } } else { - apiextensions.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ + apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ Type: apiextensions.Terminating, Status: apiextensions.ConditionFalse, Reason: "NeverEstablished", @@ -163,7 +164,7 @@ func (c *CRDFinalizer) sync(key string) error { }) } - apiextensions.CRDRemoveFinalizer(crd, apiextensions.CustomResourceCleanupFinalizer) + apiextensionshelpers.CRDRemoveFinalizer(crd, apiextensions.CustomResourceCleanupFinalizer) _, err = c.crdClient.CustomResourceDefinitions().UpdateStatus(crd) if apierrors.IsNotFound(err) || apierrors.IsConflict(err) { // deleted or changed in the meantime, we'll get called again @@ -312,7 +313,7 @@ func (c *CRDFinalizer) enqueue(obj *apiextensions.CustomResourceDefinition) { func (c *CRDFinalizer) addCustomResourceDefinition(obj interface{}) { castObj := obj.(*apiextensions.CustomResourceDefinition) // only queue deleted things - if !castObj.DeletionTimestamp.IsZero() && apiextensions.CRDHasFinalizer(castObj, apiextensions.CustomResourceCleanupFinalizer) { + if !castObj.DeletionTimestamp.IsZero() && apiextensionshelpers.CRDHasFinalizer(castObj, apiextensions.CustomResourceCleanupFinalizer) { c.enqueue(castObj) } } @@ -321,7 +322,7 @@ func (c *CRDFinalizer) updateCustomResourceDefinition(oldObj, newObj interface{} oldCRD := oldObj.(*apiextensions.CustomResourceDefinition) newCRD := newObj.(*apiextensions.CustomResourceDefinition) // only queue deleted things that haven't been finalized by us - if newCRD.DeletionTimestamp.IsZero() || !apiextensions.CRDHasFinalizer(newCRD, apiextensions.CustomResourceCleanupFinalizer) { + if newCRD.DeletionTimestamp.IsZero() || !apiextensionshelpers.CRDHasFinalizer(newCRD, apiextensions.CustomResourceCleanupFinalizer) { return } @@ -339,8 +340,8 @@ func (c *CRDFinalizer) updateCustomResourceDefinition(oldObj, newObj interface{} newCopy := newCRD.DeepCopy() oldCopy.ResourceVersion = "" newCopy.ResourceVersion = "" - apiextensions.RemoveCRDCondition(oldCopy, apiextensions.Terminating) - apiextensions.RemoveCRDCondition(newCopy, apiextensions.Terminating) + apiextensionshelpers.RemoveCRDCondition(oldCopy, apiextensions.Terminating) + apiextensionshelpers.RemoveCRDCondition(newCopy, apiextensions.Terminating) if !reflect.DeepEqual(oldCopy, newCopy) { c.enqueue(newCRD) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go index b6d64a786e3..18fe3a22a48 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go @@ -30,11 +30,13 @@ import ( "k8s.io/client-go/util/workqueue" "k8s.io/klog" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" - client "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" ) // ConditionController is maintaining the NonStructuralSchema condition. @@ -87,25 +89,17 @@ func calculateCondition(in *apiextensions.CustomResourceDefinition) *apiextensio allErrs := field.ErrorList{} - if in.Spec.Validation != nil && in.Spec.Validation.OpenAPIV3Schema != nil { - s, err := schema.NewStructural(in.Spec.Validation.OpenAPIV3Schema) - if err != nil { - cond.Reason = "StructuralError" - cond.Message = fmt.Sprintf("failed to check global validation schema: %v", err) - return cond - } - - pth := field.NewPath("spec", "validation", "openAPIV3Schema") - - allErrs = append(allErrs, schema.ValidateStructural(pth, s)...) - } - for i, v := range in.Spec.Versions { if v.Schema == nil || v.Schema.OpenAPIV3Schema == nil { continue } - s, err := schema.NewStructural(v.Schema.OpenAPIV3Schema) + internalSchema := &apiextensionsinternal.CustomResourceValidation{} + if err := apiextensions.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(v.Schema, internalSchema, nil); err != nil { + klog.Errorf("failed to convert CRD validation to internal version: %v", err) + continue + } + s, err := schema.NewStructural(internalSchema.OpenAPIV3Schema) if err != nil { cond.Reason = "StructuralError" cond.Message = fmt.Sprintf("failed to check validation schema for version %s: %v", v.Name, err) @@ -147,7 +141,7 @@ func (c *ConditionController) sync(key string) error { // check old condition cond := calculateCondition(inCustomResourceDefinition) - old := apiextensions.FindCRDCondition(inCustomResourceDefinition, apiextensions.NonStructuralSchema) + old := apiextensionshelpers.FindCRDCondition(inCustomResourceDefinition, apiextensions.NonStructuralSchema) if cond == nil && old == nil { return nil @@ -159,10 +153,10 @@ func (c *ConditionController) sync(key string) error { // update condition crd := inCustomResourceDefinition.DeepCopy() if cond == nil { - apiextensions.RemoveCRDCondition(crd, apiextensions.NonStructuralSchema) + apiextensionshelpers.RemoveCRDCondition(crd, apiextensions.NonStructuralSchema) } else { cond.LastTransitionTime = metav1.NewTime(time.Now()) - apiextensions.SetCRDCondition(crd, *cond) + apiextensionshelpers.SetCRDCondition(crd, *cond) } _, err = c.crdClient.CustomResourceDefinitions().UpdateStatus(crd) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go index af8f0983d27..607f9e0e8fc 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go @@ -26,7 +26,9 @@ import ( "github.com/go-openapi/spec" v1 "k8s.io/api/autoscaling/v1" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" openapiv2 "k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2" @@ -86,14 +88,18 @@ type Options struct { // BuildSwagger builds swagger for the given crd in the given version func BuildSwagger(crd *apiextensions.CustomResourceDefinition, version string, opts Options) (*spec.Swagger, error) { var schema *structuralschema.Structural - s, err := apiextensions.GetSchemaForVersion(crd, version) + s, err := apiextensionshelpers.GetSchemaForVersion(crd, version) if err != nil { return nil, err } if s != nil && s.OpenAPIV3Schema != nil { - if !validation.SchemaHasInvalidTypes(s.OpenAPIV3Schema) { - if ss, err := structuralschema.NewStructural(s.OpenAPIV3Schema); err == nil { + internalCRDSchema := &apiextensionsinternal.CustomResourceValidation{} + if err := apiextensions.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(s, internalCRDSchema, nil); err != nil { + return nil, fmt.Errorf("failed converting CRD validation to internal version: %v", err) + } + if !validation.SchemaHasInvalidTypes(internalCRDSchema.OpenAPIV3Schema) { + if ss, err := structuralschema.NewStructural(internalCRDSchema.OpenAPIV3Schema); err == nil { // skip non-structural schemas unless explicitly asked to produce swagger from them if opts.AllowNonStructural || len(structuralschema.ValidateStructural(nil, ss)) == 0 { schema = ss @@ -151,7 +157,7 @@ func BuildSwagger(crd *apiextensions.CustomResourceDefinition, version string, o routes = append(routes, b.buildRoute(root, "/{name}", "DELETE", "delete", "delete", status)) routes = append(routes, b.buildRoute(root, "/{name}", "PATCH", "patch", "patch", sample).Reads(patch)) - subresources, err := apiextensions.GetSubresourcesForVersion(crd, version) + subresources, err := apiextensionshelpers.GetSubresourcesForVersion(crd, version) if err != nil { return nil, err } @@ -517,8 +523,7 @@ func newBuilder(crd *apiextensions.CustomResourceDefinition, version string, sch } // Pre-build schema with Kubernetes native properties - preserveUnknownFields := crd.Spec.PreserveUnknownFields != nil && *crd.Spec.PreserveUnknownFields - b.schema = b.buildKubeNative(schema, v2, preserveUnknownFields) + b.schema = b.buildKubeNative(schema, v2, crd.Spec.PreserveUnknownFields) b.listSchema = b.buildListSchema() return b diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go index 3412532eec8..e2b7c2498d7 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go @@ -24,8 +24,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/json" @@ -352,12 +352,12 @@ func TestNewBuilder(t *testing.T) { t.Run(tt.name, func(t *testing.T) { var schema *structuralschema.Structural if len(tt.schema) > 0 { - v1beta1Schema := &v1beta1.JSONSchemaProps{} + v1beta1Schema := &apiextensions.JSONSchemaProps{} if err := json.Unmarshal([]byte(tt.schema), &v1beta1Schema); err != nil { t.Fatal(err) } - internalSchema := &apiextensions.JSONSchemaProps{} - v1beta1.Convert_v1beta1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(v1beta1Schema, internalSchema, nil) + internalSchema := &apiextensionsinternal.JSONSchemaProps{} + apiextensions.Convert_v1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(v1beta1Schema, internalSchema, nil) var err error schema, err = structuralschema.NewStructural(internalSchema) if err != nil { @@ -371,8 +371,12 @@ func TestNewBuilder(t *testing.T) { got := newBuilder(&apiextensions.CustomResourceDefinition{ Spec: apiextensions.CustomResourceDefinitionSpec{ - Group: "bar.k8s.io", - Version: "v1", + Group: "bar.k8s.io", + Versions: []apiextensions.CustomResourceDefinitionVersion{ + { + Name: "v1", + }, + }, Names: apiextensions.CustomResourceDefinitionNames{ Plural: "foos", Singular: "foo", @@ -478,12 +482,12 @@ func TestCRDRouteParameterBuilder(t *testing.T) { Versions: []apiextensions.CustomResourceDefinitionVersion{ { Name: testCRDVersion, + Subresources: &apiextensions.CustomResourceSubresources{ + Status: &apiextensions.CustomResourceSubresourceStatus{}, + Scale: &apiextensions.CustomResourceSubresourceScale{}, + }, }, }, - Subresources: &apiextensions.CustomResourceSubresources{ - Status: &apiextensions.CustomResourceSubresourceStatus{}, - Scale: &apiextensions.CustomResourceSubresourceScale{}, - }, }, } swagger, err := BuildSwagger(testNamespacedCRD, testCRDVersion, Options{V2: true, StripDefaults: true}) @@ -629,31 +633,35 @@ func TestBuildSwagger(t *testing.T) { t.Run(tt.name, func(t *testing.T) { var validation *apiextensions.CustomResourceValidation if len(tt.schema) > 0 { - v1beta1Schema := &v1beta1.JSONSchemaProps{} - if err := json.Unmarshal([]byte(tt.schema), &v1beta1Schema); err != nil { + v1Schema := &apiextensions.JSONSchemaProps{} + if err := json.Unmarshal([]byte(tt.schema), &v1Schema); err != nil { t.Fatal(err) } - internalSchema := &apiextensions.JSONSchemaProps{} - v1beta1.Convert_v1beta1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(v1beta1Schema, internalSchema, nil) validation = &apiextensions.CustomResourceValidation{ - OpenAPIV3Schema: internalSchema, + OpenAPIV3Schema: v1Schema, } } + if tt.preserveUnknownFields != nil && *tt.preserveUnknownFields { + validation.OpenAPIV3Schema.XPreserveUnknownFields = utilpointer.BoolPtr(true) + } // TODO: mostly copied from the test above. reuse code to cleanup got, err := BuildSwagger(&apiextensions.CustomResourceDefinition{ Spec: apiextensions.CustomResourceDefinitionSpec{ - Group: "bar.k8s.io", - Version: "v1", + Group: "bar.k8s.io", + Versions: []apiextensions.CustomResourceDefinitionVersion{ + { + Name: "v1", + Schema: validation, + }, + }, Names: apiextensions.CustomResourceDefinitionNames{ Plural: "foos", Singular: "foo", Kind: "Foo", ListKind: "FooList", }, - Scope: apiextensions.NamespaceScoped, - Validation: validation, - PreserveUnknownFields: tt.preserveUnknownFields, + Scope: apiextensions.NamespaceScoped, }, }, "v1", tt.opts) if err != nil { diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go index 57f6f525dae..f18c9f16c51 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go @@ -33,9 +33,10 @@ import ( "k8s.io/klog" "k8s.io/kube-openapi/pkg/handler" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder" ) @@ -99,7 +100,7 @@ func (c *Controller) Run(staticSpec *spec.Swagger, openAPIService *handler.OpenA return } for _, crd := range crds { - if !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { + if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { continue } newSpecs, changed, err := buildVersionSpecs(crd, nil) @@ -163,7 +164,7 @@ func (c *Controller) sync(name string) error { } // do we have to remove all specs of this CRD? - if errors.IsNotFound(err) || !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { + if errors.IsNotFound(err) || !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { if _, found := c.crdSpecs[name]; !found { return nil } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go index 844dfa6b759..4c82065bc09 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go @@ -34,10 +34,11 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - client "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" ) // This controller is reserving names. To avoid conflicts, be sure to run only one instance of the worker at a time. @@ -202,7 +203,7 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension Reason: "NotAccepted", Message: "not all names are accepted", } - if old := apiextensions.FindCRDCondition(in, apiextensions.Established); old != nil { + if old := apiextensionshelpers.FindCRDCondition(in, apiextensions.Established); old != nil { establishedCondition = *old } if establishedCondition.Status != apiextensions.ConditionTrue && namesAcceptedCondition.Status == apiextensions.ConditionTrue { @@ -251,14 +252,14 @@ func (c *NamingConditionController) sync(key string) error { // nothing to do if accepted names and NamesAccepted condition didn't change if reflect.DeepEqual(inCustomResourceDefinition.Status.AcceptedNames, acceptedNames) && - apiextensions.IsCRDConditionEquivalent(&namingCondition, apiextensions.FindCRDCondition(inCustomResourceDefinition, apiextensions.NamesAccepted)) { + apiextensionshelpers.IsCRDConditionEquivalent(&namingCondition, apiextensionshelpers.FindCRDCondition(inCustomResourceDefinition, apiextensions.NamesAccepted)) { return nil } crd := inCustomResourceDefinition.DeepCopy() crd.Status.AcceptedNames = acceptedNames - apiextensions.SetCRDCondition(crd, namingCondition) - apiextensions.SetCRDCondition(crd, establishedCondition) + apiextensionshelpers.SetCRDCondition(crd, namingCondition) + apiextensionshelpers.SetCRDCondition(crd, establishedCondition) updatedObj, err := c.crdClient.CustomResourceDefinitions().UpdateStatus(crd) if apierrors.IsNotFound(err) || apierrors.IsConflict(err) { diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller_test.go index 717e5288484..8b141e2534a 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller_test.go @@ -22,8 +22,9 @@ import ( "testing" "time" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/cache" ) @@ -334,10 +335,10 @@ func TestSync(t *testing.T) { if e, a := tc.expectedNames, actualNames; !reflect.DeepEqual(e, a) { t.Errorf("%v expected %v, got %#v", tc.name, e, a) } - if e, a := tc.expectedNameConflictCondition, actualNameConflictCondition; !apiextensions.IsCRDConditionEquivalent(&e, &a) { + if e, a := tc.expectedNameConflictCondition, actualNameConflictCondition; !apiextensionshelpers.IsCRDConditionEquivalent(&e, &a) { t.Errorf("%v expected %v, got %v", tc.name, e, a) } - if e, a := tc.expectedEstablishedCondition, establishedCondition; !apiextensions.IsCRDConditionEquivalent(&e, &a) { + if e, a := tc.expectedEstablishedCondition, establishedCondition; !apiextensionshelpers.IsCRDConditionEquivalent(&e, &a) { t.Errorf("%v expected %v, got %v", tc.name, e, a) } } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go index 347e8fed8c9..66c749e9610 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go @@ -39,7 +39,8 @@ import ( "k8s.io/apiserver/pkg/registry/rest" etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apiserver" "k8s.io/apiextensions-apiserver/pkg/crdserverscheme" "k8s.io/apiextensions-apiserver/pkg/registry/customresource" @@ -67,13 +68,13 @@ func newStorage(t *testing.T) (customresource.CustomResourceStorage, *etcd3testi kind := schema.GroupVersionKind{Group: "mygroup.example.com", Version: "v1beta1", Kind: "Noxu"} labelSelectorPath := ".status.labelSelector" - scale := &apiextensions.CustomResourceSubresourceScale{ + scale := &apiextensionsinternal.CustomResourceSubresourceScale{ SpecReplicasPath: ".spec.replicas", StatusReplicasPath: ".status.replicas", LabelSelectorPath: &labelSelectorPath, } - status := &apiextensions.CustomResourceSubresourceStatus{} + status := &apiextensionsinternal.CustomResourceSubresourceStatus{} headers := []apiextensions.CustomResourceColumnDefinition{ {Name: "Age", Type: "date", JSONPath: ".metadata.creationTimestamp"}, diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/tableconvertor.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/tableconvertor.go index 5b3a8e866d2..e335cecc04a 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/tableconvertor.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/tableconvertor.go @@ -23,7 +23,7 @@ import ( "fmt" "reflect" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/api/meta" metatable "k8s.io/apimachinery/pkg/api/meta/table" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go index 059f49a3b8b..50d1a5e76cf 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go @@ -776,7 +776,7 @@ spec: if err != nil { t.Fatalf("unexpected error waiting for NonStructuralSchema condition: %v", cond) } - if v := "spec.validation.openAPIV3Schema.properties[a].type: Required value: must not be empty for specified object fields"; !strings.Contains(cond.Message, v) { + if v := "spec.versions[0].schema.openAPIV3Schema.properties[a].type: Required value: must not be empty for specified object fields"; !strings.Contains(cond.Message, v) { t.Fatalf("expected violation %q, but got: %v", v, cond.Message) } @@ -845,7 +845,7 @@ spec: if err != nil { t.Fatalf("unexpected error waiting for NonStructuralSchema condition: %v", cond) } - if v := "spec.validation.openAPIV3Schema.properties[a].type: Required value: must not be empty for specified object fields"; !strings.Contains(cond.Message, v) { + if v := "spec.versions[0].schema.openAPIV3Schema.properties[a].type: Required value: must not be empty for specified object fields"; !strings.Contains(cond.Message, v) { t.Fatalf("expected violation %q, but got: %v", v, cond.Message) } } @@ -926,12 +926,12 @@ x-kubernetes-embedded-resource: true type: object x-kubernetes-embedded-resource: true properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object + apiVersion: + type: string + kind: + type: string + metadata: + type: object `, expectedViolations: []string{}, }, @@ -972,7 +972,7 @@ x-kubernetes-preserve-unknown-fields: true type: "" `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.type: Required value: must not be empty at the root", + "spec.versions[0].schema.openAPIV3Schema.type: Required value: must not be empty at the root", }, }, { @@ -981,7 +981,7 @@ type: "" type: "integer" `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.type: Invalid value: \"integer\": must be object at the root", + "spec.versions[0].schema.openAPIV3Schema.type: Invalid value: \"integer\": must be object at the root", }, }, { @@ -989,63 +989,63 @@ type: "integer" globalSchema: ` type: object properties: - foo: - type: string + foo: + type: string not: - type: string - additionalProperties: true - title: hello - description: world - nullable: true + type: string + additionalProperties: true + title: hello + description: world + nullable: true allOf: - properties: - foo: - type: string - additionalProperties: true - title: hello - description: world - nullable: true + foo: + type: string + additionalProperties: true + title: hello + description: world + nullable: true anyOf: - items: - type: string - additionalProperties: true - title: hello - description: world - nullable: true + type: string + additionalProperties: true + title: hello + description: world + nullable: true oneOf: - properties: - foo: - type: string - additionalProperties: true - title: hello - description: world - nullable: true + foo: + type: string + additionalProperties: true + title: hello + description: world + nullable: true `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.anyOf[0].items.type: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.anyOf[0].items.additionalProperties: Forbidden: must be undefined to be structural", - "spec.validation.openAPIV3Schema.anyOf[0].items.title: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.anyOf[0].items.description: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.anyOf[0].items.nullable: Forbidden: must be false to be structural", - "spec.validation.openAPIV3Schema.allOf[0].properties[foo].type: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.allOf[0].properties[foo].additionalProperties: Forbidden: must be undefined to be structural", - "spec.validation.openAPIV3Schema.allOf[0].properties[foo].title: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.allOf[0].properties[foo].description: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.allOf[0].properties[foo].nullable: Forbidden: must be false to be structural", - "spec.validation.openAPIV3Schema.oneOf[0].properties[foo].type: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.oneOf[0].properties[foo].additionalProperties: Forbidden: must be undefined to be structural", - "spec.validation.openAPIV3Schema.oneOf[0].properties[foo].title: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.oneOf[0].properties[foo].description: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.oneOf[0].properties[foo].nullable: Forbidden: must be false to be structural", - "spec.validation.openAPIV3Schema.not.type: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.not.additionalProperties: Forbidden: must be undefined to be structural", - "spec.validation.openAPIV3Schema.not.title: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.not.description: Forbidden: must be empty to be structural", - "spec.validation.openAPIV3Schema.not.nullable: Forbidden: must be false to be structural", - "spec.validation.openAPIV3Schema.items: Required value: because it is defined in spec.validation.openAPIV3Schema.anyOf[0].items", + "spec.versions[0].schema.openAPIV3Schema.anyOf[0].items.type: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.anyOf[0].items.additionalProperties: Forbidden: must be undefined to be structural", + "spec.versions[0].schema.openAPIV3Schema.anyOf[0].items.title: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.anyOf[0].items.description: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.anyOf[0].items.nullable: Forbidden: must be false to be structural", + "spec.versions[0].schema.openAPIV3Schema.allOf[0].properties[foo].type: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.allOf[0].properties[foo].additionalProperties: Forbidden: must be undefined to be structural", + "spec.versions[0].schema.openAPIV3Schema.allOf[0].properties[foo].title: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.allOf[0].properties[foo].description: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.allOf[0].properties[foo].nullable: Forbidden: must be false to be structural", + "spec.versions[0].schema.openAPIV3Schema.oneOf[0].properties[foo].type: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.oneOf[0].properties[foo].additionalProperties: Forbidden: must be undefined to be structural", + "spec.versions[0].schema.openAPIV3Schema.oneOf[0].properties[foo].title: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.oneOf[0].properties[foo].description: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.oneOf[0].properties[foo].nullable: Forbidden: must be false to be structural", + "spec.versions[0].schema.openAPIV3Schema.not.type: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.not.additionalProperties: Forbidden: must be undefined to be structural", + "spec.versions[0].schema.openAPIV3Schema.not.title: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.not.description: Forbidden: must be empty to be structural", + "spec.versions[0].schema.openAPIV3Schema.not.nullable: Forbidden: must be false to be structural", + "spec.versions[0].schema.openAPIV3Schema.items: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.anyOf[0].items", }, unexpectedViolations: []string{ - "spec.validation.openAPIV3Schema.not.default", + "spec.versions[0].schema.openAPIV3Schema.not.default", }, }, { @@ -1053,12 +1053,12 @@ oneOf: globalSchema: ` type: object properties: - foo: - type: string - pattern: "+" + foo: + type: string + pattern: "+" `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.properties[foo].pattern: Invalid value: \"+\": must be a valid regular expression, but isn't: error parsing regexp: missing argument to repetition operator: `+`", + "spec.versions[0].schema.openAPIV3Schema.properties[foo].pattern: Invalid value: \"+\": must be a valid regular expression, but isn't: error parsing regexp: missing argument to repetition operator: `+`", }, }, { @@ -1066,40 +1066,40 @@ properties: globalSchema: ` type: object properties: - int-or-string: - x-kubernetes-int-or-string: true - embedded-resource: - type: object - x-kubernetes-embedded-resource: true - x-kubernetes-preserve-unknown-fields: true + int-or-string: + x-kubernetes-int-or-string: true + embedded-resource: + type: object + x-kubernetes-embedded-resource: true + x-kubernetes-preserve-unknown-fields: true not: - properties: - int-or-string: - x-kubernetes-int-or-string: true - embedded-resource: - x-kubernetes-embedded-resource: true - x-kubernetes-preserve-unknown-fields: true + properties: + int-or-string: + x-kubernetes-int-or-string: true + embedded-resource: + x-kubernetes-embedded-resource: true + x-kubernetes-preserve-unknown-fields: true allOf: - properties: - int-or-string: - x-kubernetes-int-or-string: true - embedded-resource: - x-kubernetes-embedded-resource: true - x-kubernetes-preserve-unknown-fields: true + int-or-string: + x-kubernetes-int-or-string: true + embedded-resource: + x-kubernetes-embedded-resource: true + x-kubernetes-preserve-unknown-fields: true anyOf: - properties: - int-or-string: - x-kubernetes-int-or-string: true - embedded-resource: - x-kubernetes-embedded-resource: true - x-kubernetes-preserve-unknown-fields: true + int-or-string: + x-kubernetes-int-or-string: true + embedded-resource: + x-kubernetes-embedded-resource: true + x-kubernetes-preserve-unknown-fields: true oneOf: - properties: - int-or-string: - x-kubernetes-int-or-string: true - embedded-resource: - x-kubernetes-embedded-resource: true - x-kubernetes-preserve-unknown-fields: true + int-or-string: + x-kubernetes-int-or-string: true + embedded-resource: + x-kubernetes-embedded-resource: true + x-kubernetes-preserve-unknown-fields: true `, expectedCreateErrors: []string{ "spec.validation.openAPIV3Schema.allOf[0].properties[embedded-resource].x-kubernetes-preserve-unknown-fields: Forbidden: must be false to be structural", @@ -1120,30 +1120,30 @@ oneOf: desc: "missing types with extensions", globalSchema: ` properties: - foo: - properties: - a: {} - bar: - items: - additionalProperties: - properties: - a: {} - items: {} - abc: - additionalProperties: - properties: - a: - items: - additionalProperties: - items: - json: - x-kubernetes-preserve-unknown-fields: true - properties: - a: {} - int-or-string: - x-kubernetes-int-or-string: true - properties: - a: {} + foo: + properties: + a: {} + bar: + items: + additionalProperties: + properties: + a: {} + items: {} + abc: + additionalProperties: + properties: + a: + items: + additionalProperties: + items: + json: + x-kubernetes-preserve-unknown-fields: true + properties: + a: {} + int-or-string: + x-kubernetes-int-or-string: true + properties: + a: {} `, expectedCreateErrors: []string{ "spec.validation.openAPIV3Schema.properties[foo].properties[a].type: Required value: must not be empty for specified object fields", @@ -1167,37 +1167,37 @@ properties: desc: "missing types without extensions", globalSchema: ` properties: - foo: - properties: - a: {} - bar: - items: - additionalProperties: - properties: - a: {} - items: {} - abc: - additionalProperties: - properties: - a: - items: - additionalProperties: - items: + foo: + properties: + a: {} + bar: + items: + additionalProperties: + properties: + a: {} + items: {} + abc: + additionalProperties: + properties: + a: + items: + additionalProperties: + items: `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.properties[foo].properties[a].type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[foo].type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[abc].additionalProperties.properties[a].items.additionalProperties.type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[abc].additionalProperties.properties[a].items.type: Required value: must not be empty for specified array items", - "spec.validation.openAPIV3Schema.properties[abc].additionalProperties.properties[a].type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[abc].additionalProperties.type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[abc].type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[bar].items.additionalProperties.items.type: Required value: must not be empty for specified array items", - "spec.validation.openAPIV3Schema.properties[bar].items.additionalProperties.properties[a].type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[bar].items.additionalProperties.type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[bar].items.type: Required value: must not be empty for specified array items", - "spec.validation.openAPIV3Schema.properties[bar].type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.type: Required value: must not be empty at the root", + "spec.versions[0].schema.openAPIV3Schema.properties[foo].properties[a].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[foo].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[abc].additionalProperties.properties[a].items.additionalProperties.type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[abc].additionalProperties.properties[a].items.type: Required value: must not be empty for specified array items", + "spec.versions[0].schema.openAPIV3Schema.properties[abc].additionalProperties.properties[a].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[abc].additionalProperties.type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[abc].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[bar].items.additionalProperties.items.type: Required value: must not be empty for specified array items", + "spec.versions[0].schema.openAPIV3Schema.properties[bar].items.additionalProperties.properties[a].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[bar].items.additionalProperties.type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[bar].items.type: Required value: must not be empty for specified array items", + "spec.versions[0].schema.openAPIV3Schema.properties[bar].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.type: Required value: must not be empty at the root", }, }, { @@ -1205,48 +1205,48 @@ properties: globalSchema: ` type: object properties: - a: - x-kubernetes-int-or-string: true - b: - x-kubernetes-int-or-string: true - anyOf: - - type: integer - - type: string - allOf: - - pattern: abc - c: - x-kubernetes-int-or-string: true - allOf: - - anyOf: - - type: integer - - type: string - - pattern: abc - - pattern: abc - d: - x-kubernetes-int-or-string: true - anyOf: - - type: integer - - type: string - pattern: abc - e: - x-kubernetes-int-or-string: true - allOf: - - anyOf: - - type: integer - - type: string - pattern: abc - - pattern: abc - f: - x-kubernetes-int-or-string: true - anyOf: - - type: integer - - type: string - - pattern: abc - g: - x-kubernetes-int-or-string: true - anyOf: - - type: string - - type: integer + a: + x-kubernetes-int-or-string: true + b: + x-kubernetes-int-or-string: true + anyOf: + - type: integer + - type: string + allOf: + - pattern: abc + c: + x-kubernetes-int-or-string: true + allOf: + - anyOf: + - type: integer + - type: string + - pattern: abc + - pattern: abc + d: + x-kubernetes-int-or-string: true + anyOf: + - type: integer + - type: string + pattern: abc + e: + x-kubernetes-int-or-string: true + allOf: + - anyOf: + - type: integer + - type: string + pattern: abc + - pattern: abc + f: + x-kubernetes-int-or-string: true + anyOf: + - type: integer + - type: string + - pattern: abc + g: + x-kubernetes-int-or-string: true + anyOf: + - type: string + - type: integer `, expectedCreateErrors: []string{ "spec.validation.openAPIV3Schema.properties[d].anyOf[0].type: Forbidden: must be empty to be structural", @@ -1271,7 +1271,7 @@ type: object additionalProperties: false `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.additionalProperties: Forbidden: must not be used at the root", + "spec.versions[0].schema.openAPIV3Schema.additionalProperties: Forbidden: must not be used at the root", }, }, { @@ -1279,53 +1279,53 @@ additionalProperties: false globalSchema: ` type: object properties: - b: - type: object - properties: - b: - type: array - c: - type: array - items: - type: object - d: - type: array + b: + type: object + properties: + b: + type: array + c: + type: array + items: + type: object + d: + type: array not: - properties: - a: {} - b: - not: - properties: - a: {} - b: - items: {} - c: - items: - not: - items: - properties: - a: {} - d: - items: {} + properties: + a: {} + b: + not: + properties: + a: {} + b: + items: {} + c: + items: + not: + items: + properties: + a: {} + d: + items: {} allOf: - properties: - e: {} + e: {} anyOf: - properties: - f: {} + f: {} oneOf: - properties: - g: {} + g: {} `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.properties[d].items: Required value: because it is defined in spec.validation.openAPIV3Schema.not.properties[d].items", - "spec.validation.openAPIV3Schema.properties[a]: Required value: because it is defined in spec.validation.openAPIV3Schema.not.properties[a]", - "spec.validation.openAPIV3Schema.properties[b].properties[a]: Required value: because it is defined in spec.validation.openAPIV3Schema.not.properties[b].not.properties[a]", - "spec.validation.openAPIV3Schema.properties[b].properties[b].items: Required value: because it is defined in spec.validation.openAPIV3Schema.not.properties[b].not.properties[b].items", - "spec.validation.openAPIV3Schema.properties[c].items.items: Required value: because it is defined in spec.validation.openAPIV3Schema.not.properties[c].items.not.items", - "spec.validation.openAPIV3Schema.properties[e]: Required value: because it is defined in spec.validation.openAPIV3Schema.allOf[0].properties[e]", - "spec.validation.openAPIV3Schema.properties[f]: Required value: because it is defined in spec.validation.openAPIV3Schema.anyOf[0].properties[f]", - "spec.validation.openAPIV3Schema.properties[g]: Required value: because it is defined in spec.validation.openAPIV3Schema.oneOf[0].properties[g]", + "spec.versions[0].schema.openAPIV3Schema.properties[d].items: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.not.properties[d].items", + "spec.versions[0].schema.openAPIV3Schema.properties[a]: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.not.properties[a]", + "spec.versions[0].schema.openAPIV3Schema.properties[b].properties[a]: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.not.properties[b].not.properties[a]", + "spec.versions[0].schema.openAPIV3Schema.properties[b].properties[b].items: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.not.properties[b].not.properties[b].items", + "spec.versions[0].schema.openAPIV3Schema.properties[c].items.items: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.not.properties[c].items.not.items", + "spec.versions[0].schema.openAPIV3Schema.properties[e]: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.allOf[0].properties[e]", + "spec.versions[0].schema.openAPIV3Schema.properties[f]: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.anyOf[0].properties[f]", + "spec.versions[0].schema.openAPIV3Schema.properties[g]: Required value: because it is defined in spec.versions[0].schema.openAPIV3Schema.oneOf[0].properties[g]", }, }, { @@ -1333,62 +1333,62 @@ oneOf: globalSchema: ` type: object properties: - a: - type: string - b: - type: object - properties: - a: - type: string - b: - type: array - items: - type: string - c: - type: array - items: - type: array - items: - type: object - properties: - a: - type: string - d: - type: array - items: - type: string - e: - type: string - f: - type: string - g: - type: string + a: + type: string + b: + type: object + properties: + a: + type: string + b: + type: array + items: + type: string + c: + type: array + items: + type: array + items: + type: object + properties: + a: + type: string + d: + type: array + items: + type: string + e: + type: string + f: + type: string + g: + type: string not: - properties: - a: {} - b: - not: - properties: - a: {} - b: - items: {} - c: - items: - not: - items: - properties: - a: {} - d: - items: {} + properties: + a: {} + b: + not: + properties: + a: {} + b: + items: {} + c: + items: + not: + items: + properties: + a: {} + d: + items: {} allOf: - properties: - e: {} + e: {} anyOf: - properties: - f: {} + f: {} oneOf: - properties: - g: {} + g: {} `, expectedViolations: nil, }, @@ -1397,16 +1397,16 @@ oneOf: v1beta1Schema: ` type: object properties: - a: {} + a: {} not: - properties: - b: {} + properties: + b: {} `, v1Schema: ` type: object properties: - a: - type: string + a: + type: string `, expectedViolations: []string{ "spec.versions[0].schema.openAPIV3Schema.properties[a].type: Required value: must not be empty for specified object fields", @@ -1418,18 +1418,18 @@ properties: v1beta1Schema: ` type: object properties: - a: {} + a: {} not: - properties: - b: {} + properties: + b: {} `, v1Schema: ` type: object properties: - c: {} + c: {} not: - properties: - d: {} + properties: + d: {} `, expectedViolations: []string{ "spec.versions[0].schema.openAPIV3Schema.properties[a].type: Required value: must not be empty for specified object fields", @@ -1443,12 +1443,12 @@ not: globalSchema: ` type: object properties: - metadata: - minimum: 42.0 + metadata: + minimum: 42.0 `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.properties[metadata]: Forbidden: must not specify anything other than name and generateName, but metadata is implicitly specified", - "spec.validation.openAPIV3Schema.properties[metadata].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[metadata]: Forbidden: must not specify anything other than name and generateName, but metadata is implicitly specified", + "spec.versions[0].schema.openAPIV3Schema.properties[metadata].type: Required value: must not be empty for specified object fields", }, }, { @@ -1456,18 +1456,18 @@ properties: globalSchema: ` type: object properties: - metadata: - properties: - name: - pattern: "^[a-z]+$" - labels: - type: object - maxLength: 4 + metadata: + properties: + name: + pattern: "^[a-z]+$" + labels: + type: object + maxLength: 4 `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.properties[metadata]: Forbidden: must not specify anything other than name and generateName, but metadata is implicitly specified", - "spec.validation.openAPIV3Schema.properties[metadata].type: Required value: must not be empty for specified object fields", - "spec.validation.openAPIV3Schema.properties[metadata].properties[name].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[metadata]: Forbidden: must not specify anything other than name and generateName, but metadata is implicitly specified", + "spec.versions[0].schema.openAPIV3Schema.properties[metadata].type: Required value: must not be empty for specified object fields", + "spec.versions[0].schema.openAPIV3Schema.properties[metadata].properties[name].type: Required value: must not be empty for specified object fields", }, }, { @@ -1475,12 +1475,12 @@ properties: globalSchema: ` type: object properties: - metadata: - type: object - properties: - name: - type: string - pattern: "^[a-z]+$" + metadata: + type: object + properties: + name: + type: string + pattern: "^[a-z]+$" `, expectedViolations: []string{}, }, @@ -1489,12 +1489,12 @@ properties: globalSchema: ` type: object properties: - metadata: - type: object - properties: - generateName: - type: string - pattern: "^[a-z]+$" + metadata: + type: object + properties: + generateName: + type: string + pattern: "^[a-z]+$" `, expectedViolations: []string{}, }, @@ -1503,15 +1503,15 @@ properties: globalSchema: ` type: object properties: - metadata: - type: object - properties: - name: - type: string - pattern: "^[a-z]+$" - generateName: - type: string - pattern: "^[a-z]+$" + metadata: + type: object + properties: + name: + type: string + pattern: "^[a-z]+$" + generateName: + type: string + pattern: "^[a-z]+$" `, expectedViolations: []string{}, }, @@ -1520,30 +1520,30 @@ properties: globalSchema: ` type: object properties: - metadata: - type: object - properties: - name: - type: string - pattern: "^[a-z]+$" + metadata: + type: object + properties: + name: + type: string + pattern: "^[a-z]+$" allOf: - properties: - metadata: {} + metadata: {} anyOf: - properties: - metadata: {} + metadata: {} oneOf: - properties: - metadata: {} + metadata: {} not: - properties: - metadata: {} + properties: + metadata: {} `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.anyOf[0].properties[metadata]: Forbidden: must not be specified in a nested context", - "spec.validation.openAPIV3Schema.allOf[0].properties[metadata]: Forbidden: must not be specified in a nested context", - "spec.validation.openAPIV3Schema.oneOf[0].properties[metadata]: Forbidden: must not be specified in a nested context", - "spec.validation.openAPIV3Schema.not.properties[metadata]: Forbidden: must not be specified in a nested context", + "spec.versions[0].schema.openAPIV3Schema.anyOf[0].properties[metadata]: Forbidden: must not be specified in a nested context", + "spec.versions[0].schema.openAPIV3Schema.allOf[0].properties[metadata]: Forbidden: must not be specified in a nested context", + "spec.versions[0].schema.openAPIV3Schema.oneOf[0].properties[metadata]: Forbidden: must not be specified in a nested context", + "spec.versions[0].schema.openAPIV3Schema.not.properties[metadata]: Forbidden: must not be specified in a nested context", }, }, { @@ -1551,11 +1551,11 @@ not: globalSchema: ` type: object properties: - slice: - type: array + slice: + type: array `, expectedViolations: []string{ - "spec.validation.openAPIV3Schema.properties[slice].items: Required value: must be specified", + "spec.versions[0].schema.openAPIV3Schema.properties[slice].items: Required value: must be specified", }, }, { @@ -1563,11 +1563,11 @@ properties: globalSchema: ` type: object properties: - slice: - type: array - items: - - type: string - - type: integer + slice: + type: array + items: + - type: string + - type: integer `, expectedCreateErrors: []string{"spec.validation.openAPIV3Schema.properties[slice].items: Forbidden: items must be a schema object and not an array"}, }, @@ -1576,13 +1576,13 @@ properties: globalSchema: ` type: object properties: - slice: - type: array - items: - type: string - not: - items: - - type: string + slice: + type: array + items: + type: string + not: + items: + - type: string `, expectedCreateErrors: []string{"spec.validation.openAPIV3Schema.properties[slice].not.items: Forbidden: items must be a schema object and not an array"}, }, From 15a883b06740ddbb201bd8560524cb22291ce923 Mon Sep 17 00:00:00 2001 From: yue9944882 <291271447@qq.com> Date: Fri, 29 Nov 2019 17:34:55 +0800 Subject: [PATCH 3/5] s/apiextensions/apiextensionsv1/ for all imports in k/k rename alias import fmt --- .../crdregistration_controller.go | 14 +- .../crdregistration_controller_test.go | 16 +- .../pkg/apihelpers/helpers.go | 56 ++-- .../pkg/apihelpers/helpers_test.go | 266 +++++++++--------- .../pkg/apiserver/conversion/converter.go | 10 +- .../apiserver/conversion/converter_test.go | 12 +- .../apiserver/conversion/webhook_converter.go | 6 +- .../customresource_discovery_controller.go | 24 +- .../pkg/apiserver/customresource_handler.go | 46 +-- .../apiserver/customresource_handler_test.go | 12 +- .../apiapproval/apiapproval_controller.go | 48 ++-- .../apiapproval_controller_test.go | 24 +- .../establish/establishing_controller.go | 12 +- .../pkg/controller/finalizer/crd_finalizer.go | 76 ++--- .../nonstructuralschema_controller.go | 28 +- .../pkg/controller/openapi/builder/builder.go | 10 +- .../openapi/builder/builder_test.go | 52 ++-- .../pkg/controller/openapi/controller.go | 18 +- .../controller/status/naming_controller.go | 54 ++-- .../status/naming_controller_test.go | 98 +++---- .../pkg/registry/customresource/etcd_test.go | 4 +- .../tableconvertor/tableconvertor.go | 4 +- 22 files changed, 445 insertions(+), 445 deletions(-) diff --git a/pkg/master/controller/crdregistration/crdregistration_controller.go b/pkg/master/controller/crdregistration/crdregistration_controller.go index 3f67871bb31..26cab14b3f4 100644 --- a/pkg/master/controller/crdregistration/crdregistration_controller.go +++ b/pkg/master/controller/crdregistration/crdregistration_controller.go @@ -22,7 +22,7 @@ import ( "k8s.io/klog" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" crdinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -73,24 +73,24 @@ func NewCRDRegistrationController(crdinformer crdinformers.CustomResourceDefinit crdinformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { - cast := obj.(*apiextensions.CustomResourceDefinition) + cast := obj.(*apiextensionsv1.CustomResourceDefinition) c.enqueueCRD(cast) }, UpdateFunc: func(oldObj, newObj interface{}) { // Enqueue both old and new object to make sure we remove and add appropriate API services. // The working queue will resolve any duplicates and only changes will stay in the queue. - c.enqueueCRD(oldObj.(*apiextensions.CustomResourceDefinition)) - c.enqueueCRD(newObj.(*apiextensions.CustomResourceDefinition)) + c.enqueueCRD(oldObj.(*apiextensionsv1.CustomResourceDefinition)) + c.enqueueCRD(newObj.(*apiextensionsv1.CustomResourceDefinition)) }, DeleteFunc: func(obj interface{}) { - cast, ok := obj.(*apiextensions.CustomResourceDefinition) + cast, ok := obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { tombstone, ok := obj.(cache.DeletedFinalStateUnknown) if !ok { klog.V(2).Infof("Couldn't get object from tombstone %#v", obj) return } - cast, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) + cast, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { klog.V(2).Infof("Tombstone contained unexpected object: %#v", obj) return @@ -184,7 +184,7 @@ func (c *crdRegistrationController) processNextWorkItem() bool { return true } -func (c *crdRegistrationController) enqueueCRD(crd *apiextensions.CustomResourceDefinition) { +func (c *crdRegistrationController) enqueueCRD(crd *apiextensionsv1.CustomResourceDefinition) { for _, version := range crd.Spec.Versions { c.queue.Add(schema.GroupVersion{Group: crd.Spec.Group, Version: version.Name}) } diff --git a/pkg/master/controller/crdregistration/crdregistration_controller_test.go b/pkg/master/controller/crdregistration/crdregistration_controller_test.go index 3d98d68f1d8..e99e5702184 100644 --- a/pkg/master/controller/crdregistration/crdregistration_controller_test.go +++ b/pkg/master/controller/crdregistration/crdregistration_controller_test.go @@ -20,7 +20,7 @@ import ( "reflect" "testing" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -31,7 +31,7 @@ import ( func TestHandleVersionUpdate(t *testing.T) { tests := []struct { name string - startingCRDs []*apiextensions.CustomResourceDefinition + startingCRDs []*apiextensionsv1.CustomResourceDefinition version schema.GroupVersion expectedAdded []*apiregistration.APIService @@ -39,13 +39,13 @@ func TestHandleVersionUpdate(t *testing.T) { }{ { name: "simple add crd", - startingCRDs: []*apiextensions.CustomResourceDefinition{ + startingCRDs: []*apiextensionsv1.CustomResourceDefinition{ { - Spec: apiextensions.CustomResourceDefinitionSpec{ + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ Group: "group.com", // Version field is deprecated and crd registration won't rely on it at all. // defaulting route will fill up Versions field if user only provided version field. - Versions: []apiextensions.CustomResourceDefinitionVersion{ + Versions: []apiextensionsv1.CustomResourceDefinitionVersion{ { Name: "v1", Served: true, @@ -71,11 +71,11 @@ func TestHandleVersionUpdate(t *testing.T) { }, { name: "simple remove crd", - startingCRDs: []*apiextensions.CustomResourceDefinition{ + startingCRDs: []*apiextensionsv1.CustomResourceDefinition{ { - Spec: apiextensions.CustomResourceDefinitionSpec{ + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ Group: "group.com", - Versions: []apiextensions.CustomResourceDefinitionVersion{ + Versions: []apiextensionsv1.CustomResourceDefinitionVersion{ { Name: "v1", Served: true, diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers.go index 523d968a500..6ead5b1113c 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers.go @@ -22,7 +22,7 @@ import ( "strings" "time" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -56,24 +56,24 @@ const ( // GetAPIApprovalState returns the state of the API approval and reason for that state func GetAPIApprovalState(annotations map[string]string) (state APIApprovalState, reason string) { - annotation := annotations[apiextensions.KubeAPIApprovedAnnotation] + annotation := annotations[apiextensionsv1.KubeAPIApprovedAnnotation] // we use the result of this parsing in the switch/case below url, annotationURLParseErr := url.ParseRequestURI(annotation) switch { case len(annotation) == 0: - return APIApprovalMissing, fmt.Sprintf("protected groups must have approval annotation %q, see https://github.com/kubernetes/enhancements/pull/1111", apiextensions.KubeAPIApprovedAnnotation) + return APIApprovalMissing, fmt.Sprintf("protected groups must have approval annotation %q, see https://github.com/kubernetes/enhancements/pull/1111", apiextensionsv1.KubeAPIApprovedAnnotation) case strings.HasPrefix(annotation, "unapproved"): return APIApprovalBypassed, fmt.Sprintf("not approved: %q", annotation) case annotationURLParseErr == nil && url != nil && len(url.Host) > 0 && len(url.Scheme) > 0: return APIApproved, fmt.Sprintf("approved in %v", annotation) default: - return APIApprovalInvalid, fmt.Sprintf("protected groups must have approval annotation %q with either a URL or a reason starting with \"unapproved\", see https://github.com/kubernetes/enhancements/pull/1111", apiextensions.KubeAPIApprovedAnnotation) + return APIApprovalInvalid, fmt.Sprintf("protected groups must have approval annotation %q with either a URL or a reason starting with \"unapproved\", see https://github.com/kubernetes/enhancements/pull/1111", apiextensionsv1.KubeAPIApprovedAnnotation) } } // SetCRDCondition sets the status condition. It either overwrites the existing one or creates a new one. -func SetCRDCondition(crd *apiextensions.CustomResourceDefinition, newCondition apiextensions.CustomResourceDefinitionCondition) { +func SetCRDCondition(crd *apiextensionsv1.CustomResourceDefinition, newCondition apiextensionsv1.CustomResourceDefinitionCondition) { newCondition.LastTransitionTime = metav1.NewTime(time.Now()) existingCondition := FindCRDCondition(crd, newCondition.Type) @@ -92,8 +92,8 @@ func SetCRDCondition(crd *apiextensions.CustomResourceDefinition, newCondition a } // RemoveCRDCondition removes the status condition. -func RemoveCRDCondition(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) { - newConditions := []apiextensions.CustomResourceDefinitionCondition{} +func RemoveCRDCondition(crd *apiextensionsv1.CustomResourceDefinition, conditionType apiextensionsv1.CustomResourceDefinitionConditionType) { + newConditions := []apiextensionsv1.CustomResourceDefinitionCondition{} for _, condition := range crd.Status.Conditions { if condition.Type != conditionType { newConditions = append(newConditions, condition) @@ -103,7 +103,7 @@ func RemoveCRDCondition(crd *apiextensions.CustomResourceDefinition, conditionTy } // FindCRDCondition returns the condition you're looking for or nil. -func FindCRDCondition(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) *apiextensions.CustomResourceDefinitionCondition { +func FindCRDCondition(crd *apiextensionsv1.CustomResourceDefinition, conditionType apiextensionsv1.CustomResourceDefinitionConditionType) *apiextensionsv1.CustomResourceDefinitionCondition { for i := range crd.Status.Conditions { if crd.Status.Conditions[i].Type == conditionType { return &crd.Status.Conditions[i] @@ -114,17 +114,17 @@ func FindCRDCondition(crd *apiextensions.CustomResourceDefinition, conditionType } // IsCRDConditionTrue indicates if the condition is present and strictly true. -func IsCRDConditionTrue(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) bool { - return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensions.ConditionTrue) +func IsCRDConditionTrue(crd *apiextensionsv1.CustomResourceDefinition, conditionType apiextensionsv1.CustomResourceDefinitionConditionType) bool { + return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensionsv1.ConditionTrue) } // IsCRDConditionFalse indicates if the condition is present and false. -func IsCRDConditionFalse(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) bool { - return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensions.ConditionFalse) +func IsCRDConditionFalse(crd *apiextensionsv1.CustomResourceDefinition, conditionType apiextensionsv1.CustomResourceDefinitionConditionType) bool { + return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensionsv1.ConditionFalse) } // IsCRDConditionPresentAndEqual indicates if the condition is present and equal to the given status. -func IsCRDConditionPresentAndEqual(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType, status apiextensions.ConditionStatus) bool { +func IsCRDConditionPresentAndEqual(crd *apiextensionsv1.CustomResourceDefinition, conditionType apiextensionsv1.CustomResourceDefinitionConditionType, status apiextensionsv1.ConditionStatus) bool { for _, condition := range crd.Status.Conditions { if condition.Type == conditionType { return condition.Status == status @@ -134,7 +134,7 @@ func IsCRDConditionPresentAndEqual(crd *apiextensions.CustomResourceDefinition, } // IsCRDConditionEquivalent returns true if the lhs and rhs are equivalent except for times. -func IsCRDConditionEquivalent(lhs, rhs *apiextensions.CustomResourceDefinitionCondition) bool { +func IsCRDConditionEquivalent(lhs, rhs *apiextensionsv1.CustomResourceDefinitionCondition) bool { if lhs == nil && rhs == nil { return true } @@ -146,7 +146,7 @@ func IsCRDConditionEquivalent(lhs, rhs *apiextensions.CustomResourceDefinitionCo } // CRDHasFinalizer returns true if the finalizer is in the list. -func CRDHasFinalizer(crd *apiextensions.CustomResourceDefinition, needle string) bool { +func CRDHasFinalizer(crd *apiextensionsv1.CustomResourceDefinition, needle string) bool { for _, finalizer := range crd.Finalizers { if finalizer == needle { return true @@ -157,7 +157,7 @@ func CRDHasFinalizer(crd *apiextensions.CustomResourceDefinition, needle string) } // CRDRemoveFinalizer removes the finalizer if present. -func CRDRemoveFinalizer(crd *apiextensions.CustomResourceDefinition, needle string) { +func CRDRemoveFinalizer(crd *apiextensionsv1.CustomResourceDefinition, needle string) { newFinalizers := []string{} for _, finalizer := range crd.Finalizers { if finalizer != needle { @@ -168,7 +168,7 @@ func CRDRemoveFinalizer(crd *apiextensions.CustomResourceDefinition, needle stri } // HasServedCRDVersion returns true if the given version is in the list of CRD's versions and the Served flag is set. -func HasServedCRDVersion(crd *apiextensions.CustomResourceDefinition, version string) bool { +func HasServedCRDVersion(crd *apiextensionsv1.CustomResourceDefinition, version string) bool { for _, v := range crd.Spec.Versions { if v.Name == version { return v.Served @@ -178,18 +178,18 @@ func HasServedCRDVersion(crd *apiextensions.CustomResourceDefinition, version st } // GetCRDStorageVersion returns the storage version for given CRD. -func GetCRDStorageVersion(crd *apiextensions.CustomResourceDefinition) (string, error) { +func GetCRDStorageVersion(crd *apiextensionsv1.CustomResourceDefinition) (string, error) { for _, v := range crd.Spec.Versions { if v.Storage { return v.Name, nil } } // This should not happened if crd is valid - return "", fmt.Errorf("invalid apiextensions.CustomResourceDefinition, no storage version") + return "", fmt.Errorf("invalid apiextensionsv1.CustomResourceDefinition, no storage version") } // IsStoredVersion returns whether the given version is the storage version of the CRD. -func IsStoredVersion(crd *apiextensions.CustomResourceDefinition, version string) bool { +func IsStoredVersion(crd *apiextensionsv1.CustomResourceDefinition, version string) bool { for _, v := range crd.Status.StoredVersions { if version == v { return true @@ -199,27 +199,27 @@ func IsStoredVersion(crd *apiextensions.CustomResourceDefinition, version string } // GetSchemaForVersion returns the validation schema for the given version or nil. -func GetSchemaForVersion(crd *apiextensions.CustomResourceDefinition, version string) (*apiextensions.CustomResourceValidation, error) { +func GetSchemaForVersion(crd *apiextensionsv1.CustomResourceDefinition, version string) (*apiextensionsv1.CustomResourceValidation, error) { for _, v := range crd.Spec.Versions { if version == v.Name { return v.Schema, nil } } - return nil, fmt.Errorf("version %s not found in apiextensions.CustomResourceDefinition: %v", version, crd.Name) + return nil, fmt.Errorf("version %s not found in apiextensionsv1.CustomResourceDefinition: %v", version, crd.Name) } // GetSubresourcesForVersion returns the subresources for given version or nil. -func GetSubresourcesForVersion(crd *apiextensions.CustomResourceDefinition, version string) (*apiextensions.CustomResourceSubresources, error) { +func GetSubresourcesForVersion(crd *apiextensionsv1.CustomResourceDefinition, version string) (*apiextensionsv1.CustomResourceSubresources, error) { for _, v := range crd.Spec.Versions { if version == v.Name { return v.Subresources, nil } } - return nil, fmt.Errorf("version %s not found in apiextensions.CustomResourceDefinition: %v", version, crd.Name) + return nil, fmt.Errorf("version %s not found in apiextensionsv1.CustomResourceDefinition: %v", version, crd.Name) } // HasPerVersionSchema returns true if a CRD uses per-version schema. -func HasPerVersionSchema(versions []apiextensions.CustomResourceDefinitionVersion) bool { +func HasPerVersionSchema(versions []apiextensionsv1.CustomResourceDefinitionVersion) bool { for _, v := range versions { if v.Schema != nil { return true @@ -229,7 +229,7 @@ func HasPerVersionSchema(versions []apiextensions.CustomResourceDefinitionVersio } // HasPerVersionSubresources returns true if a CRD uses per-version subresources. -func HasPerVersionSubresources(versions []apiextensions.CustomResourceDefinitionVersion) bool { +func HasPerVersionSubresources(versions []apiextensionsv1.CustomResourceDefinitionVersion) bool { for _, v := range versions { if v.Subresources != nil { return true @@ -239,7 +239,7 @@ func HasPerVersionSubresources(versions []apiextensions.CustomResourceDefinition } // HasPerVersionColumns returns true if a CRD uses per-version columns. -func HasPerVersionColumns(versions []apiextensions.CustomResourceDefinitionVersion) bool { +func HasPerVersionColumns(versions []apiextensionsv1.CustomResourceDefinitionVersion) bool { for _, v := range versions { if len(v.AdditionalPrinterColumns) > 0 { return true @@ -249,7 +249,7 @@ func HasPerVersionColumns(versions []apiextensions.CustomResourceDefinitionVersi } // HasVersionServed returns true if given CRD has given version served. -func HasVersionServed(crd *apiextensions.CustomResourceDefinition, version string) bool { +func HasVersionServed(crd *apiextensionsv1.CustomResourceDefinition, version string) bool { for _, v := range crd.Spec.Versions { if !v.Served || v.Name != version { continue diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers_test.go index 1b8fef9ae98..470ac5f5745 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/helpers_test.go @@ -21,7 +21,7 @@ import ( "testing" "time" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -79,22 +79,22 @@ func TestGetAPIApprovalState(t *testing.T) { }{ { name: "bare unapproved", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "unapproved"}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "unapproved"}, expected: APIApprovalBypassed, }, { name: "unapproved with message", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "unapproved, experimental-only"}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "unapproved, experimental-only"}, expected: APIApprovalBypassed, }, { name: "mismatched case", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "Unapproved"}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "Unapproved"}, expected: APIApprovalInvalid, }, { name: "empty", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: ""}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: ""}, expected: APIApprovalMissing, }, { @@ -104,27 +104,27 @@ func TestGetAPIApprovalState(t *testing.T) { }, { name: "url", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "https://github.com/kubernetes/kubernetes/pull/78458"}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "https://github.com/kubernetes/kubernetes/pull/78458"}, expected: APIApproved, }, { name: "url - no scheme", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "github.com/kubernetes/kubernetes/pull/78458"}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "github.com/kubernetes/kubernetes/pull/78458"}, expected: APIApprovalInvalid, }, { name: "url - no host", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "http:///kubernetes/kubernetes/pull/78458"}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "http:///kubernetes/kubernetes/pull/78458"}, expected: APIApprovalInvalid, }, { name: "url - just path", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "/"}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "/"}, expected: APIApprovalInvalid, }, { name: "missing scheme", - annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "github.com/kubernetes/kubernetes/pull/78458"}, + annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "github.com/kubernetes/kubernetes/pull/78458"}, expected: APIApprovalInvalid, }, } @@ -143,14 +143,14 @@ func TestGetAPIApprovalState(t *testing.T) { func TestCRDHasFinalizer(t *testing.T) { tests := []struct { name string - crd *apiextensions.CustomResourceDefinition + crd *apiextensionsv1.CustomResourceDefinition finalizerToCheck string expected bool }{ { name: "missing", - crd: &apiextensions.CustomResourceDefinition{ + crd: &apiextensionsv1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it"}}, }, finalizerToCheck: "it", @@ -158,7 +158,7 @@ func TestCRDHasFinalizer(t *testing.T) { }, { name: "present", - crd: &apiextensions.CustomResourceDefinition{ + crd: &apiextensionsv1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it", "it"}}, }, finalizerToCheck: "it", @@ -176,14 +176,14 @@ func TestCRDHasFinalizer(t *testing.T) { func TestCRDRemoveFinalizer(t *testing.T) { tests := []struct { name string - crd *apiextensions.CustomResourceDefinition + crd *apiextensionsv1.CustomResourceDefinition finalizerToCheck string expected []string }{ { name: "missing", - crd: &apiextensions.CustomResourceDefinition{ + crd: &apiextensionsv1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it"}}, }, finalizerToCheck: "it", @@ -191,7 +191,7 @@ func TestCRDRemoveFinalizer(t *testing.T) { }, { name: "present", - crd: &apiextensions.CustomResourceDefinition{ + crd: &apiextensionsv1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it", "it"}}, }, finalizerToCheck: "it", @@ -209,32 +209,32 @@ func TestCRDRemoveFinalizer(t *testing.T) { func TestSetCRDCondition(t *testing.T) { tests := []struct { name string - crdCondition []apiextensions.CustomResourceDefinitionCondition - newCondition apiextensions.CustomResourceDefinitionCondition - expectedcrdCondition []apiextensions.CustomResourceDefinitionCondition + crdCondition []apiextensionsv1.CustomResourceDefinitionCondition + newCondition apiextensionsv1.CustomResourceDefinitionCondition + expectedcrdCondition []apiextensionsv1.CustomResourceDefinitionCondition }{ { name: "test setCRDcondition when one condition", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - newCondition: apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Established, - Status: apiextensions.ConditionFalse, + newCondition: apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionFalse, Reason: "NotAccepted", Message: "Not accepted", LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), }, - expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionFalse, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionFalse, Reason: "NotAccepted", Message: "Not accepted", LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), @@ -243,40 +243,40 @@ func TestSetCRDCondition(t *testing.T) { }, { name: "test setCRDcondition when two condition", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionTrue, Reason: "NoConflicts", Message: "no conflicts found", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - newCondition: apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionFalse, + newCondition: apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionFalse, Reason: "Conflicts", Message: "conflicts found", LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), }, - expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionFalse, + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionFalse, Reason: "Conflicts", Message: "conflicts found", LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), @@ -285,60 +285,60 @@ func TestSetCRDCondition(t *testing.T) { }, { name: "test setCRDcondition when condition needs to be appended", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - newCondition: apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionFalse, - Reason: "Neverapiextensions.Established", - Message: "resource was never apiextensions.Established", + newCondition: apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionFalse, + Reason: "Neverapiextensionsv1.Established", + Message: "resource was never apiextensionsv1.Established", LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), }, - expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.Terminating, - Status: apiextensions.ConditionFalse, - Reason: "Neverapiextensions.Established", - Message: "resource was never apiextensions.Established", + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionFalse, + Reason: "Neverapiextensionsv1.Established", + Message: "resource was never apiextensionsv1.Established", LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), }, }, }, { name: "set new condition which doesn't have lastTransitionTime set", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - newCondition: apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Established, - Status: apiextensions.ConditionFalse, + newCondition: apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionFalse, Reason: "NotAccepted", Message: "Not accepted", }, - expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionFalse, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionFalse, Reason: "NotAccepted", Message: "Not accepted", LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), @@ -347,34 +347,34 @@ func TestSetCRDCondition(t *testing.T) { }, { name: "append new condition which doesn't have lastTransitionTime set", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - newCondition: apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionFalse, - Reason: "Neverapiextensions.Established", - Message: "resource was never apiextensions.Established", + newCondition: apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionFalse, + Reason: "Neverapiextensionsv1.Established", + Message: "resource was never apiextensionsv1.Established", }, - expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.Terminating, - Status: apiextensions.ConditionFalse, - Reason: "Neverapiextensions.Established", - Message: "resource was never apiextensions.Established", + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionFalse, + Reason: "Neverapiextensionsv1.Established", + Message: "resource was never apiextensionsv1.Established", LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), }, }, @@ -400,33 +400,33 @@ func TestSetCRDCondition(t *testing.T) { func TestRemoveCRDCondition(t *testing.T) { tests := []struct { name string - crdCondition []apiextensions.CustomResourceDefinitionCondition - conditionType apiextensions.CustomResourceDefinitionConditionType - expectedcrdCondition []apiextensions.CustomResourceDefinitionCondition + crdCondition []apiextensionsv1.CustomResourceDefinitionCondition + conditionType apiextensionsv1.CustomResourceDefinitionConditionType + expectedcrdCondition []apiextensionsv1.CustomResourceDefinitionCondition }{ { name: "test remove CRDCondition when the conditionType meets", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionTrue, Reason: "NoConflicts", Message: "no conflicts found", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - conditionType: apiextensions.NamesAccepted, - expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + conditionType: apiextensionsv1.NamesAccepted, + expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2011, 1, 2, 0, 0, 0, 0, time.UTC), @@ -435,34 +435,34 @@ func TestRemoveCRDCondition(t *testing.T) { }, { name: "test remove CRDCondition when the conditionType not meets", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionTrue, Reason: "NoConflicts", Message: "no conflicts found", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - conditionType: apiextensions.Terminating, - expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ + conditionType: apiextensionsv1.Terminating, + expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionTrue, Reason: "NoConflicts", Message: "no conflicts found", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), @@ -487,75 +487,75 @@ func TestRemoveCRDCondition(t *testing.T) { func TestIsCRDConditionPresentAndEqual(t *testing.T) { tests := []struct { name string - crdCondition []apiextensions.CustomResourceDefinitionCondition - conditionType apiextensions.CustomResourceDefinitionConditionType - status apiextensions.ConditionStatus + crdCondition []apiextensionsv1.CustomResourceDefinitionCondition + conditionType apiextensionsv1.CustomResourceDefinitionConditionType + status apiextensionsv1.ConditionStatus expectresult bool }{ { name: "test CRDCondition is not Present", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionTrue, Reason: "NoConflicts", Message: "no conflicts found", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - conditionType: apiextensions.Terminating, - status: apiextensions.ConditionTrue, + conditionType: apiextensionsv1.Terminating, + status: apiextensionsv1.ConditionTrue, expectresult: false, }, { name: "test CRDCondition is Present but not Equal", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionTrue, Reason: "NoConflicts", Message: "no conflicts found", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - conditionType: apiextensions.Established, - status: apiextensions.ConditionFalse, + conditionType: apiextensionsv1.Established, + status: apiextensionsv1.ConditionFalse, expectresult: false, }, { name: "test CRDCondition is Present and Equal", - crdCondition: []apiextensions.CustomResourceDefinitionCondition{ + crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{ { - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "Accepted", Message: "the initial names have been accepted", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, { - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionTrue, + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionTrue, Reason: "NoConflicts", Message: "no conflicts found", LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - conditionType: apiextensions.NamesAccepted, - status: apiextensions.ConditionTrue, + conditionType: apiextensionsv1.NamesAccepted, + status: apiextensionsv1.ConditionTrue, expectresult: true, }, } @@ -568,30 +568,30 @@ func TestIsCRDConditionPresentAndEqual(t *testing.T) { } } -func generateCRDwithCondition(conditions []apiextensions.CustomResourceDefinitionCondition) *apiextensions.CustomResourceDefinition { +func generateCRDwithCondition(conditions []apiextensionsv1.CustomResourceDefinitionCondition) *apiextensionsv1.CustomResourceDefinition { testCRDObjectMeta := metav1.ObjectMeta{ Name: "plural.group.com", ResourceVersion: "12", } - testCRDSpec := apiextensions.CustomResourceDefinitionSpec{ + testCRDSpec := apiextensionsv1.CustomResourceDefinitionSpec{ Group: "group.com", - Names: apiextensions.CustomResourceDefinitionNames{ + Names: apiextensionsv1.CustomResourceDefinitionNames{ Plural: "plural", Singular: "singular", Kind: "kind", ListKind: "listkind", }, } - testCRDAcceptedNames := apiextensions.CustomResourceDefinitionNames{ + testCRDAcceptedNames := apiextensionsv1.CustomResourceDefinitionNames{ Plural: "plural", Singular: "singular", Kind: "kind", ListKind: "listkind", } - return &apiextensions.CustomResourceDefinition{ + return &apiextensionsv1.CustomResourceDefinition{ ObjectMeta: testCRDObjectMeta, Spec: testCRDSpec, - Status: apiextensions.CustomResourceDefinitionStatus{ + Status: apiextensionsv1.CustomResourceDefinitionStatus{ AcceptedNames: testCRDAcceptedNames, Conditions: conditions, }, diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go index 625c7ae20c4..dcd5443c659 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go @@ -20,7 +20,7 @@ import ( "fmt" autoscalingv1 "k8s.io/api/autoscaling/v1" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" @@ -55,7 +55,7 @@ func NewCRConverterFactory(serviceResolver webhook.ServiceResolver, authResolver } // NewConverter returns a new CR converter based on the conversion settings in crd object. -func (m *CRConverterFactory) NewConverter(crd *apiextensions.CustomResourceDefinition) (safe, unsafe runtime.ObjectConvertor, err error) { +func (m *CRConverterFactory) NewConverter(crd *apiextensionsv1.CustomResourceDefinition) (safe, unsafe runtime.ObjectConvertor, err error) { validVersions := map[schema.GroupVersion]bool{} for _, version := range crd.Spec.Versions { validVersions[schema.GroupVersion{Group: crd.Spec.Group, Version: version.Name}] = true @@ -63,9 +63,9 @@ func (m *CRConverterFactory) NewConverter(crd *apiextensions.CustomResourceDefin var converter crConverterInterface switch crd.Spec.Conversion.Strategy { - case apiextensions.NoneConverter: + case apiextensionsv1.NoneConverter: converter = &nopConverter{} - case apiextensions.WebhookConverter: + case apiextensionsv1.WebhookConverter: if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceWebhookConversion) { return nil, nil, fmt.Errorf("webhook conversion is disabled on this cluster") } @@ -94,7 +94,7 @@ func (m *CRConverterFactory) NewConverter(crd *apiextensions.CustomResourceDefin unsafe = &crConverter{ convertScale: convertScale, validVersions: validVersions, - clusterScoped: crd.Spec.Scope == apiextensions.ClusterScoped, + clusterScoped: crd.Spec.Scope == apiextensionsv1.ClusterScoped, converter: converter, } return &safeConverterWrapper{unsafe}, unsafe, nil diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter_test.go index 1b5ebd3e0e6..3866dbd36bf 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter_test.go @@ -21,7 +21,7 @@ import ( "strings" "testing" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -159,16 +159,16 @@ func TestConversion(t *testing.T) { t.Fatalf("Cannot create conversion factory: %v", err) } for _, test := range tests { - testCRD := apiextensions.CustomResourceDefinition{ - Spec: apiextensions.CustomResourceDefinitionSpec{ - Conversion: &apiextensions.CustomResourceConversion{ - Strategy: apiextensions.NoneConverter, + testCRD := apiextensionsv1.CustomResourceDefinition{ + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ + Conversion: &apiextensionsv1.CustomResourceConversion{ + Strategy: apiextensionsv1.NoneConverter, }, }, } for _, v := range test.ValidVersions { gv, _ := schema.ParseGroupVersion(v) - testCRD.Spec.Versions = append(testCRD.Spec.Versions, apiextensions.CustomResourceDefinitionVersion{Name: gv.Version, Served: true}) + testCRD.Spec.Versions = append(testCRD.Spec.Versions, apiextensionsv1.CustomResourceDefinitionVersion{Name: gv.Version, Served: true}) testCRD.Spec.Group = gv.Group } safeConverter, _, err := CRConverterFactory.NewConverter(&testCRD) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/webhook_converter.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/webhook_converter.go index 0cdf39a5ec4..36771c4acc9 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/webhook_converter.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/webhook_converter.go @@ -22,7 +22,7 @@ import ( "fmt" "time" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apivalidation "k8s.io/apimachinery/pkg/api/validation" @@ -73,7 +73,7 @@ type webhookConverter struct { conversionReviewVersions []string } -func webhookClientConfigForCRD(crd *apiextensions.CustomResourceDefinition) *webhook.ClientConfig { +func webhookClientConfigForCRD(crd *apiextensionsv1.CustomResourceDefinition) *webhook.ClientConfig { apiConfig := crd.Spec.Conversion.Webhook.ClientConfig ret := webhook.ClientConfig{ Name: fmt.Sprintf("conversion_webhook_for_%s", crd.Name), @@ -97,7 +97,7 @@ func webhookClientConfigForCRD(crd *apiextensions.CustomResourceDefinition) *web var _ crConverterInterface = &webhookConverter{} -func (f *webhookConverterFactory) NewWebhookConverter(crd *apiextensions.CustomResourceDefinition) (*webhookConverter, error) { +func (f *webhookConverterFactory) NewWebhookConverter(crd *apiextensionsv1.CustomResourceDefinition) (*webhookConverter, error) { restClient, err := f.clientManager.HookClient(*webhookClientConfigForCRD(crd)) if err != nil { return nil, err diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go index 8d6030eb4b8..f897abd9ac5 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go @@ -35,7 +35,7 @@ import ( "k8s.io/client-go/util/workqueue" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" ) @@ -87,7 +87,7 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error { foundVersion := false foundGroup := false for _, crd := range crds { - if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { + if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Established) { continue } @@ -127,14 +127,14 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error { verbs := metav1.Verbs([]string{"delete", "deletecollection", "get", "list", "patch", "create", "update", "watch"}) // if we're terminating we don't allow some verbs - if apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Terminating) { + if apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Terminating) { verbs = metav1.Verbs([]string{"delete", "deletecollection", "get", "list", "watch"}) } apiResourcesForDiscovery = append(apiResourcesForDiscovery, metav1.APIResource{ Name: crd.Status.AcceptedNames.Plural, SingularName: crd.Status.AcceptedNames.Singular, - Namespaced: crd.Spec.Scope == apiextensions.NamespaceScoped, + Namespaced: crd.Spec.Scope == apiextensionsv1.NamespaceScoped, Kind: crd.Status.AcceptedNames.Kind, Verbs: verbs, ShortNames: crd.Status.AcceptedNames.ShortNames, @@ -149,7 +149,7 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error { if subresources != nil && subresources.Status != nil { apiResourcesForDiscovery = append(apiResourcesForDiscovery, metav1.APIResource{ Name: crd.Status.AcceptedNames.Plural + "/status", - Namespaced: crd.Spec.Scope == apiextensions.NamespaceScoped, + Namespaced: crd.Spec.Scope == apiextensionsv1.NamespaceScoped, Kind: crd.Status.AcceptedNames.Kind, Verbs: metav1.Verbs([]string{"get", "patch", "update"}), }) @@ -161,7 +161,7 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error { Version: "v1", Kind: "Scale", Name: crd.Status.AcceptedNames.Plural + "/scale", - Namespaced: crd.Spec.Scope == apiextensions.NamespaceScoped, + Namespaced: crd.Spec.Scope == apiextensionsv1.NamespaceScoped, Verbs: metav1.Verbs([]string{"get", "patch", "update"}), }) } @@ -244,21 +244,21 @@ func (c *DiscoveryController) processNextWorkItem() bool { return true } -func (c *DiscoveryController) enqueue(obj *apiextensions.CustomResourceDefinition) { +func (c *DiscoveryController) enqueue(obj *apiextensionsv1.CustomResourceDefinition) { for _, v := range obj.Spec.Versions { c.queue.Add(schema.GroupVersion{Group: obj.Spec.Group, Version: v.Name}) } } func (c *DiscoveryController) addCustomResourceDefinition(obj interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Adding customresourcedefinition %s", castObj.Name) c.enqueue(castObj) } func (c *DiscoveryController) updateCustomResourceDefinition(oldObj, newObj interface{}) { - castNewObj := newObj.(*apiextensions.CustomResourceDefinition) - castOldObj := oldObj.(*apiextensions.CustomResourceDefinition) + castNewObj := newObj.(*apiextensionsv1.CustomResourceDefinition) + castOldObj := oldObj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Updating customresourcedefinition %s", castOldObj.Name) // Enqueue both old and new object to make sure we remove and add appropriate Versions. // The working queue will resolve any duplicates and only changes will stay in the queue. @@ -267,14 +267,14 @@ func (c *DiscoveryController) updateCustomResourceDefinition(oldObj, newObj inte } func (c *DiscoveryController) deleteCustomResourceDefinition(obj interface{}) { - castObj, ok := obj.(*apiextensions.CustomResourceDefinition) + castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { tombstone, ok := obj.(cache.DeletedFinalStateUnknown) if !ok { klog.Errorf("Couldn't get object from tombstone %#v", obj) return } - castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) + castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { klog.Errorf("Tombstone contained object that is not expected %#v", obj) return diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index ef701fece09..0c58cf191b3 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -31,7 +31,7 @@ import ( apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apiserver/conversion" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" structuraldefaulting "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/defaulting" @@ -137,8 +137,8 @@ type crdHandler struct { type crdInfo struct { // spec and acceptedNames are used to compare against if a change is made on a CRD. We only update // the storage if one of these changes. - spec *apiextensions.CustomResourceDefinitionSpec - acceptedNames *apiextensions.CustomResourceDefinitionNames + spec *apiextensionsv1.CustomResourceDefinitionSpec + acceptedNames *apiextensionsv1.CustomResourceDefinitionNames // Storage per version storages map[string]customresource.CustomResourceStorage @@ -279,7 +279,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { // if the scope in the CRD and the scope in request differ (with exception of the verbs in possiblyAcrossAllNamespacesVerbs // for namespaced resources), pass request to the delegate, which is supposed to lead to a 404. - namespacedCRD, namespacedReq := crd.Spec.Scope == apiextensions.NamespaceScoped, len(requestInfo.Namespace) > 0 + namespacedCRD, namespacedReq := crd.Spec.Scope == apiextensionsv1.NamespaceScoped, len(requestInfo.Namespace) > 0 if !namespacedCRD && namespacedReq { r.delegate.ServeHTTP(w, req) return @@ -298,13 +298,13 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { // but it becomes "unserved" because another names update leads to a conflict // and EstablishingController wasn't fast enough to put the CRD into the Established condition. // We accept this as the problem is small and self-healing. - if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.NamesAccepted) && - !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { + if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.NamesAccepted) && + !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Established) { r.delegate.ServeHTTP(w, req) return } - terminating := apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Terminating) + terminating := apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Terminating) crdInfo, err := r.getOrCreateServingInfoFor(crd.UID, crd.Name) if apierrors.IsNotFound(err) { @@ -450,7 +450,7 @@ func (r *crdHandler) serveScale(w http.ResponseWriter, req *http.Request, reques // createCustomResourceDefinition removes potentially stale storage so it gets re-created func (r *crdHandler) createCustomResourceDefinition(obj interface{}) { - crd := obj.(*apiextensions.CustomResourceDefinition) + crd := obj.(*apiextensionsv1.CustomResourceDefinition) r.customStorageLock.Lock() defer r.customStorageLock.Unlock() // this could happen if the create event is merged from create-update events @@ -459,8 +459,8 @@ func (r *crdHandler) createCustomResourceDefinition(obj interface{}) { // updateCustomResourceDefinition removes potentially stale storage so it gets re-created func (r *crdHandler) updateCustomResourceDefinition(oldObj, newObj interface{}) { - oldCRD := oldObj.(*apiextensions.CustomResourceDefinition) - newCRD := newObj.(*apiextensions.CustomResourceDefinition) + oldCRD := oldObj.(*apiextensionsv1.CustomResourceDefinition) + newCRD := newObj.(*apiextensionsv1.CustomResourceDefinition) r.customStorageLock.Lock() defer r.customStorageLock.Unlock() @@ -469,8 +469,8 @@ func (r *crdHandler) updateCustomResourceDefinition(oldObj, newObj interface{}) // For HA clusters, we want to prevent race conditions when changing status to Established, // so we want to be sure that CRD is Installing at least for 5 seconds before Establishing it. // TODO: find a real HA safe checkpointing mechanism instead of an arbitrary wait. - if !apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensions.Established) && - apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensions.NamesAccepted) { + if !apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensionsv1.Established) && + apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensionsv1.NamesAccepted) { if r.masterCount > 1 { r.establishingController.QueueCRD(newCRD.Name, 5*time.Second) } else { @@ -577,7 +577,7 @@ func (r *crdHandler) tearDown(oldInfo *crdInfo) { // GetCustomResourceListerCollectionDeleter returns the ListerCollectionDeleter of // the given crd. -func (r *crdHandler) GetCustomResourceListerCollectionDeleter(crd *apiextensions.CustomResourceDefinition) (finalizer.ListerCollectionDeleter, error) { +func (r *crdHandler) GetCustomResourceListerCollectionDeleter(crd *apiextensionsv1.CustomResourceDefinition) (finalizer.ListerCollectionDeleter, error) { info, err := r.getOrCreateServingInfoFor(crd.UID, crd.Name) if err != nil { return nil, err @@ -633,7 +633,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd continue } internalValidation := &apiextensionsinternal.CustomResourceValidation{} - if err := apiextensions.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(val, internalValidation, nil); err != nil { + if err := apiextensionsv1.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(val, internalValidation, nil); err != nil { return nil, fmt.Errorf("failed converting CRD validation to internal version: %v", err) } s, err := structuralschema.NewStructural(internalValidation.OpenAPIV3Schema) @@ -693,7 +693,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd var internalValidationSchema *apiextensionsinternal.CustomResourceValidation if validationSchema != nil { internalValidationSchema = &apiextensionsinternal.CustomResourceValidation{} - if err := apiextensions.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(validationSchema, internalValidationSchema, nil); err != nil { + if err := apiextensionsv1.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(validationSchema, internalValidationSchema, nil); err != nil { return nil, fmt.Errorf("failed to convert CRD validation to internal version: %v", err) } } @@ -712,7 +712,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && subresources != nil && subresources.Status != nil { equivalentResourceRegistry.RegisterKindFor(resource, "status", kind) statusSpec = &apiextensionsinternal.CustomResourceSubresourceStatus{} - if err := apiextensions.Convert_v1_CustomResourceSubresourceStatus_To_apiextensions_CustomResourceSubresourceStatus(subresources.Status, statusSpec, nil); err != nil { + if err := apiextensionsv1.Convert_v1_CustomResourceSubresourceStatus_To_apiextensions_CustomResourceSubresourceStatus(subresources.Status, statusSpec, nil); err != nil { return nil, fmt.Errorf("failed converting CRD status subresource to internal version: %v", err) } // for the status subresource, validate only against the status schema @@ -731,7 +731,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && subresources != nil && subresources.Scale != nil { equivalentResourceRegistry.RegisterKindFor(resource, "scale", autoscalingv1.SchemeGroupVersion.WithKind("Scale")) scaleSpec = &apiextensionsinternal.CustomResourceSubresourceScale{} - if err := apiextensions.Convert_v1_CustomResourceSubresourceScale_To_apiextensions_CustomResourceSubresourceScale(subresources.Scale, scaleSpec, nil); err != nil { + if err := apiextensionsv1.Convert_v1_CustomResourceSubresourceScale_To_apiextensions_CustomResourceSubresourceScale(subresources.Scale, scaleSpec, nil); err != nil { return nil, fmt.Errorf("failed converting CRD status subresource to internal version: %v", err) } } @@ -752,7 +752,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd schema.GroupVersionKind{Group: crd.Spec.Group, Version: v.Name, Kind: crd.Status.AcceptedNames.ListKind}, customresource.NewStrategy( typer, - crd.Spec.Scope == apiextensions.NamespaceScoped, + crd.Spec.Scope == apiextensionsv1.NamespaceScoped, kind, validator, statusValidator, @@ -775,13 +775,13 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd selfLinkPrefix := "" switch crd.Spec.Scope { - case apiextensions.ClusterScoped: + case apiextensionsv1.ClusterScoped: selfLinkPrefix = "/" + path.Join("apis", crd.Spec.Group, v.Name) + "/" + crd.Status.AcceptedNames.Plural + "/" - case apiextensions.NamespaceScoped: + case apiextensionsv1.NamespaceScoped: selfLinkPrefix = "/" + path.Join("apis", crd.Spec.Group, v.Name, "namespaces") + "/" } - clusterScoped := crd.Spec.Scope == apiextensions.ClusterScoped + clusterScoped := crd.Spec.Scope == apiextensionsv1.ClusterScoped // CRDs explicitly do not support protobuf, but some objects returned by the API server do negotiatedSerializer := unstructuredNegotiatedSerializer{ @@ -1222,7 +1222,7 @@ func (v *unstructuredSchemaCoercer) apply(u *unstructured.Unstructured) error { } // hasServedCRDVersion returns true if the given version is in the list of CRD's versions and the Served flag is set. -func hasServedCRDVersion(spec *apiextensions.CustomResourceDefinitionSpec, version string) bool { +func hasServedCRDVersion(spec *apiextensionsv1.CustomResourceDefinitionSpec, version string) bool { for _, v := range spec.Versions { if v.Name == version { return v.Served @@ -1246,7 +1246,7 @@ func serverStartingError() error { // buildOpenAPIModelsForApply constructs openapi models from any validation schemas specified in the custom resource, // and merges it with the models defined in the static OpenAPI spec. // Returns nil models if the ServerSideApply feature is disabled, or the static spec is nil, or an error is encountered. -func buildOpenAPIModelsForApply(staticOpenAPISpec *spec.Swagger, crd *apiextensions.CustomResourceDefinition) (proto.Models, error) { +func buildOpenAPIModelsForApply(staticOpenAPISpec *spec.Swagger, crd *apiextensionsv1.CustomResourceDefinition) (proto.Models, error) { if !utilfeature.DefaultFeatureGate.Enabled(features.ServerSideApply) { return nil, nil } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler_test.go index 951d02d6278..874390f21d3 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler_test.go @@ -25,7 +25,7 @@ import ( "sigs.k8s.io/yaml" "testing" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apiserver/conversion" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -78,18 +78,18 @@ func TestConvertFieldLabel(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - crd := apiextensions.CustomResourceDefinition{ - Spec: apiextensions.CustomResourceDefinitionSpec{ - Conversion: &apiextensions.CustomResourceConversion{ + crd := apiextensionsv1.CustomResourceDefinition{ + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ + Conversion: &apiextensionsv1.CustomResourceConversion{ Strategy: "None", }, }, } if test.clusterScoped { - crd.Spec.Scope = apiextensions.ClusterScoped + crd.Spec.Scope = apiextensionsv1.ClusterScoped } else { - crd.Spec.Scope = apiextensions.NamespaceScoped + crd.Spec.Scope = apiextensionsv1.NamespaceScoped } f, err := conversion.NewCRConverterFactory(nil, nil) if err != nil { diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller.go index b2c860c8d43..3b32a0dac6b 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller.go @@ -22,7 +22,7 @@ import ( "time" "k8s.io/apiextensions-apiserver/pkg/apihelpers" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" @@ -77,7 +77,7 @@ func NewKubernetesAPIApprovalPolicyConformantConditionController( } // calculateCondition determines the new KubernetesAPIApprovalPolicyConformant condition -func calculateCondition(crd *apiextensions.CustomResourceDefinition) *apiextensions.CustomResourceDefinitionCondition { +func calculateCondition(crd *apiextensionsv1.CustomResourceDefinition) *apiextensionsv1.CustomResourceDefinitionCondition { if !apihelpers.IsProtectedCommunityGroup(crd.Spec.Group) { return nil } @@ -85,37 +85,37 @@ func calculateCondition(crd *apiextensions.CustomResourceDefinition) *apiextensi approvalState, reason := apihelpers.GetAPIApprovalState(crd.Annotations) switch approvalState { case apihelpers.APIApprovalInvalid: - return &apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.KubernetesAPIApprovalPolicyConformant, - Status: apiextensions.ConditionFalse, + return &apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant, + Status: apiextensionsv1.ConditionFalse, Reason: "InvalidAnnotation", Message: reason, } case apihelpers.APIApprovalMissing: - return &apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.KubernetesAPIApprovalPolicyConformant, - Status: apiextensions.ConditionFalse, + return &apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant, + Status: apiextensionsv1.ConditionFalse, Reason: "MissingAnnotation", Message: reason, } case apihelpers.APIApproved: - return &apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.KubernetesAPIApprovalPolicyConformant, - Status: apiextensions.ConditionTrue, + return &apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant, + Status: apiextensionsv1.ConditionTrue, Reason: "ApprovedAnnotation", Message: reason, } case apihelpers.APIApprovalBypassed: - return &apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.KubernetesAPIApprovalPolicyConformant, - Status: apiextensions.ConditionFalse, + return &apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant, + Status: apiextensionsv1.ConditionFalse, Reason: "UnapprovedAnnotation", Message: reason, } default: - return &apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.KubernetesAPIApprovalPolicyConformant, - Status: apiextensions.ConditionUnknown, + return &apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant, + Status: apiextensionsv1.ConditionUnknown, Reason: "UnknownAnnotation", Message: reason, } @@ -132,7 +132,7 @@ func (c *KubernetesAPIApprovalPolicyConformantConditionController) sync(key stri } // avoid repeated calculation for the same annotation - protectionAnnotationValue := inCustomResourceDefinition.Annotations[apiextensions.KubeAPIApprovedAnnotation] + protectionAnnotationValue := inCustomResourceDefinition.Annotations[apiextensionsv1.KubeAPIApprovedAnnotation] c.lastSeenProtectedAnnotationLock.Lock() lastSeen, seenBefore := c.lastSeenProtectedAnnotation[inCustomResourceDefinition.Name] c.lastSeenProtectedAnnotationLock.Unlock() @@ -146,7 +146,7 @@ func (c *KubernetesAPIApprovalPolicyConformantConditionController) sync(key stri // because group is immutable, if we have no condition now, we have no need to remove a condition. return nil } - old := apihelpers.FindCRDCondition(inCustomResourceDefinition, apiextensions.KubernetesAPIApprovalPolicyConformant) + old := apihelpers.FindCRDCondition(inCustomResourceDefinition, apiextensionsv1.KubernetesAPIApprovalPolicyConformant) // don't attempt a write if all the condition details are the same if old != nil && old.Status == cond.Status && old.Reason == cond.Reason && old.Message == cond.Message { @@ -220,7 +220,7 @@ func (c *KubernetesAPIApprovalPolicyConformantConditionController) processNextWo return true } -func (c *KubernetesAPIApprovalPolicyConformantConditionController) enqueue(obj *apiextensions.CustomResourceDefinition) { +func (c *KubernetesAPIApprovalPolicyConformantConditionController) enqueue(obj *apiextensionsv1.CustomResourceDefinition) { key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) if err != nil { utilruntime.HandleError(fmt.Errorf("Couldn't get key for object %#v: %v", obj, err)) @@ -231,26 +231,26 @@ func (c *KubernetesAPIApprovalPolicyConformantConditionController) enqueue(obj * } func (c *KubernetesAPIApprovalPolicyConformantConditionController) addCustomResourceDefinition(obj interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Adding %s", castObj.Name) c.enqueue(castObj) } func (c *KubernetesAPIApprovalPolicyConformantConditionController) updateCustomResourceDefinition(obj, _ interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Updating %s", castObj.Name) c.enqueue(castObj) } func (c *KubernetesAPIApprovalPolicyConformantConditionController) deleteCustomResourceDefinition(obj interface{}) { - castObj, ok := obj.(*apiextensions.CustomResourceDefinition) + castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { tombstone, ok := obj.(cache.DeletedFinalStateUnknown) if !ok { klog.Errorf("Couldn't get object from tombstone %#v", obj) return } - castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) + castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { klog.Errorf("Tombstone contained object that is not expected %#v", obj) return diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller_test.go index 387ea9b8729..725d3aba38d 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/apiapproval_controller_test.go @@ -19,20 +19,20 @@ package apiapproval import ( "testing" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestCalculateCondition(t *testing.T) { - noConditionFn := func(t *testing.T, condition *apiextensions.CustomResourceDefinitionCondition) { + noConditionFn := func(t *testing.T, condition *apiextensionsv1.CustomResourceDefinitionCondition) { t.Helper() if condition != nil { t.Fatal(condition) } } - verifyCondition := func(status apiextensions.ConditionStatus, message string) func(t *testing.T, condition *apiextensions.CustomResourceDefinitionCondition) { - return func(t *testing.T, condition *apiextensions.CustomResourceDefinitionCondition) { + verifyCondition := func(status apiextensionsv1.ConditionStatus, message string) func(t *testing.T, condition *apiextensionsv1.CustomResourceDefinitionCondition) { + return func(t *testing.T, condition *apiextensionsv1.CustomResourceDefinitionCondition) { t.Helper() if condition == nil { t.Fatal("missing condition") @@ -51,7 +51,7 @@ func TestCalculateCondition(t *testing.T) { group string annotationValue string - validateCondition func(t *testing.T, condition *apiextensions.CustomResourceDefinitionCondition) + validateCondition func(t *testing.T, condition *apiextensionsv1.CustomResourceDefinitionCondition) }{ { name: "for other group", @@ -63,33 +63,33 @@ func TestCalculateCondition(t *testing.T) { name: "missing annotation", group: "sigs.k8s.io", annotationValue: "", - validateCondition: verifyCondition(apiextensions.ConditionFalse, `protected groups must have approval annotation "api-approved.kubernetes.io", see https://github.com/kubernetes/enhancements/pull/1111`), + validateCondition: verifyCondition(apiextensionsv1.ConditionFalse, `protected groups must have approval annotation "api-approved.kubernetes.io", see https://github.com/kubernetes/enhancements/pull/1111`), }, { name: "invalid annotation", group: "sigs.k8s.io", annotationValue: "bad value", - validateCondition: verifyCondition(apiextensions.ConditionFalse, `protected groups must have approval annotation "api-approved.kubernetes.io" with either a URL or a reason starting with "unapproved", see https://github.com/kubernetes/enhancements/pull/1111`), + validateCondition: verifyCondition(apiextensionsv1.ConditionFalse, `protected groups must have approval annotation "api-approved.kubernetes.io" with either a URL or a reason starting with "unapproved", see https://github.com/kubernetes/enhancements/pull/1111`), }, { name: "approved", group: "sigs.k8s.io", annotationValue: "https://github.com/kubernetes/kubernetes/pull/79724", - validateCondition: verifyCondition(apiextensions.ConditionTrue, `approved in https://github.com/kubernetes/kubernetes/pull/79724`), + validateCondition: verifyCondition(apiextensionsv1.ConditionTrue, `approved in https://github.com/kubernetes/kubernetes/pull/79724`), }, { name: "unapproved", group: "sigs.k8s.io", annotationValue: "unapproved for reasons", - validateCondition: verifyCondition(apiextensions.ConditionFalse, `not approved: "unapproved for reasons"`), + validateCondition: verifyCondition(apiextensionsv1.ConditionFalse, `not approved: "unapproved for reasons"`), }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - crd := &apiextensions.CustomResourceDefinition{ - ObjectMeta: metav1.ObjectMeta{Name: "foo", Annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: test.annotationValue}}, - Spec: apiextensions.CustomResourceDefinitionSpec{ + crd := &apiextensionsv1.CustomResourceDefinition{ + ObjectMeta: metav1.ObjectMeta{Name: "foo", Annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: test.annotationValue}}, + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ Group: test.group, }, } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/establishing_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/establishing_controller.go index 37c22791f9b..1d1501669bb 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/establishing_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/establishing_controller.go @@ -28,7 +28,7 @@ import ( "k8s.io/klog" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" @@ -120,15 +120,15 @@ func (ec *EstablishingController) sync(key string) error { return err } - if !apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensions.NamesAccepted) || - apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensions.Established) { + if !apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensionsv1.NamesAccepted) || + apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensionsv1.Established) { return nil } crd := cachedCRD.DeepCopy() - establishedCondition := apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Established, - Status: apiextensions.ConditionTrue, + establishedCondition := apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionTrue, Reason: "InitialNamesAccepted", Message: "the initial names have been accepted", } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go index f3b1a43f954..aac8bd64352 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go @@ -37,7 +37,7 @@ import ( "k8s.io/client-go/util/workqueue" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" @@ -77,7 +77,7 @@ type ListerCollectionDeleter interface { type CRClientGetter interface { // GetCustomResourceListerCollectionDeleter gets the ListerCollectionDeleter for the given CRD // UID. - GetCustomResourceListerCollectionDeleter(crd *apiextensions.CustomResourceDefinition) (ListerCollectionDeleter, error) + GetCustomResourceListerCollectionDeleter(crd *apiextensionsv1.CustomResourceDefinition) (ListerCollectionDeleter, error) } // NewCRDFinalizer creates a new CRDFinalizer. @@ -114,16 +114,16 @@ func (c *CRDFinalizer) sync(key string) error { } // no work to do - if cachedCRD.DeletionTimestamp.IsZero() || !apiextensionshelpers.CRDHasFinalizer(cachedCRD, apiextensions.CustomResourceCleanupFinalizer) { + if cachedCRD.DeletionTimestamp.IsZero() || !apiextensionshelpers.CRDHasFinalizer(cachedCRD, apiextensionsv1.CustomResourceCleanupFinalizer) { return nil } crd := cachedCRD.DeepCopy() // update the status condition. This cleanup could take a while. - apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionTrue, + apiextensionshelpers.SetCRDCondition(crd, apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionTrue, Reason: "InstanceDeletionInProgress", Message: "CustomResource deletion is in progress", }) @@ -140,13 +140,13 @@ func (c *CRDFinalizer) sync(key string) error { // Since we control the endpoints, we know that delete collection works. No need to delete if not established. if OverlappingBuiltInResources()[schema.GroupResource{Group: crd.Spec.Group, Resource: crd.Spec.Names.Plural}] { // Skip deletion, explain why, and proceed to remove the finalizer and delete the CRD - apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionFalse, + apiextensionshelpers.SetCRDCondition(crd, apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionFalse, Reason: "OverlappingBuiltInResource", Message: "instances overlap with built-in resources in storage", }) - } else if apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { + } else if apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Established) { cond, deleteErr := c.deleteInstances(crd) apiextensionshelpers.SetCRDCondition(crd, cond) if deleteErr != nil { @@ -156,15 +156,15 @@ func (c *CRDFinalizer) sync(key string) error { return deleteErr } } else { - apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionFalse, + apiextensionshelpers.SetCRDCondition(crd, apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionFalse, Reason: "NeverEstablished", Message: "resource was never established", }) } - apiextensionshelpers.CRDRemoveFinalizer(crd, apiextensions.CustomResourceCleanupFinalizer) + apiextensionshelpers.CRDRemoveFinalizer(crd, apiextensionsv1.CustomResourceCleanupFinalizer) _, err = c.crdClient.CustomResourceDefinitions().UpdateStatus(crd) if apierrors.IsNotFound(err) || apierrors.IsConflict(err) { // deleted or changed in the meantime, we'll get called again @@ -173,16 +173,16 @@ func (c *CRDFinalizer) sync(key string) error { return err } -func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefinition) (apiextensions.CustomResourceDefinitionCondition, error) { +func (c *CRDFinalizer) deleteInstances(crd *apiextensionsv1.CustomResourceDefinition) (apiextensionsv1.CustomResourceDefinitionCondition, error) { // Now we can start deleting items. While it would be ideal to use a REST API client, doing so // could incorrectly delete a ThirdPartyResource with the same URL as the CustomResource, so we go // directly to the storage instead. Since we control the storage, we know that delete collection works. crClient, err := c.crClientGetter.GetCustomResourceListerCollectionDeleter(crd) if err != nil { err = fmt.Errorf("unable to find a custom resource client for %s.%s: %v", crd.Status.AcceptedNames.Plural, crd.Spec.Group, err) - return apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionTrue, + return apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionTrue, Reason: "InstanceDeletionFailed", Message: fmt.Sprintf("could not list instances: %v", err), }, err @@ -191,9 +191,9 @@ func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefiniti ctx := genericapirequest.NewContext() allResources, err := crClient.List(ctx, nil) if err != nil { - return apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionTrue, + return apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionTrue, Reason: "InstanceDeletionFailed", Message: fmt.Sprintf("could not list instances: %v", err), }, err @@ -219,9 +219,9 @@ func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefiniti } } if deleteError := utilerrors.NewAggregate(deleteErrors); deleteError != nil { - return apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionTrue, + return apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionTrue, Reason: "InstanceDeletionFailed", Message: fmt.Sprintf("could not issue all deletes: %v", deleteError), }, deleteError @@ -242,16 +242,16 @@ func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefiniti return false, nil }) if err != nil { - return apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionTrue, + return apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionTrue, Reason: "InstanceDeletionCheck", Message: fmt.Sprintf("could not confirm zero CustomResources remaining: %v", err), }, err } - return apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Terminating, - Status: apiextensions.ConditionFalse, + return apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Terminating, + Status: apiextensionsv1.ConditionFalse, Reason: "InstanceDeletionCompleted", Message: "removed all instances", }, nil @@ -300,7 +300,7 @@ func (c *CRDFinalizer) processNextWorkItem() bool { return true } -func (c *CRDFinalizer) enqueue(obj *apiextensions.CustomResourceDefinition) { +func (c *CRDFinalizer) enqueue(obj *apiextensionsv1.CustomResourceDefinition) { key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) if err != nil { utilruntime.HandleError(fmt.Errorf("couldn't get key for object %#v: %v", obj, err)) @@ -311,18 +311,18 @@ func (c *CRDFinalizer) enqueue(obj *apiextensions.CustomResourceDefinition) { } func (c *CRDFinalizer) addCustomResourceDefinition(obj interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) // only queue deleted things - if !castObj.DeletionTimestamp.IsZero() && apiextensionshelpers.CRDHasFinalizer(castObj, apiextensions.CustomResourceCleanupFinalizer) { + if !castObj.DeletionTimestamp.IsZero() && apiextensionshelpers.CRDHasFinalizer(castObj, apiextensionsv1.CustomResourceCleanupFinalizer) { c.enqueue(castObj) } } func (c *CRDFinalizer) updateCustomResourceDefinition(oldObj, newObj interface{}) { - oldCRD := oldObj.(*apiextensions.CustomResourceDefinition) - newCRD := newObj.(*apiextensions.CustomResourceDefinition) + oldCRD := oldObj.(*apiextensionsv1.CustomResourceDefinition) + newCRD := newObj.(*apiextensionsv1.CustomResourceDefinition) // only queue deleted things that haven't been finalized by us - if newCRD.DeletionTimestamp.IsZero() || !apiextensionshelpers.CRDHasFinalizer(newCRD, apiextensions.CustomResourceCleanupFinalizer) { + if newCRD.DeletionTimestamp.IsZero() || !apiextensionshelpers.CRDHasFinalizer(newCRD, apiextensionsv1.CustomResourceCleanupFinalizer) { return } @@ -340,8 +340,8 @@ func (c *CRDFinalizer) updateCustomResourceDefinition(oldObj, newObj interface{} newCopy := newCRD.DeepCopy() oldCopy.ResourceVersion = "" newCopy.ResourceVersion = "" - apiextensionshelpers.RemoveCRDCondition(oldCopy, apiextensions.Terminating) - apiextensionshelpers.RemoveCRDCondition(newCopy, apiextensions.Terminating) + apiextensionshelpers.RemoveCRDCondition(oldCopy, apiextensionsv1.Terminating) + apiextensionshelpers.RemoveCRDCondition(newCopy, apiextensionsv1.Terminating) if !reflect.DeepEqual(oldCopy, newCopy) { c.enqueue(newCRD) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go index 18fe3a22a48..1bdd4fbd0ac 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go @@ -32,7 +32,7 @@ import ( apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" @@ -81,10 +81,10 @@ func NewConditionController( return c } -func calculateCondition(in *apiextensions.CustomResourceDefinition) *apiextensions.CustomResourceDefinitionCondition { - cond := &apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.NonStructuralSchema, - Status: apiextensions.ConditionUnknown, +func calculateCondition(in *apiextensionsv1.CustomResourceDefinition) *apiextensionsv1.CustomResourceDefinitionCondition { + cond := &apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.NonStructuralSchema, + Status: apiextensionsv1.ConditionUnknown, } allErrs := field.ErrorList{} @@ -95,7 +95,7 @@ func calculateCondition(in *apiextensions.CustomResourceDefinition) *apiextensio } internalSchema := &apiextensionsinternal.CustomResourceValidation{} - if err := apiextensions.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(v.Schema, internalSchema, nil); err != nil { + if err := apiextensionsv1.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(v.Schema, internalSchema, nil); err != nil { klog.Errorf("failed to convert CRD validation to internal version: %v", err) continue } @@ -115,7 +115,7 @@ func calculateCondition(in *apiextensions.CustomResourceDefinition) *apiextensio return nil } - cond.Status = apiextensions.ConditionTrue + cond.Status = apiextensionsv1.ConditionTrue cond.Reason = "Violations" cond.Message = allErrs.ToAggregate().Error() @@ -141,7 +141,7 @@ func (c *ConditionController) sync(key string) error { // check old condition cond := calculateCondition(inCustomResourceDefinition) - old := apiextensionshelpers.FindCRDCondition(inCustomResourceDefinition, apiextensions.NonStructuralSchema) + old := apiextensionshelpers.FindCRDCondition(inCustomResourceDefinition, apiextensionsv1.NonStructuralSchema) if cond == nil && old == nil { return nil @@ -153,7 +153,7 @@ func (c *ConditionController) sync(key string) error { // update condition crd := inCustomResourceDefinition.DeepCopy() if cond == nil { - apiextensionshelpers.RemoveCRDCondition(crd, apiextensions.NonStructuralSchema) + apiextensionshelpers.RemoveCRDCondition(crd, apiextensionsv1.NonStructuralSchema) } else { cond.LastTransitionTime = metav1.NewTime(time.Now()) apiextensionshelpers.SetCRDCondition(crd, *cond) @@ -221,7 +221,7 @@ func (c *ConditionController) processNextWorkItem() bool { return true } -func (c *ConditionController) enqueue(obj *apiextensions.CustomResourceDefinition) { +func (c *ConditionController) enqueue(obj *apiextensionsv1.CustomResourceDefinition) { key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) if err != nil { utilruntime.HandleError(fmt.Errorf("couldn't get key for object %#v: %v", obj, err)) @@ -232,26 +232,26 @@ func (c *ConditionController) enqueue(obj *apiextensions.CustomResourceDefinitio } func (c *ConditionController) addCustomResourceDefinition(obj interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Adding %s", castObj.Name) c.enqueue(castObj) } func (c *ConditionController) updateCustomResourceDefinition(obj, _ interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Updating %s", castObj.Name) c.enqueue(castObj) } func (c *ConditionController) deleteCustomResourceDefinition(obj interface{}) { - castObj, ok := obj.(*apiextensions.CustomResourceDefinition) + castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { tombstone, ok := obj.(cache.DeletedFinalStateUnknown) if !ok { klog.Errorf("Couldn't get object from tombstone %#v", obj) return } - castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) + castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { klog.Errorf("Tombstone contained object that is not expected %#v", obj) return diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go index 607f9e0e8fc..06dfc7f1add 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go @@ -28,7 +28,7 @@ import ( v1 "k8s.io/api/autoscaling/v1" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" openapiv2 "k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2" @@ -86,7 +86,7 @@ type Options struct { } // BuildSwagger builds swagger for the given crd in the given version -func BuildSwagger(crd *apiextensions.CustomResourceDefinition, version string, opts Options) (*spec.Swagger, error) { +func BuildSwagger(crd *apiextensionsv1.CustomResourceDefinition, version string, opts Options) (*spec.Swagger, error) { var schema *structuralschema.Structural s, err := apiextensionshelpers.GetSchemaForVersion(crd, version) if err != nil { @@ -95,7 +95,7 @@ func BuildSwagger(crd *apiextensions.CustomResourceDefinition, version string, o if s != nil && s.OpenAPIV3Schema != nil { internalCRDSchema := &apiextensionsinternal.CustomResourceValidation{} - if err := apiextensions.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(s, internalCRDSchema, nil); err != nil { + if err := apiextensionsv1.Convert_v1_CustomResourceValidation_To_apiextensions_CustomResourceValidation(s, internalCRDSchema, nil); err != nil { return nil, fmt.Errorf("failed converting CRD validation to internal version: %v", err) } if !validation.SchemaHasInvalidTypes(internalCRDSchema.OpenAPIV3Schema) { @@ -504,7 +504,7 @@ func (b *builder) getOpenAPIConfig() *common.Config { } } -func newBuilder(crd *apiextensions.CustomResourceDefinition, version string, schema *structuralschema.Structural, v2 bool) *builder { +func newBuilder(crd *apiextensionsv1.CustomResourceDefinition, version string, schema *structuralschema.Structural, v2 bool) *builder { b := &builder{ schema: &spec.Schema{ SchemaProps: spec.SchemaProps{Type: []string{"object"}}, @@ -518,7 +518,7 @@ func newBuilder(crd *apiextensions.CustomResourceDefinition, version string, sch listKind: crd.Spec.Names.ListKind, plural: crd.Spec.Names.Plural, } - if crd.Spec.Scope == apiextensions.NamespaceScoped { + if crd.Spec.Scope == apiextensionsv1.NamespaceScoped { b.namespaced = true } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go index e2b7c2498d7..449e1219f8a 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go @@ -25,7 +25,7 @@ import ( "github.com/stretchr/testify/require" apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/json" @@ -352,12 +352,12 @@ func TestNewBuilder(t *testing.T) { t.Run(tt.name, func(t *testing.T) { var schema *structuralschema.Structural if len(tt.schema) > 0 { - v1beta1Schema := &apiextensions.JSONSchemaProps{} + v1beta1Schema := &apiextensionsv1.JSONSchemaProps{} if err := json.Unmarshal([]byte(tt.schema), &v1beta1Schema); err != nil { t.Fatal(err) } internalSchema := &apiextensionsinternal.JSONSchemaProps{} - apiextensions.Convert_v1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(v1beta1Schema, internalSchema, nil) + apiextensionsv1.Convert_v1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(v1beta1Schema, internalSchema, nil) var err error schema, err = structuralschema.NewStructural(internalSchema) if err != nil { @@ -369,21 +369,21 @@ func TestNewBuilder(t *testing.T) { schema = schema.Unfold() } - got := newBuilder(&apiextensions.CustomResourceDefinition{ - Spec: apiextensions.CustomResourceDefinitionSpec{ + got := newBuilder(&apiextensionsv1.CustomResourceDefinition{ + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ Group: "bar.k8s.io", - Versions: []apiextensions.CustomResourceDefinitionVersion{ + Versions: []apiextensionsv1.CustomResourceDefinitionVersion{ { Name: "v1", }, }, - Names: apiextensions.CustomResourceDefinitionNames{ + Names: apiextensionsv1.CustomResourceDefinitionNames{ Plural: "foos", Singular: "foo", Kind: "Foo", ListKind: "FooList", }, - Scope: apiextensions.NamespaceScoped, + Scope: apiextensionsv1.NamespaceScoped, }, }, "v1", schema, tt.v2) @@ -434,7 +434,7 @@ func TestCRDRouteParameterBuilder(t *testing.T) { testCRDResourceName := "foos" testCases := []struct { - scope apiextensions.ResourceScope + scope apiextensionsv1.ResourceScope paths map[string]struct { expectNamespaceParam bool expectNameParam bool @@ -442,7 +442,7 @@ func TestCRDRouteParameterBuilder(t *testing.T) { } }{ { - scope: apiextensions.NamespaceScoped, + scope: apiextensionsv1.NamespaceScoped, paths: map[string]struct { expectNamespaceParam bool expectNameParam bool @@ -456,7 +456,7 @@ func TestCRDRouteParameterBuilder(t *testing.T) { }, }, { - scope: apiextensions.ClusterScoped, + scope: apiextensionsv1.ClusterScoped, paths: map[string]struct { expectNamespaceParam bool expectNameParam bool @@ -471,20 +471,20 @@ func TestCRDRouteParameterBuilder(t *testing.T) { } for _, testCase := range testCases { - testNamespacedCRD := &apiextensions.CustomResourceDefinition{ - Spec: apiextensions.CustomResourceDefinitionSpec{ + testNamespacedCRD := &apiextensionsv1.CustomResourceDefinition{ + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ Scope: testCase.scope, Group: testCRDGroup, - Names: apiextensions.CustomResourceDefinitionNames{ + Names: apiextensionsv1.CustomResourceDefinitionNames{ Kind: testCRDKind, Plural: testCRDResourceName, }, - Versions: []apiextensions.CustomResourceDefinitionVersion{ + Versions: []apiextensionsv1.CustomResourceDefinitionVersion{ { Name: testCRDVersion, - Subresources: &apiextensions.CustomResourceSubresources{ - Status: &apiextensions.CustomResourceSubresourceStatus{}, - Scale: &apiextensions.CustomResourceSubresourceScale{}, + Subresources: &apiextensionsv1.CustomResourceSubresources{ + Status: &apiextensionsv1.CustomResourceSubresourceStatus{}, + Scale: &apiextensionsv1.CustomResourceSubresourceScale{}, }, }, }, @@ -631,13 +631,13 @@ func TestBuildSwagger(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - var validation *apiextensions.CustomResourceValidation + var validation *apiextensionsv1.CustomResourceValidation if len(tt.schema) > 0 { - v1Schema := &apiextensions.JSONSchemaProps{} + v1Schema := &apiextensionsv1.JSONSchemaProps{} if err := json.Unmarshal([]byte(tt.schema), &v1Schema); err != nil { t.Fatal(err) } - validation = &apiextensions.CustomResourceValidation{ + validation = &apiextensionsv1.CustomResourceValidation{ OpenAPIV3Schema: v1Schema, } } @@ -646,22 +646,22 @@ func TestBuildSwagger(t *testing.T) { } // TODO: mostly copied from the test above. reuse code to cleanup - got, err := BuildSwagger(&apiextensions.CustomResourceDefinition{ - Spec: apiextensions.CustomResourceDefinitionSpec{ + got, err := BuildSwagger(&apiextensionsv1.CustomResourceDefinition{ + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ Group: "bar.k8s.io", - Versions: []apiextensions.CustomResourceDefinitionVersion{ + Versions: []apiextensionsv1.CustomResourceDefinitionVersion{ { Name: "v1", Schema: validation, }, }, - Names: apiextensions.CustomResourceDefinitionNames{ + Names: apiextensionsv1.CustomResourceDefinitionNames{ Plural: "foos", Singular: "foo", Kind: "Foo", ListKind: "FooList", }, - Scope: apiextensions.NamespaceScoped, + Scope: apiextensionsv1.NamespaceScoped, }, }, "v1", tt.opts) if err != nil { diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go index f18c9f16c51..06bd37a318f 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go @@ -34,7 +34,7 @@ import ( "k8s.io/kube-openapi/pkg/handler" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder" @@ -100,7 +100,7 @@ func (c *Controller) Run(staticSpec *spec.Swagger, openAPIService *handler.OpenA return } for _, crd := range crds { - if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { + if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Established) { continue } newSpecs, changed, err := buildVersionSpecs(crd, nil) @@ -164,7 +164,7 @@ func (c *Controller) sync(name string) error { } // do we have to remove all specs of this CRD? - if errors.IsNotFound(err) || !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { + if errors.IsNotFound(err) || !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Established) { if _, found := c.crdSpecs[name]; !found { return nil } @@ -195,7 +195,7 @@ func (c *Controller) sync(name string) error { return c.updateSpecLocked() } -func buildVersionSpecs(crd *apiextensions.CustomResourceDefinition, oldSpecs map[string]*spec.Swagger) (map[string]*spec.Swagger, bool, error) { +func buildVersionSpecs(crd *apiextensionsv1.CustomResourceDefinition, oldSpecs map[string]*spec.Swagger) (map[string]*spec.Swagger, bool, error) { newSpecs := map[string]*spec.Swagger{} anyChanged := false for _, v := range crd.Spec.Versions { @@ -235,26 +235,26 @@ func (c *Controller) updateSpecLocked() error { } func (c *Controller) addCustomResourceDefinition(obj interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Adding customresourcedefinition %s", castObj.Name) c.enqueue(castObj) } func (c *Controller) updateCustomResourceDefinition(oldObj, newObj interface{}) { - castNewObj := newObj.(*apiextensions.CustomResourceDefinition) + castNewObj := newObj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Updating customresourcedefinition %s", castNewObj.Name) c.enqueue(castNewObj) } func (c *Controller) deleteCustomResourceDefinition(obj interface{}) { - castObj, ok := obj.(*apiextensions.CustomResourceDefinition) + castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { tombstone, ok := obj.(cache.DeletedFinalStateUnknown) if !ok { klog.Errorf("Couldn't get object from tombstone %#v", obj) return } - castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) + castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { klog.Errorf("Tombstone contained object that is not expected %#v", obj) return @@ -264,6 +264,6 @@ func (c *Controller) deleteCustomResourceDefinition(obj interface{}) { c.enqueue(castObj) } -func (c *Controller) enqueue(obj *apiextensions.CustomResourceDefinition) { +func (c *Controller) enqueue(obj *apiextensionsv1.CustomResourceDefinition) { c.queue.Add(obj.Name) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go index 4c82065bc09..b3abd739958 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go @@ -35,7 +35,7 @@ import ( "k8s.io/client-go/util/workqueue" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" @@ -104,7 +104,7 @@ func (c *NamingConditionController) getAcceptedNamesForGroup(group string) (allR item := curr obj, exists, err := c.crdMutationCache.GetByKey(curr.Name) if exists && err == nil { - item = obj.(*apiextensions.CustomResourceDefinition) + item = obj.(*apiextensionsv1.CustomResourceDefinition) } allResources.Insert(item.Status.AcceptedNames.Plural) @@ -118,13 +118,13 @@ func (c *NamingConditionController) getAcceptedNamesForGroup(group string) (allR return allResources, allKinds } -func (c *NamingConditionController) calculateNamesAndConditions(in *apiextensions.CustomResourceDefinition) (apiextensions.CustomResourceDefinitionNames, apiextensions.CustomResourceDefinitionCondition, apiextensions.CustomResourceDefinitionCondition) { +func (c *NamingConditionController) calculateNamesAndConditions(in *apiextensionsv1.CustomResourceDefinition) (apiextensionsv1.CustomResourceDefinitionNames, apiextensionsv1.CustomResourceDefinitionCondition, apiextensionsv1.CustomResourceDefinitionCondition) { // Get the names that have already been claimed allResources, allKinds := c.getAcceptedNamesForGroup(in.Spec.Group) - namesAcceptedCondition := apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionUnknown, + namesAcceptedCondition := apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionUnknown, } requestedNames := in.Spec.Names @@ -134,14 +134,14 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension // Check each name for mismatches. If there's a mismatch between spec and status, then try to deconflict. // Continue on errors so that the status is the best match possible if err := equalToAcceptedOrFresh(requestedNames.Plural, acceptedNames.Plural, allResources); err != nil { - namesAcceptedCondition.Status = apiextensions.ConditionFalse + namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse namesAcceptedCondition.Reason = "PluralConflict" namesAcceptedCondition.Message = err.Error() } else { newNames.Plural = requestedNames.Plural } if err := equalToAcceptedOrFresh(requestedNames.Singular, acceptedNames.Singular, allResources); err != nil { - namesAcceptedCondition.Status = apiextensions.ConditionFalse + namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse namesAcceptedCondition.Reason = "SingularConflict" namesAcceptedCondition.Message = err.Error() } else { @@ -161,7 +161,7 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension } if err := utilerrors.NewAggregate(errs); err != nil { - namesAcceptedCondition.Status = apiextensions.ConditionFalse + namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse namesAcceptedCondition.Reason = "ShortNamesConflict" namesAcceptedCondition.Message = err.Error() } else { @@ -170,14 +170,14 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension } if err := equalToAcceptedOrFresh(requestedNames.Kind, acceptedNames.Kind, allKinds); err != nil { - namesAcceptedCondition.Status = apiextensions.ConditionFalse + namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse namesAcceptedCondition.Reason = "KindConflict" namesAcceptedCondition.Message = err.Error() } else { newNames.Kind = requestedNames.Kind } if err := equalToAcceptedOrFresh(requestedNames.ListKind, acceptedNames.ListKind, allKinds); err != nil { - namesAcceptedCondition.Status = apiextensions.ConditionFalse + namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse namesAcceptedCondition.Reason = "ListKindConflict" namesAcceptedCondition.Message = err.Error() } else { @@ -187,8 +187,8 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension newNames.Categories = requestedNames.Categories // if we haven't changed the condition, then our names must be good. - if namesAcceptedCondition.Status == apiextensions.ConditionUnknown { - namesAcceptedCondition.Status = apiextensions.ConditionTrue + if namesAcceptedCondition.Status == apiextensionsv1.ConditionUnknown { + namesAcceptedCondition.Status = apiextensionsv1.ConditionTrue namesAcceptedCondition.Reason = "NoConflicts" namesAcceptedCondition.Message = "no conflicts found" } @@ -197,19 +197,19 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension // The Establishing Controller will see the NamesAccepted condition when it arrives through the shared informer. // At that time the API endpoint handler will serve the endpoint, avoiding a race // which we had if we set Established to true here. - establishedCondition := apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Established, - Status: apiextensions.ConditionFalse, + establishedCondition := apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionFalse, Reason: "NotAccepted", Message: "not all names are accepted", } - if old := apiextensionshelpers.FindCRDCondition(in, apiextensions.Established); old != nil { + if old := apiextensionshelpers.FindCRDCondition(in, apiextensionsv1.Established); old != nil { establishedCondition = *old } - if establishedCondition.Status != apiextensions.ConditionTrue && namesAcceptedCondition.Status == apiextensions.ConditionTrue { - establishedCondition = apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Established, - Status: apiextensions.ConditionFalse, + if establishedCondition.Status != apiextensionsv1.ConditionTrue && namesAcceptedCondition.Status == apiextensionsv1.ConditionTrue { + establishedCondition = apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionFalse, Reason: "Installing", Message: "the initial names have been accepted", } @@ -252,7 +252,7 @@ func (c *NamingConditionController) sync(key string) error { // nothing to do if accepted names and NamesAccepted condition didn't change if reflect.DeepEqual(inCustomResourceDefinition.Status.AcceptedNames, acceptedNames) && - apiextensionshelpers.IsCRDConditionEquivalent(&namingCondition, apiextensionshelpers.FindCRDCondition(inCustomResourceDefinition, apiextensions.NamesAccepted)) { + apiextensionshelpers.IsCRDConditionEquivalent(&namingCondition, apiextensionshelpers.FindCRDCondition(inCustomResourceDefinition, apiextensionsv1.NamesAccepted)) { return nil } @@ -324,7 +324,7 @@ func (c *NamingConditionController) processNextWorkItem() bool { return true } -func (c *NamingConditionController) enqueue(obj *apiextensions.CustomResourceDefinition) { +func (c *NamingConditionController) enqueue(obj *apiextensionsv1.CustomResourceDefinition) { key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) if err != nil { utilruntime.HandleError(fmt.Errorf("couldn't get key for object %#v: %v", obj, err)) @@ -335,26 +335,26 @@ func (c *NamingConditionController) enqueue(obj *apiextensions.CustomResourceDef } func (c *NamingConditionController) addCustomResourceDefinition(obj interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Adding %s", castObj.Name) c.enqueue(castObj) } func (c *NamingConditionController) updateCustomResourceDefinition(obj, _ interface{}) { - castObj := obj.(*apiextensions.CustomResourceDefinition) + castObj := obj.(*apiextensionsv1.CustomResourceDefinition) klog.V(4).Infof("Updating %s", castObj.Name) c.enqueue(castObj) } func (c *NamingConditionController) deleteCustomResourceDefinition(obj interface{}) { - castObj, ok := obj.(*apiextensions.CustomResourceDefinition) + castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { tombstone, ok := obj.(cache.DeletedFinalStateUnknown) if !ok { klog.Errorf("Couldn't get object from tombstone %#v", obj) return } - castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) + castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition) if !ok { klog.Errorf("Tombstone contained object that is not expected %#v", obj) return diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller_test.go index 8b141e2534a..5ca9eb639b3 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller_test.go @@ -23,24 +23,24 @@ import ( "time" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/cache" ) type crdBuilder struct { - curr apiextensions.CustomResourceDefinition + curr apiextensionsv1.CustomResourceDefinition } func newCRD(name string) *crdBuilder { tokens := strings.SplitN(name, ".", 2) return &crdBuilder{ - curr: apiextensions.CustomResourceDefinition{ + curr: apiextensionsv1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Name: name}, - Spec: apiextensions.CustomResourceDefinitionSpec{ + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ Group: tokens[1], - Names: apiextensions.CustomResourceDefinitionNames{ + Names: apiextensionsv1.CustomResourceDefinitionNames{ Plural: tokens[0], }, }, @@ -68,14 +68,14 @@ func (b *crdBuilder) StatusNames(plural, singular, kind, listKind string, shortN return b } -func (b *crdBuilder) Condition(c apiextensions.CustomResourceDefinitionCondition) *crdBuilder { +func (b *crdBuilder) Condition(c apiextensionsv1.CustomResourceDefinitionCondition) *crdBuilder { b.curr.Status.Conditions = append(b.curr.Status.Conditions, c) return b } -func names(plural, singular, kind, listKind string, shortNames ...string) apiextensions.CustomResourceDefinitionNames { - ret := apiextensions.CustomResourceDefinitionNames{ +func names(plural, singular, kind, listKind string, shortNames ...string) apiextensionsv1.CustomResourceDefinitionNames { + ret := apiextensionsv1.CustomResourceDefinitionNames{ Plural: plural, Singular: singular, Kind: kind, @@ -85,42 +85,42 @@ func names(plural, singular, kind, listKind string, shortNames ...string) apiext return ret } -func (b *crdBuilder) NewOrDie() *apiextensions.CustomResourceDefinition { +func (b *crdBuilder) NewOrDie() *apiextensionsv1.CustomResourceDefinition { return &b.curr } -var acceptedCondition = apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionTrue, +var acceptedCondition = apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionTrue, Reason: "NoConflicts", Message: "no conflicts found", } -var notAcceptedCondition = apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionFalse, +var notAcceptedCondition = apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionFalse, Reason: "NotAccepted", Message: "not all names are accepted", } -var installingCondition = apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Established, - Status: apiextensions.ConditionFalse, +var installingCondition = apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionFalse, Reason: "Installing", Message: "the initial names have been accepted", } -var notEstablishedCondition = apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.Established, - Status: apiextensions.ConditionFalse, +var notEstablishedCondition = apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.Established, + Status: apiextensionsv1.ConditionFalse, Reason: "NotAccepted", Message: "not all names are accepted", } -func nameConflictCondition(reason, message string) apiextensions.CustomResourceDefinitionCondition { - return apiextensions.CustomResourceDefinitionCondition{ - Type: apiextensions.NamesAccepted, - Status: apiextensions.ConditionFalse, +func nameConflictCondition(reason, message string) apiextensionsv1.CustomResourceDefinitionCondition { + return apiextensionsv1.CustomResourceDefinitionCondition{ + Type: apiextensionsv1.NamesAccepted, + Status: apiextensionsv1.ConditionFalse, Reason: reason, Message: message, } @@ -130,17 +130,17 @@ func TestSync(t *testing.T) { tests := []struct { name string - in *apiextensions.CustomResourceDefinition - existing []*apiextensions.CustomResourceDefinition - expectedNames apiextensions.CustomResourceDefinitionNames - expectedNameConflictCondition apiextensions.CustomResourceDefinitionCondition - expectedEstablishedCondition apiextensions.CustomResourceDefinitionCondition + in *apiextensionsv1.CustomResourceDefinition + existing []*apiextensionsv1.CustomResourceDefinition + expectedNames apiextensionsv1.CustomResourceDefinitionNames + expectedNameConflictCondition apiextensionsv1.CustomResourceDefinitionCondition + expectedEstablishedCondition apiextensionsv1.CustomResourceDefinitionCondition }{ { name: "first resource", in: newCRD("alfa.bravo.com").NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{}, - expectedNames: apiextensions.CustomResourceDefinitionNames{ + existing: []*apiextensionsv1.CustomResourceDefinition{}, + expectedNames: apiextensionsv1.CustomResourceDefinitionNames{ Plural: "alfa", }, expectedNameConflictCondition: acceptedCondition, @@ -149,7 +149,7 @@ func TestSync(t *testing.T) { { name: "different groups", in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("alfa.charlie.com").StatusNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), }, expectedNames: names("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), @@ -159,7 +159,7 @@ func TestSync(t *testing.T) { { name: "conflict plural to singular", in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "alfa", "", "").NewOrDie(), }, expectedNames: names("", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), @@ -169,7 +169,7 @@ func TestSync(t *testing.T) { { name: "conflict singular to shortName", in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "indias", "", "", "delta-singular").NewOrDie(), }, expectedNames: names("alfa", "", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), @@ -179,7 +179,7 @@ func TestSync(t *testing.T) { { name: "conflict on shortName to shortName", in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "indias", "", "", "hotel-shortname-2").NewOrDie(), }, expectedNames: names("alfa", "delta-singular", "echo-kind", "foxtrot-listkind"), @@ -189,7 +189,7 @@ func TestSync(t *testing.T) { { name: "conflict on kind to listkind", in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "indias", "", "echo-kind").NewOrDie(), }, expectedNames: names("alfa", "delta-singular", "", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), @@ -199,7 +199,7 @@ func TestSync(t *testing.T) { { name: "conflict on listkind to kind", in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "indias", "foxtrot-listkind", "").NewOrDie(), }, expectedNames: names("alfa", "delta-singular", "echo-kind", "", "golf-shortname-1", "hotel-shortname-2"), @@ -209,7 +209,7 @@ func TestSync(t *testing.T) { { name: "no conflict on resource and kind", in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "echo-kind", "", "").NewOrDie(), }, expectedNames: names("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), @@ -222,7 +222,7 @@ func TestSync(t *testing.T) { SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). StatusNames("zulu", "yankee-singular", "xray-kind", "whiskey-listkind", "victor-shortname-1", "uniform-shortname-2"). NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "indias", "foxtrot-listkind", "", "delta-singular").NewOrDie(), }, expectedNames: names("alfa", "yankee-singular", "echo-kind", "whiskey-listkind", "golf-shortname-1", "hotel-shortname-2"), @@ -235,7 +235,7 @@ func TestSync(t *testing.T) { SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). StatusNames("zulu", "yankee-singular", "xray-kind", "whiskey-listkind", "victor-shortname-1", "uniform-shortname-2"). NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "indias", "foxtrot-listkind", "", "delta-singular", "golf-shortname-1").NewOrDie(), }, expectedNames: names("alfa", "yankee-singular", "echo-kind", "whiskey-listkind", "victor-shortname-1", "uniform-shortname-2"), @@ -248,7 +248,7 @@ func TestSync(t *testing.T) { SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). StatusNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("alfa.bravo.com"). SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). StatusNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). @@ -264,7 +264,7 @@ func TestSync(t *testing.T) { SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1"). StatusNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("alfa.bravo.com"). SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). StatusNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). @@ -277,8 +277,8 @@ func TestSync(t *testing.T) { { name: "installing before with true condition", in: newCRD("alfa.bravo.com").Condition(acceptedCondition).NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{}, - expectedNames: apiextensions.CustomResourceDefinitionNames{ + existing: []*apiextensionsv1.CustomResourceDefinition{}, + expectedNames: apiextensionsv1.CustomResourceDefinitionNames{ Plural: "alfa", }, expectedNameConflictCondition: acceptedCondition, @@ -287,8 +287,8 @@ func TestSync(t *testing.T) { { name: "not installing before with false condition", in: newCRD("alfa.bravo.com").Condition(notAcceptedCondition).NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{}, - expectedNames: apiextensions.CustomResourceDefinitionNames{ + existing: []*apiextensionsv1.CustomResourceDefinition{}, + expectedNames: apiextensionsv1.CustomResourceDefinitionNames{ Plural: "alfa", }, expectedNameConflictCondition: acceptedCondition, @@ -299,7 +299,7 @@ func TestSync(t *testing.T) { in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). Condition(acceptedCondition). NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "alfa", "", "").NewOrDie(), }, expectedNames: names("", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), @@ -311,7 +311,7 @@ func TestSync(t *testing.T) { in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). Condition(notAcceptedCondition). NewOrDie(), - existing: []*apiextensions.CustomResourceDefinition{ + existing: []*apiextensionsv1.CustomResourceDefinition{ newCRD("india.bravo.com").StatusNames("india", "alfa", "", "").NewOrDie(), }, expectedNames: names("", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go index 66c749e9610..1bd740d7fff 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go @@ -40,7 +40,7 @@ import ( etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apiserver" "k8s.io/apiextensions-apiserver/pkg/crdserverscheme" "k8s.io/apiextensions-apiserver/pkg/registry/customresource" @@ -76,7 +76,7 @@ func newStorage(t *testing.T) (customresource.CustomResourceStorage, *etcd3testi status := &apiextensionsinternal.CustomResourceSubresourceStatus{} - headers := []apiextensions.CustomResourceColumnDefinition{ + headers := []apiextensionsv1.CustomResourceColumnDefinition{ {Name: "Age", Type: "date", JSONPath: ".metadata.creationTimestamp"}, {Name: "Replicas", Type: "integer", JSONPath: ".spec.replicas"}, {Name: "Missing", Type: "string", JSONPath: ".spec.missing"}, diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/tableconvertor.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/tableconvertor.go index e335cecc04a..ba807103cde 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/tableconvertor.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/tableconvertor.go @@ -23,7 +23,7 @@ import ( "fmt" "reflect" - apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/api/meta" metatable "k8s.io/apimachinery/pkg/api/meta/table" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -36,7 +36,7 @@ var swaggerMetadataDescriptions = metav1.ObjectMeta{}.SwaggerDoc() // New creates a new table convertor for the provided CRD column definition. If the printer definition cannot be parsed, // error will be returned along with a default table convertor. -func New(crdColumns []apiextensions.CustomResourceColumnDefinition) (rest.TableConvertor, error) { +func New(crdColumns []apiextensionsv1.CustomResourceColumnDefinition) (rest.TableConvertor, error) { headers := []metav1.TableColumnDefinition{ {Name: "Name", Type: "string", Format: "name", Description: swaggerMetadataDescriptions["name"]}, } From 6c0688fd5171882c31ee023da2d745a1a977a4a8 Mon Sep 17 00:00:00 2001 From: yue9944882 <291271447@qq.com> Date: Fri, 8 Nov 2019 23:29:31 +0800 Subject: [PATCH 4/5] santize codegen scripts --- .../hack/update-codegen.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/hack/update-codegen.sh b/staging/src/k8s.io/apiextensions-apiserver/hack/update-codegen.sh index 524aaa65d17..a54c41f2327 100755 --- a/staging/src/k8s.io/apiextensions-apiserver/hack/update-codegen.sh +++ b/staging/src/k8s.io/apiextensions-apiserver/hack/update-codegen.sh @@ -21,13 +21,18 @@ set -o pipefail SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. CODEGEN_PKG=${CODEGEN_PKG:-$(cd "${SCRIPT_ROOT}"; ls -d -1 ./vendor/k8s.io/code-generator 2>/dev/null || echo ../code-generator)} -# generate the code with: -# --output-base because this script should also be able to run inside the vendor dir of -# k8s.io/kubernetes. The output-base is needed for the generators to output into the vendor dir -# instead of the $GOPATH directly. For normal projects this can be dropped. CLIENTSET_NAME_VERSIONED=clientset \ +CLIENTSET_PKG_NAME=clientset \ +bash "${CODEGEN_PKG}/generate-groups.sh" deepcopy,client,lister,informer \ + k8s.io/apiextensions-apiserver/pkg/client k8s.io/apiextensions-apiserver/pkg/apis \ + "apiextensions:v1beta1,v1" \ + --output-base "$(dirname "${BASH_SOURCE[0]}")/../../.." \ + --go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" + +CLIENTSET_NAME_VERSIONED=clientset \ +CLIENTSET_PKG_NAME=clientset \ CLIENTSET_NAME_INTERNAL=internalclientset \ -bash "${CODEGEN_PKG}/generate-internal-groups.sh" deepcopy,client,lister,informer,conversion \ +bash "${CODEGEN_PKG}/generate-internal-groups.sh" deepcopy,conversion \ k8s.io/apiextensions-apiserver/pkg/client k8s.io/apiextensions-apiserver/pkg/apis k8s.io/apiextensions-apiserver/pkg/apis \ "apiextensions:v1beta1,v1" \ --output-base "$(dirname "${BASH_SOURCE[0]}")/../../.." \ From 81471c36b1194f87219807b8f87e9020fdd4888e Mon Sep 17 00:00:00 2001 From: yue9944882 <291271447@qq.com> Date: Fri, 8 Nov 2019 23:29:48 +0800 Subject: [PATCH 5/5] [generated] bazels and vendor/modules.txt [generated] bazels bazel --- cmd/kube-apiserver/app/BUILD | 2 +- pkg/master/controller/crdregistration/BUILD | 10 +++++----- staging/src/k8s.io/apiextensions-apiserver/BUILD | 3 --- .../apiextensions-apiserver/pkg/apihelpers/BUILD | 10 ++++++++-- .../apiextensions-apiserver/pkg/apiserver/BUILD | 12 ++++++------ .../pkg/apiserver/conversion/BUILD | 2 -- .../pkg/apiserver/validation/BUILD | 2 +- .../pkg/controller/apiapproval/BUILD | 12 +++++------- .../pkg/controller/establish/BUILD | 9 +++++---- .../pkg/controller/finalizer/BUILD | 9 +++++---- .../pkg/controller/nonstructuralschema/BUILD | 8 +++++--- .../pkg/controller/openapi/BUILD | 7 ++++--- .../pkg/controller/openapi/builder/BUILD | 4 +++- .../pkg/controller/status/BUILD | 14 ++++++++------ .../pkg/registry/customresource/BUILD | 1 + .../registry/customresource/tableconvertor/BUILD | 2 +- vendor/modules.txt | 8 -------- 17 files changed, 58 insertions(+), 57 deletions(-) diff --git a/cmd/kube-apiserver/app/BUILD b/cmd/kube-apiserver/app/BUILD index c96b1d49be8..66570c567e5 100644 --- a/cmd/kube-apiserver/app/BUILD +++ b/cmd/kube-apiserver/app/BUILD @@ -34,7 +34,7 @@ go_library( "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/pkg/master/controller/crdregistration/BUILD b/pkg/master/controller/crdregistration/BUILD index 3b8b341e772..3890ca6b0c7 100644 --- a/pkg/master/controller/crdregistration/BUILD +++ b/pkg/master/controller/crdregistration/BUILD @@ -11,9 +11,9 @@ go_library( srcs = ["crdregistration_controller.go"], importpath = "k8s.io/kubernetes/pkg/master/controller/crdregistration", deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", @@ -44,8 +44,8 @@ go_test( srcs = ["crdregistration_controller_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/BUILD b/staging/src/k8s.io/apiextensions-apiserver/BUILD index cde836a11dc..570d5ad1d50 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/BUILD @@ -40,10 +40,7 @@ filegroup( "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:all-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions:all-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion:all-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1beta1:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server:all-srcs", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/BUILD index 4934a87078d..84e1338c1cb 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers/BUILD @@ -6,14 +6,20 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/apihelpers", importpath = "k8s.io/apiextensions-apiserver/pkg/apihelpers", visibility = ["//visibility:public"], - deps = ["//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library"], + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + ], ) go_test( name = "go_default_test", srcs = ["helpers_test.go"], embed = [":go_default_library"], - deps = ["//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library"], + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + ], ) filegroup( diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD index b44cca51f05..d53c1c5942e 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD @@ -13,12 +13,14 @@ go_library( "customresource_discovery.go", "customresource_discovery_controller.go", "customresource_handler.go", + "helpers.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver", importpath = "k8s.io/apiextensions-apiserver/pkg/apiserver", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", @@ -30,11 +32,9 @@ go_library( "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer:go_default_library", @@ -101,9 +101,9 @@ go_test( srcs = ["customresource_handler_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/protobuf:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/BUILD index 75569190fe0..8150ce2791f 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/BUILD @@ -13,7 +13,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/features:go_default_library", @@ -58,7 +57,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/BUILD index eaf6912f647..d67e6f4697e 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/BUILD @@ -48,7 +48,7 @@ go_test( deps = [ "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/fuzzer:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/apitesting/fuzzer:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/BUILD index 2aa7eb49dc7..60f1067079d 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/apiapproval/BUILD @@ -8,11 +8,10 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", @@ -27,8 +26,7 @@ go_test( srcs = ["apiapproval_controller_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", ], ) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/BUILD index 03d72c68487..d523e974a21 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish/BUILD @@ -7,10 +7,11 @@ go_library( importpath = "k8s.io/apiextensions-apiserver/pkg/controller/establish", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/BUILD index bc7e213210e..072305e3941 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/BUILD @@ -11,10 +11,11 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/controller/finalizer", importpath = "k8s.io/apiextensions-apiserver/pkg/controller/finalizer", deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/BUILD index e6fbd704bca..ca76db38507 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/BUILD @@ -7,11 +7,13 @@ go_library( importpath = "k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema", visibility = ["//visibility:public"], deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD index f6f2340b10d..539cd295801 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD @@ -10,9 +10,10 @@ go_library( importpath = "k8s.io/apiextensions-apiserver/pkg/controller/openapi", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/BUILD index 6226496a6ce..883b9358bc8 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/BUILD @@ -11,7 +11,9 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2:go_default_library", @@ -40,7 +42,7 @@ go_test( embed = [":go_default_library"], deps = [ "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/BUILD index 1d6f1cbbccc..6fd6099b41f 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/BUILD @@ -11,8 +11,9 @@ go_test( srcs = ["naming_controller_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", ], @@ -24,10 +25,11 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/controller/status", importpath = "k8s.io/apiextensions-apiserver/pkg/controller/status", deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apihelpers:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/BUILD index d9f2e8441ef..bff3eede773 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/BUILD @@ -72,6 +72,7 @@ go_test( deps = [ "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/crdserverscheme:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/BUILD index aba49902b83..0eb833b5fd8 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor/BUILD @@ -7,7 +7,7 @@ go_library( importpath = "k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta/table:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/vendor/modules.txt b/vendor/modules.txt index a51796d1ed5..639f71646af 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1155,19 +1155,11 @@ k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1 -k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset -k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/scheme -k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset/typed/apiextensions/internalversion k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces -k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion -k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions -k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion -k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/internalinterfaces -k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/cmd/server/options