Drop k8s.io/apiextensions-apiserver dependency

This commit is contained in:
Mikhail Mazurskiy 2021-10-11 21:27:48 +11:00
parent a1b40b59d5
commit 7333873c91
No known key found for this signature in database
GPG Key ID: FA7917C48932DD55
9 changed files with 44 additions and 38 deletions

1
go.mod
View File

@ -13,7 +13,6 @@ require (
golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
k8s.io/api v0.21.1 k8s.io/api v0.21.1
k8s.io/apiextensions-apiserver v0.21.1
k8s.io/apimachinery v0.21.1 k8s.io/apimachinery v0.21.1
k8s.io/cli-runtime v0.21.1 k8s.io/cli-runtime v0.21.1
k8s.io/client-go v0.21.1 k8s.io/client-go v0.21.1

View File

@ -7,10 +7,15 @@ import (
"fmt" "fmt"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/cli-utils/pkg/object"
) )
var (
namespaceGK = schema.GroupKind{Group: "", Kind: "Namespace"}
)
// LocalNamespacesFilter encapsulates the set of namespaces // LocalNamespacesFilter encapsulates the set of namespaces
// that are currently in use. Used to ensure we do not delete // that are currently in use. Used to ensure we do not delete
// namespaces with currently applied objects in them. // namespaces with currently applied objects in them.
@ -29,7 +34,7 @@ func (lnf LocalNamespacesFilter) Name() string {
// for "destroying", since every object is being delete. Never returns an error. // for "destroying", since every object is being delete. Never returns an error.
func (lnf LocalNamespacesFilter) Filter(obj *unstructured.Unstructured) (bool, string, error) { func (lnf LocalNamespacesFilter) Filter(obj *unstructured.Unstructured) (bool, string, error) {
id := object.UnstructuredToObjMetaOrDie(obj) id := object.UnstructuredToObjMetaOrDie(obj)
if id.GroupKind == object.CoreV1Namespace.GroupKind() && if id.GroupKind == namespaceGK &&
lnf.LocalNamespaces.Has(id.Name) { lnf.LocalNamespaces.Has(id.Name) {
reason := fmt.Sprintf("namespace still in use (namespace: %q)", id.Name) reason := fmt.Sprintf("namespace still in use (namespace: %q)", id.Name)
return true, reason, nil return true, reason, nil

View File

@ -5,6 +5,7 @@ package task
import ( import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"sigs.k8s.io/cli-utils/pkg/apply/event" "sigs.k8s.io/cli-utils/pkg/apply/event"
"sigs.k8s.io/cli-utils/pkg/apply/taskrunner" "sigs.k8s.io/cli-utils/pkg/apply/taskrunner"
@ -13,6 +14,10 @@ import (
"sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/cli-utils/pkg/object"
) )
var (
namespaceGVKv1 = schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Namespace"}
)
// InvAddTask encapsulates structures necessary to add/merge inventory // InvAddTask encapsulates structures necessary to add/merge inventory
// into the cluster. The InvAddTask should add/merge inventory references // into the cluster. The InvAddTask should add/merge inventory references
// before the actual object is applied. // before the actual object is applied.
@ -74,7 +79,7 @@ func inventoryNamespaceInSet(inv inventory.InventoryInfo, objs object.Unstructur
for _, obj := range objs { for _, obj := range objs {
gvk := obj.GetObjectKind().GroupVersionKind() gvk := obj.GetObjectKind().GroupVersionKind()
if gvk == object.CoreV1Namespace && obj.GetName() == invNamespace { if gvk == namespaceGVKv1 && obj.GetName() == invNamespace {
inventory.AddInventoryIDAnnotation(obj, inv) inventory.AddInventoryIDAnnotation(obj, inv)
return obj return obj
} }

View File

@ -8,15 +8,18 @@ import (
"reflect" "reflect"
"time" "time"
v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/restmapper" "k8s.io/client-go/restmapper"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"sigs.k8s.io/cli-utils/pkg/apply/event" "sigs.k8s.io/cli-utils/pkg/apply/event"
"sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/cli-utils/pkg/object"
) )
var (
crdGK = schema.GroupKind{Group: "apiextensions.k8s.io", Kind: "CustomResourceDefinition"}
)
// Task is the interface that must be implemented by // Task is the interface that must be implemented by
// all tasks that will be executed by the taskrunner. // all tasks that will be executed by the taskrunner.
type Task interface { type Task interface {
@ -163,9 +166,7 @@ func (w *WaitTask) startAndComplete(taskContext *TaskContext) {
func (w *WaitTask) complete(taskContext *TaskContext) { func (w *WaitTask) complete(taskContext *TaskContext) {
var err error var err error
for _, obj := range w.Ids { for _, obj := range w.Ids {
if (obj.GroupKind.Group == v1.SchemeGroupVersion.Group || if obj.GroupKind == crdGK {
obj.GroupKind.Group == v1beta1.SchemeGroupVersion.Group) &&
obj.GroupKind.Kind == "CustomResourceDefinition" {
ddRESTMapper, err := extractDeferredDiscoveryRESTMapper(w.mapper) ddRESTMapper, err := extractDeferredDiscoveryRESTMapper(w.mapper)
if err == nil { if err == nil {
ddRESTMapper.Reset() ddRESTMapper.Reset()

View File

@ -13,7 +13,6 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
@ -26,6 +25,7 @@ var (
deploymentGVK = appsv1.SchemeGroupVersion.WithKind("Deployment") deploymentGVK = appsv1.SchemeGroupVersion.WithKind("Deployment")
rsGVK = appsv1.SchemeGroupVersion.WithKind("ReplicaSet") rsGVK = appsv1.SchemeGroupVersion.WithKind("ReplicaSet")
podGVK = v1.SchemeGroupVersion.WithKind("Pod") podGVK = v1.SchemeGroupVersion.WithKind("Pod")
crdGVK = schema.GroupVersionKind{Group: "apiextensions.k8s.io", Version: "v1", Kind: "CustomResourceDefinition"}
) )
func TestSync(t *testing.T) { func TestSync(t *testing.T) {
@ -79,8 +79,8 @@ func TestSync(t *testing.T) {
} }
fakeMapper := testutil.NewFakeRESTMapper( fakeMapper := testutil.NewFakeRESTMapper(
appsv1.SchemeGroupVersion.WithKind("Deployment"), deploymentGVK,
appsv1.SchemeGroupVersion.WithKind("ReplicaSet"), rsGVK,
v1.SchemeGroupVersion.WithKind("Pod"), v1.SchemeGroupVersion.WithKind("Pod"),
) )
@ -115,7 +115,7 @@ func TestSync_Errors(t *testing.T) {
}{ }{
"mapping and reader are successful": { "mapping and reader are successful": {
mapper: testutil.NewFakeRESTMapper( mapper: testutil.NewFakeRESTMapper(
apiextv1.SchemeGroupVersion.WithKind("CustomResourceDefinition"), crdGVK,
), ),
readerError: nil, readerError: nil,
expectSyncError: false, expectSyncError: false,
@ -123,7 +123,7 @@ func TestSync_Errors(t *testing.T) {
}, },
"reader returns NotFound error": { "reader returns NotFound error": {
mapper: testutil.NewFakeRESTMapper( mapper: testutil.NewFakeRESTMapper(
apiextv1.SchemeGroupVersion.WithKind("CustomResourceDefinition"), crdGVK,
), ),
readerError: errors.NewNotFound(schema.GroupResource{ readerError: errors.NewNotFound(schema.GroupResource{
Group: "apiextensions.k8s.io", Group: "apiextensions.k8s.io",
@ -135,7 +135,7 @@ func TestSync_Errors(t *testing.T) {
}, },
"reader returns other error": { "reader returns other error": {
mapper: testutil.NewFakeRESTMapper( mapper: testutil.NewFakeRESTMapper(
apiextv1.SchemeGroupVersion.WithKind("CustomResourceDefinition"), crdGVK,
), ),
readerError: errors.NewInternalError(fmt.Errorf("testing")), readerError: errors.NewInternalError(fmt.Errorf("testing")),
expectSyncError: false, expectSyncError: false,
@ -178,7 +178,7 @@ func TestSync_Errors(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
cacheEntry, found := clusterReader.cache[gkNamespace{ cacheEntry, found := clusterReader.cache[gkNamespace{
GroupKind: apiextv1.SchemeGroupVersion.WithKind("CustomResourceDefinition").GroupKind(), GroupKind: crdGVK.GroupKind(),
}] }]
require.True(t, found) require.True(t, found)
if tc.cacheError { if tc.cacheError {

View File

@ -9,11 +9,10 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
cmdtesting "k8s.io/kubectl/pkg/cmd/testing" cmdtesting "k8s.io/kubectl/pkg/cmd/testing"
"k8s.io/kubectl/pkg/scheme"
"sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/cli-utils/pkg/object"
"sigs.k8s.io/kustomize/kyaml/kio/filters" "sigs.k8s.io/kustomize/kyaml/kio/filters"
"sigs.k8s.io/kustomize/kyaml/kio/kioutil" "sigs.k8s.io/kustomize/kyaml/kio/kioutil"
@ -21,10 +20,6 @@ import (
) )
func TestSetNamespaces(t *testing.T) { func TestSetNamespaces(t *testing.T) {
// We need the RESTMapper in the testFactory to contain the CRD
// types, so add them to the scheme here.
_ = apiextv1.AddToScheme(scheme.Scheme)
testCases := map[string]struct { testCases := map[string]struct {
objs []*unstructured.Unstructured objs []*unstructured.Unstructured
defaultNamspace string defaultNamspace string
@ -166,9 +161,13 @@ func TestSetNamespaces(t *testing.T) {
defer tf.Cleanup() defer tf.Cleanup()
mapper, err := tf.ToRESTMapper() mapper, err := tf.ToRESTMapper()
if !assert.NoError(t, err) { require.NoError(t, err)
t.FailNow() crdGV := schema.GroupVersion{Group: "apiextensions.k8s.io", Version: "v1"}
} crdMapper := meta.NewDefaultRESTMapper([]schema.GroupVersion{crdGV})
crdMapper.AddSpecific(crdGV.WithKind("CustomResourceDefinition"),
crdGV.WithResource("customresourcedefinitions"),
crdGV.WithResource("customresourcedefinition"), meta.RESTScopeRoot)
mapper = meta.MultiRESTMapper([]meta.RESTMapper{mapper, crdMapper})
err = SetNamespaces(mapper, tc.objs, tc.defaultNamspace, tc.enforceNamespace) err = SetNamespaces(mapper, tc.objs, tc.defaultNamspace, tc.enforceNamespace)

View File

@ -7,18 +7,14 @@ package object
import ( import (
"fmt" "fmt"
corev1 "k8s.io/api/core/v1"
extensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
) )
var ( var (
CoreNamespace = CoreV1Namespace.GroupKind() namespaceGK = schema.GroupKind{Group: "", Kind: "Namespace"}
CoreV1Namespace = corev1.SchemeGroupVersion.WithKind("Namespace") crdGK = schema.GroupKind{Group: "apiextensions.k8s.io", Kind: "CustomResourceDefinition"}
ExtensionsCRD = ExtensionsV1CRD.GroupKind()
ExtensionsV1CRD = extensionsv1.SchemeGroupVersion.WithKind("CustomResourceDefinition")
) )
// UnstructuredsToObjMetas converts a slice of unstructureds to a slice of // UnstructuredsToObjMetas converts a slice of unstructureds to a slice of
@ -73,7 +69,7 @@ func IsKindNamespace(u *unstructured.Unstructured) bool {
return false return false
} }
gvk := u.GroupVersionKind() gvk := u.GroupVersionKind()
return CoreNamespace == gvk.GroupKind() return namespaceGK == gvk.GroupKind()
} }
// IsNamespaced returns true if the passed Unstructured object // IsNamespaced returns true if the passed Unstructured object
@ -92,7 +88,7 @@ func IsCRD(u *unstructured.Unstructured) bool {
return false return false
} }
gvk := u.GroupVersionKind() gvk := u.GroupVersionKind()
return ExtensionsCRD == gvk.GroupKind() return crdGK == gvk.GroupKind()
} }
// GetCRDGroupKind returns the GroupKind stored in the passed // GetCRDGroupKind returns the GroupKind stored in the passed

View File

@ -8,12 +8,10 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
cmdtesting "k8s.io/kubectl/pkg/cmd/testing" cmdtesting "k8s.io/kubectl/pkg/cmd/testing"
"k8s.io/kubectl/pkg/scheme"
. "sigs.k8s.io/cli-utils/pkg/object" . "sigs.k8s.io/cli-utils/pkg/object"
"sigs.k8s.io/cli-utils/pkg/testutil" "sigs.k8s.io/cli-utils/pkg/testutil"
) )
@ -258,7 +256,6 @@ func TestGetCRDGroupKind(t *testing.T) {
} }
func TestLookupResourceScope(t *testing.T) { func TestLookupResourceScope(t *testing.T) {
_ = apiextv1.AddToScheme(scheme.Scheme)
testCases := map[string]struct { testCases := map[string]struct {
resource *unstructured.Unstructured resource *unstructured.Unstructured
crds []*unstructured.Unstructured crds []*unstructured.Unstructured

View File

@ -8,18 +8,16 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
cmdtesting "k8s.io/kubectl/pkg/cmd/testing" cmdtesting "k8s.io/kubectl/pkg/cmd/testing"
"k8s.io/kubectl/pkg/scheme"
"sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/cli-utils/pkg/object"
"sigs.k8s.io/cli-utils/pkg/testutil" "sigs.k8s.io/cli-utils/pkg/testutil"
) )
func TestValidate(t *testing.T) { func TestValidate(t *testing.T) {
_ = apiextv1.AddToScheme(scheme.Scheme)
testCases := map[string]struct { testCases := map[string]struct {
resources []*unstructured.Unstructured resources []*unstructured.Unstructured
expectedError error expectedError error
@ -234,6 +232,12 @@ metadata:
mapper, err := tf.ToRESTMapper() mapper, err := tf.ToRESTMapper()
require.NoError(t, err) require.NoError(t, err)
crdGV := schema.GroupVersion{Group: "apiextensions.k8s.io", Version: "v1"}
crdMapper := meta.NewDefaultRESTMapper([]schema.GroupVersion{crdGV})
crdMapper.AddSpecific(crdGV.WithKind("CustomResourceDefinition"),
crdGV.WithResource("customresourcedefinitions"),
crdGV.WithResource("customresourcedefinition"), meta.RESTScopeRoot)
mapper = meta.MultiRESTMapper([]meta.RESTMapper{mapper, crdMapper})
err = (&object.Validator{ err = (&object.Validator{
Mapper: mapper, Mapper: mapper,