s/apiextensions/apiextensionsv1/ for all imports in k/k

rename alias import

fmt
This commit is contained in:
yue9944882
2019-11-29 17:34:55 +08:00
parent 168f8f54f0
commit 15a883b067
22 changed files with 445 additions and 445 deletions

View File

@@ -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})
}

View File

@@ -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,

View File

@@ -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

View File

@@ -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,
},

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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

View File

@@ -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,
},
}

View File

@@ -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",
}

View File

@@ -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)

View File

@@ -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

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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"),

View File

@@ -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"},

View File

@@ -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"]},
}