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" "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" crdinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -73,24 +73,24 @@ func NewCRDRegistrationController(crdinformer crdinformers.CustomResourceDefinit
crdinformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ crdinformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) { AddFunc: func(obj interface{}) {
cast := obj.(*apiextensions.CustomResourceDefinition) cast := obj.(*apiextensionsv1.CustomResourceDefinition)
c.enqueueCRD(cast) c.enqueueCRD(cast)
}, },
UpdateFunc: func(oldObj, newObj interface{}) { UpdateFunc: func(oldObj, newObj interface{}) {
// Enqueue both old and new object to make sure we remove and add appropriate API services. // 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. // The working queue will resolve any duplicates and only changes will stay in the queue.
c.enqueueCRD(oldObj.(*apiextensions.CustomResourceDefinition)) c.enqueueCRD(oldObj.(*apiextensionsv1.CustomResourceDefinition))
c.enqueueCRD(newObj.(*apiextensions.CustomResourceDefinition)) c.enqueueCRD(newObj.(*apiextensionsv1.CustomResourceDefinition))
}, },
DeleteFunc: func(obj interface{}) { DeleteFunc: func(obj interface{}) {
cast, ok := obj.(*apiextensions.CustomResourceDefinition) cast, ok := obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
tombstone, ok := obj.(cache.DeletedFinalStateUnknown) tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
if !ok { if !ok {
klog.V(2).Infof("Couldn't get object from tombstone %#v", obj) klog.V(2).Infof("Couldn't get object from tombstone %#v", obj)
return return
} }
cast, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) cast, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
klog.V(2).Infof("Tombstone contained unexpected object: %#v", obj) klog.V(2).Infof("Tombstone contained unexpected object: %#v", obj)
return return
@@ -184,7 +184,7 @@ func (c *crdRegistrationController) processNextWorkItem() bool {
return true return true
} }
func (c *crdRegistrationController) enqueueCRD(crd *apiextensions.CustomResourceDefinition) { func (c *crdRegistrationController) enqueueCRD(crd *apiextensionsv1.CustomResourceDefinition) {
for _, version := range crd.Spec.Versions { for _, version := range crd.Spec.Versions {
c.queue.Add(schema.GroupVersion{Group: crd.Spec.Group, Version: version.Name}) c.queue.Add(schema.GroupVersion{Group: crd.Spec.Group, Version: version.Name})
} }

View File

@@ -20,7 +20,7 @@ import (
"reflect" "reflect"
"testing" "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" crdlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
@@ -31,7 +31,7 @@ import (
func TestHandleVersionUpdate(t *testing.T) { func TestHandleVersionUpdate(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
startingCRDs []*apiextensions.CustomResourceDefinition startingCRDs []*apiextensionsv1.CustomResourceDefinition
version schema.GroupVersion version schema.GroupVersion
expectedAdded []*apiregistration.APIService expectedAdded []*apiregistration.APIService
@@ -39,13 +39,13 @@ func TestHandleVersionUpdate(t *testing.T) {
}{ }{
{ {
name: "simple add crd", name: "simple add crd",
startingCRDs: []*apiextensions.CustomResourceDefinition{ startingCRDs: []*apiextensionsv1.CustomResourceDefinition{
{ {
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Group: "group.com", Group: "group.com",
// Version field is deprecated and crd registration won't rely on it at all. // 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. // defaulting route will fill up Versions field if user only provided version field.
Versions: []apiextensions.CustomResourceDefinitionVersion{ Versions: []apiextensionsv1.CustomResourceDefinitionVersion{
{ {
Name: "v1", Name: "v1",
Served: true, Served: true,
@@ -71,11 +71,11 @@ func TestHandleVersionUpdate(t *testing.T) {
}, },
{ {
name: "simple remove crd", name: "simple remove crd",
startingCRDs: []*apiextensions.CustomResourceDefinition{ startingCRDs: []*apiextensionsv1.CustomResourceDefinition{
{ {
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Group: "group.com", Group: "group.com",
Versions: []apiextensions.CustomResourceDefinitionVersion{ Versions: []apiextensionsv1.CustomResourceDefinitionVersion{
{ {
Name: "v1", Name: "v1",
Served: true, Served: true,

View File

@@ -22,7 +22,7 @@ import (
"strings" "strings"
"time" "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" 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 // GetAPIApprovalState returns the state of the API approval and reason for that state
func GetAPIApprovalState(annotations map[string]string) (state APIApprovalState, reason string) { 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 // we use the result of this parsing in the switch/case below
url, annotationURLParseErr := url.ParseRequestURI(annotation) url, annotationURLParseErr := url.ParseRequestURI(annotation)
switch { switch {
case len(annotation) == 0: 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"): case strings.HasPrefix(annotation, "unapproved"):
return APIApprovalBypassed, fmt.Sprintf("not approved: %q", annotation) return APIApprovalBypassed, fmt.Sprintf("not approved: %q", annotation)
case annotationURLParseErr == nil && url != nil && len(url.Host) > 0 && len(url.Scheme) > 0: case annotationURLParseErr == nil && url != nil && len(url.Host) > 0 && len(url.Scheme) > 0:
return APIApproved, fmt.Sprintf("approved in %v", annotation) return APIApproved, fmt.Sprintf("approved in %v", annotation)
default: 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. // 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()) newCondition.LastTransitionTime = metav1.NewTime(time.Now())
existingCondition := FindCRDCondition(crd, newCondition.Type) existingCondition := FindCRDCondition(crd, newCondition.Type)
@@ -92,8 +92,8 @@ func SetCRDCondition(crd *apiextensions.CustomResourceDefinition, newCondition a
} }
// RemoveCRDCondition removes the status condition. // RemoveCRDCondition removes the status condition.
func RemoveCRDCondition(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) { func RemoveCRDCondition(crd *apiextensionsv1.CustomResourceDefinition, conditionType apiextensionsv1.CustomResourceDefinitionConditionType) {
newConditions := []apiextensions.CustomResourceDefinitionCondition{} newConditions := []apiextensionsv1.CustomResourceDefinitionCondition{}
for _, condition := range crd.Status.Conditions { for _, condition := range crd.Status.Conditions {
if condition.Type != conditionType { if condition.Type != conditionType {
newConditions = append(newConditions, condition) newConditions = append(newConditions, condition)
@@ -103,7 +103,7 @@ func RemoveCRDCondition(crd *apiextensions.CustomResourceDefinition, conditionTy
} }
// FindCRDCondition returns the condition you're looking for or nil. // 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 { for i := range crd.Status.Conditions {
if crd.Status.Conditions[i].Type == conditionType { if crd.Status.Conditions[i].Type == conditionType {
return &crd.Status.Conditions[i] 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. // IsCRDConditionTrue indicates if the condition is present and strictly true.
func IsCRDConditionTrue(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) bool { func IsCRDConditionTrue(crd *apiextensionsv1.CustomResourceDefinition, conditionType apiextensionsv1.CustomResourceDefinitionConditionType) bool {
return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensions.ConditionTrue) return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensionsv1.ConditionTrue)
} }
// IsCRDConditionFalse indicates if the condition is present and false. // IsCRDConditionFalse indicates if the condition is present and false.
func IsCRDConditionFalse(crd *apiextensions.CustomResourceDefinition, conditionType apiextensions.CustomResourceDefinitionConditionType) bool { func IsCRDConditionFalse(crd *apiextensionsv1.CustomResourceDefinition, conditionType apiextensionsv1.CustomResourceDefinitionConditionType) bool {
return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensions.ConditionFalse) return IsCRDConditionPresentAndEqual(crd, conditionType, apiextensionsv1.ConditionFalse)
} }
// IsCRDConditionPresentAndEqual indicates if the condition is present and equal to the given status. // 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 { for _, condition := range crd.Status.Conditions {
if condition.Type == conditionType { if condition.Type == conditionType {
return condition.Status == status 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. // 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 { if lhs == nil && rhs == nil {
return true return true
} }
@@ -146,7 +146,7 @@ func IsCRDConditionEquivalent(lhs, rhs *apiextensions.CustomResourceDefinitionCo
} }
// CRDHasFinalizer returns true if the finalizer is in the list. // 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 { for _, finalizer := range crd.Finalizers {
if finalizer == needle { if finalizer == needle {
return true return true
@@ -157,7 +157,7 @@ func CRDHasFinalizer(crd *apiextensions.CustomResourceDefinition, needle string)
} }
// CRDRemoveFinalizer removes the finalizer if present. // CRDRemoveFinalizer removes the finalizer if present.
func CRDRemoveFinalizer(crd *apiextensions.CustomResourceDefinition, needle string) { func CRDRemoveFinalizer(crd *apiextensionsv1.CustomResourceDefinition, needle string) {
newFinalizers := []string{} newFinalizers := []string{}
for _, finalizer := range crd.Finalizers { for _, finalizer := range crd.Finalizers {
if finalizer != needle { 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. // 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 { for _, v := range crd.Spec.Versions {
if v.Name == version { if v.Name == version {
return v.Served return v.Served
@@ -178,18 +178,18 @@ func HasServedCRDVersion(crd *apiextensions.CustomResourceDefinition, version st
} }
// GetCRDStorageVersion returns the storage version for given CRD. // 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 { for _, v := range crd.Spec.Versions {
if v.Storage { if v.Storage {
return v.Name, nil return v.Name, nil
} }
} }
// This should not happened if crd is valid // 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. // 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 { for _, v := range crd.Status.StoredVersions {
if version == v { if version == v {
return true return true
@@ -199,27 +199,27 @@ func IsStoredVersion(crd *apiextensions.CustomResourceDefinition, version string
} }
// GetSchemaForVersion returns the validation schema for the given version or nil. // 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 { for _, v := range crd.Spec.Versions {
if version == v.Name { if version == v.Name {
return v.Schema, nil 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. // 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 { for _, v := range crd.Spec.Versions {
if version == v.Name { if version == v.Name {
return v.Subresources, nil 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. // 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 { for _, v := range versions {
if v.Schema != nil { if v.Schema != nil {
return true return true
@@ -229,7 +229,7 @@ func HasPerVersionSchema(versions []apiextensions.CustomResourceDefinitionVersio
} }
// HasPerVersionSubresources returns true if a CRD uses per-version subresources. // 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 { for _, v := range versions {
if v.Subresources != nil { if v.Subresources != nil {
return true return true
@@ -239,7 +239,7 @@ func HasPerVersionSubresources(versions []apiextensions.CustomResourceDefinition
} }
// HasPerVersionColumns returns true if a CRD uses per-version columns. // 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 { for _, v := range versions {
if len(v.AdditionalPrinterColumns) > 0 { if len(v.AdditionalPrinterColumns) > 0 {
return true return true
@@ -249,7 +249,7 @@ func HasPerVersionColumns(versions []apiextensions.CustomResourceDefinitionVersi
} }
// HasVersionServed returns true if given CRD has given version served. // 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 { for _, v := range crd.Spec.Versions {
if !v.Served || v.Name != version { if !v.Served || v.Name != version {
continue continue

View File

@@ -21,7 +21,7 @@ import (
"testing" "testing"
"time" "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" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
@@ -79,22 +79,22 @@ func TestGetAPIApprovalState(t *testing.T) {
}{ }{
{ {
name: "bare unapproved", name: "bare unapproved",
annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "unapproved"}, annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "unapproved"},
expected: APIApprovalBypassed, expected: APIApprovalBypassed,
}, },
{ {
name: "unapproved with message", name: "unapproved with message",
annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "unapproved, experimental-only"}, annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "unapproved, experimental-only"},
expected: APIApprovalBypassed, expected: APIApprovalBypassed,
}, },
{ {
name: "mismatched case", name: "mismatched case",
annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "Unapproved"}, annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "Unapproved"},
expected: APIApprovalInvalid, expected: APIApprovalInvalid,
}, },
{ {
name: "empty", name: "empty",
annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: ""}, annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: ""},
expected: APIApprovalMissing, expected: APIApprovalMissing,
}, },
{ {
@@ -104,27 +104,27 @@ func TestGetAPIApprovalState(t *testing.T) {
}, },
{ {
name: "url", 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, expected: APIApproved,
}, },
{ {
name: "url - no scheme", 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, expected: APIApprovalInvalid,
}, },
{ {
name: "url - no host", 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, expected: APIApprovalInvalid,
}, },
{ {
name: "url - just path", name: "url - just path",
annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: "/"}, annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: "/"},
expected: APIApprovalInvalid, expected: APIApprovalInvalid,
}, },
{ {
name: "missing scheme", 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, expected: APIApprovalInvalid,
}, },
} }
@@ -143,14 +143,14 @@ func TestGetAPIApprovalState(t *testing.T) {
func TestCRDHasFinalizer(t *testing.T) { func TestCRDHasFinalizer(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
crd *apiextensions.CustomResourceDefinition crd *apiextensionsv1.CustomResourceDefinition
finalizerToCheck string finalizerToCheck string
expected bool expected bool
}{ }{
{ {
name: "missing", name: "missing",
crd: &apiextensions.CustomResourceDefinition{ crd: &apiextensionsv1.CustomResourceDefinition{
ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it"}}, ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it"}},
}, },
finalizerToCheck: "it", finalizerToCheck: "it",
@@ -158,7 +158,7 @@ func TestCRDHasFinalizer(t *testing.T) {
}, },
{ {
name: "present", name: "present",
crd: &apiextensions.CustomResourceDefinition{ crd: &apiextensionsv1.CustomResourceDefinition{
ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it", "it"}}, ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it", "it"}},
}, },
finalizerToCheck: "it", finalizerToCheck: "it",
@@ -176,14 +176,14 @@ func TestCRDHasFinalizer(t *testing.T) {
func TestCRDRemoveFinalizer(t *testing.T) { func TestCRDRemoveFinalizer(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
crd *apiextensions.CustomResourceDefinition crd *apiextensionsv1.CustomResourceDefinition
finalizerToCheck string finalizerToCheck string
expected []string expected []string
}{ }{
{ {
name: "missing", name: "missing",
crd: &apiextensions.CustomResourceDefinition{ crd: &apiextensionsv1.CustomResourceDefinition{
ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it"}}, ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it"}},
}, },
finalizerToCheck: "it", finalizerToCheck: "it",
@@ -191,7 +191,7 @@ func TestCRDRemoveFinalizer(t *testing.T) {
}, },
{ {
name: "present", name: "present",
crd: &apiextensions.CustomResourceDefinition{ crd: &apiextensionsv1.CustomResourceDefinition{
ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it", "it"}}, ObjectMeta: metav1.ObjectMeta{Finalizers: []string{"not-it", "it"}},
}, },
finalizerToCheck: "it", finalizerToCheck: "it",
@@ -209,32 +209,32 @@ func TestCRDRemoveFinalizer(t *testing.T) {
func TestSetCRDCondition(t *testing.T) { func TestSetCRDCondition(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
crdCondition []apiextensions.CustomResourceDefinitionCondition crdCondition []apiextensionsv1.CustomResourceDefinitionCondition
newCondition apiextensions.CustomResourceDefinitionCondition newCondition apiextensionsv1.CustomResourceDefinitionCondition
expectedcrdCondition []apiextensions.CustomResourceDefinitionCondition expectedcrdCondition []apiextensionsv1.CustomResourceDefinitionCondition
}{ }{
{ {
name: "test setCRDcondition when one condition", name: "test setCRDcondition when one condition",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
newCondition: apiextensions.CustomResourceDefinitionCondition{ newCondition: apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "NotAccepted", Reason: "NotAccepted",
Message: "Not accepted", Message: "Not accepted",
LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC),
}, },
expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "NotAccepted", Reason: "NotAccepted",
Message: "Not accepted", Message: "Not accepted",
LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), 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", name: "test setCRDcondition when two condition",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "NoConflicts", Reason: "NoConflicts",
Message: "no conflicts found", Message: "no conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
newCondition: apiextensions.CustomResourceDefinitionCondition{ newCondition: apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "Conflicts", Reason: "Conflicts",
Message: "conflicts found", Message: "conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC),
}, },
expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "Conflicts", Reason: "Conflicts",
Message: "conflicts found", Message: "conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), 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", name: "test setCRDcondition when condition needs to be appended",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
newCondition: apiextensions.CustomResourceDefinitionCondition{ newCondition: apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "Neverapiextensions.Established", Reason: "Neverapiextensionsv1.Established",
Message: "resource was never apiextensions.Established", Message: "resource was never apiextensionsv1.Established",
LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
}, },
expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "Neverapiextensions.Established", Reason: "Neverapiextensionsv1.Established",
Message: "resource was never apiextensions.Established", Message: "resource was never apiextensionsv1.Established",
LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
}, },
{ {
name: "set new condition which doesn't have lastTransitionTime set", name: "set new condition which doesn't have lastTransitionTime set",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
newCondition: apiextensions.CustomResourceDefinitionCondition{ newCondition: apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "NotAccepted", Reason: "NotAccepted",
Message: "Not accepted", Message: "Not accepted",
}, },
expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "NotAccepted", Reason: "NotAccepted",
Message: "Not accepted", Message: "Not accepted",
LastTransitionTime: metav1.Date(2018, 1, 2, 0, 0, 0, 0, time.UTC), 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", name: "append new condition which doesn't have lastTransitionTime set",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
newCondition: apiextensions.CustomResourceDefinitionCondition{ newCondition: apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "Neverapiextensions.Established", Reason: "Neverapiextensionsv1.Established",
Message: "resource was never apiextensions.Established", Message: "resource was never apiextensionsv1.Established",
}, },
expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "Neverapiextensions.Established", Reason: "Neverapiextensionsv1.Established",
Message: "resource was never apiextensions.Established", Message: "resource was never apiextensionsv1.Established",
LastTransitionTime: metav1.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), 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) { func TestRemoveCRDCondition(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
crdCondition []apiextensions.CustomResourceDefinitionCondition crdCondition []apiextensionsv1.CustomResourceDefinitionCondition
conditionType apiextensions.CustomResourceDefinitionConditionType conditionType apiextensionsv1.CustomResourceDefinitionConditionType
expectedcrdCondition []apiextensions.CustomResourceDefinitionCondition expectedcrdCondition []apiextensionsv1.CustomResourceDefinitionCondition
}{ }{
{ {
name: "test remove CRDCondition when the conditionType meets", name: "test remove CRDCondition when the conditionType meets",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "NoConflicts", Reason: "NoConflicts",
Message: "no conflicts found", Message: "no conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
conditionType: apiextensions.NamesAccepted, conditionType: apiextensionsv1.NamesAccepted,
expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2011, 1, 2, 0, 0, 0, 0, time.UTC), 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", name: "test remove CRDCondition when the conditionType not meets",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "NoConflicts", Reason: "NoConflicts",
Message: "no conflicts found", Message: "no conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
conditionType: apiextensions.Terminating, conditionType: apiextensionsv1.Terminating,
expectedcrdCondition: []apiextensions.CustomResourceDefinitionCondition{ expectedcrdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "NoConflicts", Reason: "NoConflicts",
Message: "no conflicts found", Message: "no conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), 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) { func TestIsCRDConditionPresentAndEqual(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
crdCondition []apiextensions.CustomResourceDefinitionCondition crdCondition []apiextensionsv1.CustomResourceDefinitionCondition
conditionType apiextensions.CustomResourceDefinitionConditionType conditionType apiextensionsv1.CustomResourceDefinitionConditionType
status apiextensions.ConditionStatus status apiextensionsv1.ConditionStatus
expectresult bool expectresult bool
}{ }{
{ {
name: "test CRDCondition is not Present", name: "test CRDCondition is not Present",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "NoConflicts", Reason: "NoConflicts",
Message: "no conflicts found", Message: "no conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
conditionType: apiextensions.Terminating, conditionType: apiextensionsv1.Terminating,
status: apiextensions.ConditionTrue, status: apiextensionsv1.ConditionTrue,
expectresult: false, expectresult: false,
}, },
{ {
name: "test CRDCondition is Present but not Equal", name: "test CRDCondition is Present but not Equal",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "NoConflicts", Reason: "NoConflicts",
Message: "no conflicts found", Message: "no conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
conditionType: apiextensions.Established, conditionType: apiextensionsv1.Established,
status: apiextensions.ConditionFalse, status: apiextensionsv1.ConditionFalse,
expectresult: false, expectresult: false,
}, },
{ {
name: "test CRDCondition is Present and Equal", name: "test CRDCondition is Present and Equal",
crdCondition: []apiextensions.CustomResourceDefinitionCondition{ crdCondition: []apiextensionsv1.CustomResourceDefinitionCondition{
{ {
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "Accepted", Reason: "Accepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
{ {
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "NoConflicts", Reason: "NoConflicts",
Message: "no conflicts found", Message: "no conflicts found",
LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC), LastTransitionTime: metav1.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
}, },
}, },
conditionType: apiextensions.NamesAccepted, conditionType: apiextensionsv1.NamesAccepted,
status: apiextensions.ConditionTrue, status: apiextensionsv1.ConditionTrue,
expectresult: true, 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{ testCRDObjectMeta := metav1.ObjectMeta{
Name: "plural.group.com", Name: "plural.group.com",
ResourceVersion: "12", ResourceVersion: "12",
} }
testCRDSpec := apiextensions.CustomResourceDefinitionSpec{ testCRDSpec := apiextensionsv1.CustomResourceDefinitionSpec{
Group: "group.com", Group: "group.com",
Names: apiextensions.CustomResourceDefinitionNames{ Names: apiextensionsv1.CustomResourceDefinitionNames{
Plural: "plural", Plural: "plural",
Singular: "singular", Singular: "singular",
Kind: "kind", Kind: "kind",
ListKind: "listkind", ListKind: "listkind",
}, },
} }
testCRDAcceptedNames := apiextensions.CustomResourceDefinitionNames{ testCRDAcceptedNames := apiextensionsv1.CustomResourceDefinitionNames{
Plural: "plural", Plural: "plural",
Singular: "singular", Singular: "singular",
Kind: "kind", Kind: "kind",
ListKind: "listkind", ListKind: "listkind",
} }
return &apiextensions.CustomResourceDefinition{ return &apiextensionsv1.CustomResourceDefinition{
ObjectMeta: testCRDObjectMeta, ObjectMeta: testCRDObjectMeta,
Spec: testCRDSpec, Spec: testCRDSpec,
Status: apiextensions.CustomResourceDefinitionStatus{ Status: apiextensionsv1.CustomResourceDefinitionStatus{
AcceptedNames: testCRDAcceptedNames, AcceptedNames: testCRDAcceptedNames,
Conditions: conditions, Conditions: conditions,
}, },

View File

@@ -20,7 +20,7 @@ import (
"fmt" "fmt"
autoscalingv1 "k8s.io/api/autoscaling/v1" 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" apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime" "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. // 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{} validVersions := map[schema.GroupVersion]bool{}
for _, version := range crd.Spec.Versions { for _, version := range crd.Spec.Versions {
validVersions[schema.GroupVersion{Group: crd.Spec.Group, Version: version.Name}] = true 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 var converter crConverterInterface
switch crd.Spec.Conversion.Strategy { switch crd.Spec.Conversion.Strategy {
case apiextensions.NoneConverter: case apiextensionsv1.NoneConverter:
converter = &nopConverter{} converter = &nopConverter{}
case apiextensions.WebhookConverter: case apiextensionsv1.WebhookConverter:
if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceWebhookConversion) { if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceWebhookConversion) {
return nil, nil, fmt.Errorf("webhook conversion is disabled on this cluster") 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{ unsafe = &crConverter{
convertScale: convertScale, convertScale: convertScale,
validVersions: validVersions, validVersions: validVersions,
clusterScoped: crd.Spec.Scope == apiextensions.ClusterScoped, clusterScoped: crd.Spec.Scope == apiextensionsv1.ClusterScoped,
converter: converter, converter: converter,
} }
return &safeConverterWrapper{unsafe}, unsafe, nil return &safeConverterWrapper{unsafe}, unsafe, nil

View File

@@ -21,7 +21,7 @@ import (
"strings" "strings"
"testing" "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/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
@@ -159,16 +159,16 @@ func TestConversion(t *testing.T) {
t.Fatalf("Cannot create conversion factory: %v", err) t.Fatalf("Cannot create conversion factory: %v", err)
} }
for _, test := range tests { for _, test := range tests {
testCRD := apiextensions.CustomResourceDefinition{ testCRD := apiextensionsv1.CustomResourceDefinition{
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Conversion: &apiextensions.CustomResourceConversion{ Conversion: &apiextensionsv1.CustomResourceConversion{
Strategy: apiextensions.NoneConverter, Strategy: apiextensionsv1.NoneConverter,
}, },
}, },
} }
for _, v := range test.ValidVersions { for _, v := range test.ValidVersions {
gv, _ := schema.ParseGroupVersion(v) 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 testCRD.Spec.Group = gv.Group
} }
safeConverter, _, err := CRConverterFactory.NewConverter(&testCRD) safeConverter, _, err := CRConverterFactory.NewConverter(&testCRD)

View File

@@ -22,7 +22,7 @@ import (
"fmt" "fmt"
"time" "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" v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
apivalidation "k8s.io/apimachinery/pkg/api/validation" apivalidation "k8s.io/apimachinery/pkg/api/validation"
@@ -73,7 +73,7 @@ type webhookConverter struct {
conversionReviewVersions []string conversionReviewVersions []string
} }
func webhookClientConfigForCRD(crd *apiextensions.CustomResourceDefinition) *webhook.ClientConfig { func webhookClientConfigForCRD(crd *apiextensionsv1.CustomResourceDefinition) *webhook.ClientConfig {
apiConfig := crd.Spec.Conversion.Webhook.ClientConfig apiConfig := crd.Spec.Conversion.Webhook.ClientConfig
ret := webhook.ClientConfig{ ret := webhook.ClientConfig{
Name: fmt.Sprintf("conversion_webhook_for_%s", crd.Name), Name: fmt.Sprintf("conversion_webhook_for_%s", crd.Name),
@@ -97,7 +97,7 @@ func webhookClientConfigForCRD(crd *apiextensions.CustomResourceDefinition) *web
var _ crConverterInterface = &webhookConverter{} 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)) restClient, err := f.clientManager.HookClient(*webhookClientConfigForCRD(crd))
if err != nil { if err != nil {
return nil, err return nil, err

View File

@@ -35,7 +35,7 @@ import (
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" 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" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
listers "k8s.io/apiextensions-apiserver/pkg/client/listers/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 foundVersion := false
foundGroup := false foundGroup := false
for _, crd := range crds { for _, crd := range crds {
if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Established) {
continue 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"}) verbs := metav1.Verbs([]string{"delete", "deletecollection", "get", "list", "patch", "create", "update", "watch"})
// if we're terminating we don't allow some verbs // 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"}) verbs = metav1.Verbs([]string{"delete", "deletecollection", "get", "list", "watch"})
} }
apiResourcesForDiscovery = append(apiResourcesForDiscovery, metav1.APIResource{ apiResourcesForDiscovery = append(apiResourcesForDiscovery, metav1.APIResource{
Name: crd.Status.AcceptedNames.Plural, Name: crd.Status.AcceptedNames.Plural,
SingularName: crd.Status.AcceptedNames.Singular, SingularName: crd.Status.AcceptedNames.Singular,
Namespaced: crd.Spec.Scope == apiextensions.NamespaceScoped, Namespaced: crd.Spec.Scope == apiextensionsv1.NamespaceScoped,
Kind: crd.Status.AcceptedNames.Kind, Kind: crd.Status.AcceptedNames.Kind,
Verbs: verbs, Verbs: verbs,
ShortNames: crd.Status.AcceptedNames.ShortNames, ShortNames: crd.Status.AcceptedNames.ShortNames,
@@ -149,7 +149,7 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error {
if subresources != nil && subresources.Status != nil { if subresources != nil && subresources.Status != nil {
apiResourcesForDiscovery = append(apiResourcesForDiscovery, metav1.APIResource{ apiResourcesForDiscovery = append(apiResourcesForDiscovery, metav1.APIResource{
Name: crd.Status.AcceptedNames.Plural + "/status", Name: crd.Status.AcceptedNames.Plural + "/status",
Namespaced: crd.Spec.Scope == apiextensions.NamespaceScoped, Namespaced: crd.Spec.Scope == apiextensionsv1.NamespaceScoped,
Kind: crd.Status.AcceptedNames.Kind, Kind: crd.Status.AcceptedNames.Kind,
Verbs: metav1.Verbs([]string{"get", "patch", "update"}), Verbs: metav1.Verbs([]string{"get", "patch", "update"}),
}) })
@@ -161,7 +161,7 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error {
Version: "v1", Version: "v1",
Kind: "Scale", Kind: "Scale",
Name: crd.Status.AcceptedNames.Plural + "/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"}), Verbs: metav1.Verbs([]string{"get", "patch", "update"}),
}) })
} }
@@ -244,21 +244,21 @@ func (c *DiscoveryController) processNextWorkItem() bool {
return true return true
} }
func (c *DiscoveryController) enqueue(obj *apiextensions.CustomResourceDefinition) { func (c *DiscoveryController) enqueue(obj *apiextensionsv1.CustomResourceDefinition) {
for _, v := range obj.Spec.Versions { for _, v := range obj.Spec.Versions {
c.queue.Add(schema.GroupVersion{Group: obj.Spec.Group, Version: v.Name}) c.queue.Add(schema.GroupVersion{Group: obj.Spec.Group, Version: v.Name})
} }
} }
func (c *DiscoveryController) addCustomResourceDefinition(obj interface{}) { func (c *DiscoveryController) addCustomResourceDefinition(obj interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Adding customresourcedefinition %s", castObj.Name) klog.V(4).Infof("Adding customresourcedefinition %s", castObj.Name)
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *DiscoveryController) updateCustomResourceDefinition(oldObj, newObj interface{}) { func (c *DiscoveryController) updateCustomResourceDefinition(oldObj, newObj interface{}) {
castNewObj := newObj.(*apiextensions.CustomResourceDefinition) castNewObj := newObj.(*apiextensionsv1.CustomResourceDefinition)
castOldObj := oldObj.(*apiextensions.CustomResourceDefinition) castOldObj := oldObj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Updating customresourcedefinition %s", castOldObj.Name) klog.V(4).Infof("Updating customresourcedefinition %s", castOldObj.Name)
// Enqueue both old and new object to make sure we remove and add appropriate Versions. // 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. // 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{}) { func (c *DiscoveryController) deleteCustomResourceDefinition(obj interface{}) {
castObj, ok := obj.(*apiextensions.CustomResourceDefinition) castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
tombstone, ok := obj.(cache.DeletedFinalStateUnknown) tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
if !ok { if !ok {
klog.Errorf("Couldn't get object from tombstone %#v", obj) klog.Errorf("Couldn't get object from tombstone %#v", obj)
return return
} }
castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
klog.Errorf("Tombstone contained object that is not expected %#v", obj) klog.Errorf("Tombstone contained object that is not expected %#v", obj)
return return

View File

@@ -31,7 +31,7 @@ import (
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers"
apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" 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" "k8s.io/apiextensions-apiserver/pkg/apiserver/conversion"
structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
structuraldefaulting "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/defaulting" structuraldefaulting "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/defaulting"
@@ -137,8 +137,8 @@ type crdHandler struct {
type crdInfo struct { type crdInfo struct {
// spec and acceptedNames are used to compare against if a change is made on a CRD. We only update // 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. // the storage if one of these changes.
spec *apiextensions.CustomResourceDefinitionSpec spec *apiextensionsv1.CustomResourceDefinitionSpec
acceptedNames *apiextensions.CustomResourceDefinitionNames acceptedNames *apiextensionsv1.CustomResourceDefinitionNames
// Storage per version // Storage per version
storages map[string]customresource.CustomResourceStorage 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 // 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. // 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 { if !namespacedCRD && namespacedReq {
r.delegate.ServeHTTP(w, req) r.delegate.ServeHTTP(w, req)
return 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 // 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. // 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. // We accept this as the problem is small and self-healing.
if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.NamesAccepted) && if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.NamesAccepted) &&
!apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Established) {
r.delegate.ServeHTTP(w, req) r.delegate.ServeHTTP(w, req)
return return
} }
terminating := apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Terminating) terminating := apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Terminating)
crdInfo, err := r.getOrCreateServingInfoFor(crd.UID, crd.Name) crdInfo, err := r.getOrCreateServingInfoFor(crd.UID, crd.Name)
if apierrors.IsNotFound(err) { 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 // createCustomResourceDefinition removes potentially stale storage so it gets re-created
func (r *crdHandler) createCustomResourceDefinition(obj interface{}) { func (r *crdHandler) createCustomResourceDefinition(obj interface{}) {
crd := obj.(*apiextensions.CustomResourceDefinition) crd := obj.(*apiextensionsv1.CustomResourceDefinition)
r.customStorageLock.Lock() r.customStorageLock.Lock()
defer r.customStorageLock.Unlock() defer r.customStorageLock.Unlock()
// this could happen if the create event is merged from create-update events // 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 // updateCustomResourceDefinition removes potentially stale storage so it gets re-created
func (r *crdHandler) updateCustomResourceDefinition(oldObj, newObj interface{}) { func (r *crdHandler) updateCustomResourceDefinition(oldObj, newObj interface{}) {
oldCRD := oldObj.(*apiextensions.CustomResourceDefinition) oldCRD := oldObj.(*apiextensionsv1.CustomResourceDefinition)
newCRD := newObj.(*apiextensions.CustomResourceDefinition) newCRD := newObj.(*apiextensionsv1.CustomResourceDefinition)
r.customStorageLock.Lock() r.customStorageLock.Lock()
defer r.customStorageLock.Unlock() 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, // 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. // 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. // TODO: find a real HA safe checkpointing mechanism instead of an arbitrary wait.
if !apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensions.Established) && if !apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensionsv1.Established) &&
apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensions.NamesAccepted) { apiextensionshelpers.IsCRDConditionTrue(newCRD, apiextensionsv1.NamesAccepted) {
if r.masterCount > 1 { if r.masterCount > 1 {
r.establishingController.QueueCRD(newCRD.Name, 5*time.Second) r.establishingController.QueueCRD(newCRD.Name, 5*time.Second)
} else { } else {
@@ -577,7 +577,7 @@ func (r *crdHandler) tearDown(oldInfo *crdInfo) {
// GetCustomResourceListerCollectionDeleter returns the ListerCollectionDeleter of // GetCustomResourceListerCollectionDeleter returns the ListerCollectionDeleter of
// the given crd. // 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) info, err := r.getOrCreateServingInfoFor(crd.UID, crd.Name)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -633,7 +633,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
continue continue
} }
internalValidation := &apiextensionsinternal.CustomResourceValidation{} 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) return nil, fmt.Errorf("failed converting CRD validation to internal version: %v", err)
} }
s, err := structuralschema.NewStructural(internalValidation.OpenAPIV3Schema) s, err := structuralschema.NewStructural(internalValidation.OpenAPIV3Schema)
@@ -693,7 +693,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
var internalValidationSchema *apiextensionsinternal.CustomResourceValidation var internalValidationSchema *apiextensionsinternal.CustomResourceValidation
if validationSchema != nil { if validationSchema != nil {
internalValidationSchema = &apiextensionsinternal.CustomResourceValidation{} 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) 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 { if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && subresources != nil && subresources.Status != nil {
equivalentResourceRegistry.RegisterKindFor(resource, "status", kind) equivalentResourceRegistry.RegisterKindFor(resource, "status", kind)
statusSpec = &apiextensionsinternal.CustomResourceSubresourceStatus{} 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) return nil, fmt.Errorf("failed converting CRD status subresource to internal version: %v", err)
} }
// for the status subresource, validate only against the status schema // 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 { if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && subresources != nil && subresources.Scale != nil {
equivalentResourceRegistry.RegisterKindFor(resource, "scale", autoscalingv1.SchemeGroupVersion.WithKind("Scale")) equivalentResourceRegistry.RegisterKindFor(resource, "scale", autoscalingv1.SchemeGroupVersion.WithKind("Scale"))
scaleSpec = &apiextensionsinternal.CustomResourceSubresourceScale{} 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) 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}, schema.GroupVersionKind{Group: crd.Spec.Group, Version: v.Name, Kind: crd.Status.AcceptedNames.ListKind},
customresource.NewStrategy( customresource.NewStrategy(
typer, typer,
crd.Spec.Scope == apiextensions.NamespaceScoped, crd.Spec.Scope == apiextensionsv1.NamespaceScoped,
kind, kind,
validator, validator,
statusValidator, statusValidator,
@@ -775,13 +775,13 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
selfLinkPrefix := "" selfLinkPrefix := ""
switch crd.Spec.Scope { switch crd.Spec.Scope {
case apiextensions.ClusterScoped: case apiextensionsv1.ClusterScoped:
selfLinkPrefix = "/" + path.Join("apis", crd.Spec.Group, v.Name) + "/" + crd.Status.AcceptedNames.Plural + "/" 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") + "/" 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 // CRDs explicitly do not support protobuf, but some objects returned by the API server do
negotiatedSerializer := unstructuredNegotiatedSerializer{ 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. // 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 { for _, v := range spec.Versions {
if v.Name == version { if v.Name == version {
return v.Served return v.Served
@@ -1246,7 +1246,7 @@ func serverStartingError() error {
// buildOpenAPIModelsForApply constructs openapi models from any validation schemas specified in the custom resource, // 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. // 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. // 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) { if !utilfeature.DefaultFeatureGate.Enabled(features.ServerSideApply) {
return nil, nil return nil, nil
} }

View File

@@ -25,7 +25,7 @@ import (
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
"testing" "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" "k8s.io/apiextensions-apiserver/pkg/apiserver/conversion"
listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -78,18 +78,18 @@ func TestConvertFieldLabel(t *testing.T) {
for _, test := range tests { for _, test := range tests {
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
crd := apiextensions.CustomResourceDefinition{ crd := apiextensionsv1.CustomResourceDefinition{
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Conversion: &apiextensions.CustomResourceConversion{ Conversion: &apiextensionsv1.CustomResourceConversion{
Strategy: "None", Strategy: "None",
}, },
}, },
} }
if test.clusterScoped { if test.clusterScoped {
crd.Spec.Scope = apiextensions.ClusterScoped crd.Spec.Scope = apiextensionsv1.ClusterScoped
} else { } else {
crd.Spec.Scope = apiextensions.NamespaceScoped crd.Spec.Scope = apiextensionsv1.NamespaceScoped
} }
f, err := conversion.NewCRConverterFactory(nil, nil) f, err := conversion.NewCRConverterFactory(nil, nil)
if err != nil { if err != nil {

View File

@@ -22,7 +22,7 @@ import (
"time" "time"
"k8s.io/apiextensions-apiserver/pkg/apihelpers" "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" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
@@ -77,7 +77,7 @@ func NewKubernetesAPIApprovalPolicyConformantConditionController(
} }
// calculateCondition determines the new KubernetesAPIApprovalPolicyConformant condition // 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) { if !apihelpers.IsProtectedCommunityGroup(crd.Spec.Group) {
return nil return nil
} }
@@ -85,37 +85,37 @@ func calculateCondition(crd *apiextensions.CustomResourceDefinition) *apiextensi
approvalState, reason := apihelpers.GetAPIApprovalState(crd.Annotations) approvalState, reason := apihelpers.GetAPIApprovalState(crd.Annotations)
switch approvalState { switch approvalState {
case apihelpers.APIApprovalInvalid: case apihelpers.APIApprovalInvalid:
return &apiextensions.CustomResourceDefinitionCondition{ return &apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.KubernetesAPIApprovalPolicyConformant, Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "InvalidAnnotation", Reason: "InvalidAnnotation",
Message: reason, Message: reason,
} }
case apihelpers.APIApprovalMissing: case apihelpers.APIApprovalMissing:
return &apiextensions.CustomResourceDefinitionCondition{ return &apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.KubernetesAPIApprovalPolicyConformant, Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "MissingAnnotation", Reason: "MissingAnnotation",
Message: reason, Message: reason,
} }
case apihelpers.APIApproved: case apihelpers.APIApproved:
return &apiextensions.CustomResourceDefinitionCondition{ return &apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.KubernetesAPIApprovalPolicyConformant, Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "ApprovedAnnotation", Reason: "ApprovedAnnotation",
Message: reason, Message: reason,
} }
case apihelpers.APIApprovalBypassed: case apihelpers.APIApprovalBypassed:
return &apiextensions.CustomResourceDefinitionCondition{ return &apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.KubernetesAPIApprovalPolicyConformant, Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "UnapprovedAnnotation", Reason: "UnapprovedAnnotation",
Message: reason, Message: reason,
} }
default: default:
return &apiextensions.CustomResourceDefinitionCondition{ return &apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.KubernetesAPIApprovalPolicyConformant, Type: apiextensionsv1.KubernetesAPIApprovalPolicyConformant,
Status: apiextensions.ConditionUnknown, Status: apiextensionsv1.ConditionUnknown,
Reason: "UnknownAnnotation", Reason: "UnknownAnnotation",
Message: reason, Message: reason,
} }
@@ -132,7 +132,7 @@ func (c *KubernetesAPIApprovalPolicyConformantConditionController) sync(key stri
} }
// avoid repeated calculation for the same annotation // avoid repeated calculation for the same annotation
protectionAnnotationValue := inCustomResourceDefinition.Annotations[apiextensions.KubeAPIApprovedAnnotation] protectionAnnotationValue := inCustomResourceDefinition.Annotations[apiextensionsv1.KubeAPIApprovedAnnotation]
c.lastSeenProtectedAnnotationLock.Lock() c.lastSeenProtectedAnnotationLock.Lock()
lastSeen, seenBefore := c.lastSeenProtectedAnnotation[inCustomResourceDefinition.Name] lastSeen, seenBefore := c.lastSeenProtectedAnnotation[inCustomResourceDefinition.Name]
c.lastSeenProtectedAnnotationLock.Unlock() 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. // because group is immutable, if we have no condition now, we have no need to remove a condition.
return nil 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 // 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 { 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 return true
} }
func (c *KubernetesAPIApprovalPolicyConformantConditionController) enqueue(obj *apiextensions.CustomResourceDefinition) { func (c *KubernetesAPIApprovalPolicyConformantConditionController) enqueue(obj *apiextensionsv1.CustomResourceDefinition) {
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
if err != nil { if err != nil {
utilruntime.HandleError(fmt.Errorf("Couldn't get key for object %#v: %v", obj, err)) 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{}) { func (c *KubernetesAPIApprovalPolicyConformantConditionController) addCustomResourceDefinition(obj interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Adding %s", castObj.Name) klog.V(4).Infof("Adding %s", castObj.Name)
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *KubernetesAPIApprovalPolicyConformantConditionController) updateCustomResourceDefinition(obj, _ interface{}) { func (c *KubernetesAPIApprovalPolicyConformantConditionController) updateCustomResourceDefinition(obj, _ interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Updating %s", castObj.Name) klog.V(4).Infof("Updating %s", castObj.Name)
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *KubernetesAPIApprovalPolicyConformantConditionController) deleteCustomResourceDefinition(obj interface{}) { func (c *KubernetesAPIApprovalPolicyConformantConditionController) deleteCustomResourceDefinition(obj interface{}) {
castObj, ok := obj.(*apiextensions.CustomResourceDefinition) castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
tombstone, ok := obj.(cache.DeletedFinalStateUnknown) tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
if !ok { if !ok {
klog.Errorf("Couldn't get object from tombstone %#v", obj) klog.Errorf("Couldn't get object from tombstone %#v", obj)
return return
} }
castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
klog.Errorf("Tombstone contained object that is not expected %#v", obj) klog.Errorf("Tombstone contained object that is not expected %#v", obj)
return return

View File

@@ -19,20 +19,20 @@ package apiapproval
import ( import (
"testing" "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" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
func TestCalculateCondition(t *testing.T) { func TestCalculateCondition(t *testing.T) {
noConditionFn := func(t *testing.T, condition *apiextensions.CustomResourceDefinitionCondition) { noConditionFn := func(t *testing.T, condition *apiextensionsv1.CustomResourceDefinitionCondition) {
t.Helper() t.Helper()
if condition != nil { if condition != nil {
t.Fatal(condition) t.Fatal(condition)
} }
} }
verifyCondition := func(status apiextensions.ConditionStatus, message string) 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 *apiextensions.CustomResourceDefinitionCondition) { return func(t *testing.T, condition *apiextensionsv1.CustomResourceDefinitionCondition) {
t.Helper() t.Helper()
if condition == nil { if condition == nil {
t.Fatal("missing condition") t.Fatal("missing condition")
@@ -51,7 +51,7 @@ func TestCalculateCondition(t *testing.T) {
group string group string
annotationValue string annotationValue string
validateCondition func(t *testing.T, condition *apiextensions.CustomResourceDefinitionCondition) validateCondition func(t *testing.T, condition *apiextensionsv1.CustomResourceDefinitionCondition)
}{ }{
{ {
name: "for other group", name: "for other group",
@@ -63,33 +63,33 @@ func TestCalculateCondition(t *testing.T) {
name: "missing annotation", name: "missing annotation",
group: "sigs.k8s.io", group: "sigs.k8s.io",
annotationValue: "", 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", name: "invalid annotation",
group: "sigs.k8s.io", group: "sigs.k8s.io",
annotationValue: "bad value", 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", name: "approved",
group: "sigs.k8s.io", group: "sigs.k8s.io",
annotationValue: "https://github.com/kubernetes/kubernetes/pull/79724", 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", name: "unapproved",
group: "sigs.k8s.io", group: "sigs.k8s.io",
annotationValue: "unapproved for reasons", 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 { for _, test := range tests {
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
crd := &apiextensions.CustomResourceDefinition{ crd := &apiextensionsv1.CustomResourceDefinition{
ObjectMeta: metav1.ObjectMeta{Name: "foo", Annotations: map[string]string{apiextensions.KubeAPIApprovedAnnotation: test.annotationValue}}, ObjectMeta: metav1.ObjectMeta{Name: "foo", Annotations: map[string]string{apiextensionsv1.KubeAPIApprovedAnnotation: test.annotationValue}},
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Group: test.group, Group: test.group,
}, },
} }

View File

@@ -28,7 +28,7 @@ import (
"k8s.io/klog" "k8s.io/klog"
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" 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" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
listers "k8s.io/apiextensions-apiserver/pkg/client/listers/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 return err
} }
if !apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensions.NamesAccepted) || if !apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensionsv1.NamesAccepted) ||
apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensions.Established) { apiextensionshelpers.IsCRDConditionTrue(cachedCRD, apiextensionsv1.Established) {
return nil return nil
} }
crd := cachedCRD.DeepCopy() crd := cachedCRD.DeepCopy()
establishedCondition := apiextensions.CustomResourceDefinitionCondition{ establishedCondition := apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "InitialNamesAccepted", Reason: "InitialNamesAccepted",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
} }

View File

@@ -37,7 +37,7 @@ import (
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" 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" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
@@ -77,7 +77,7 @@ type ListerCollectionDeleter interface {
type CRClientGetter interface { type CRClientGetter interface {
// GetCustomResourceListerCollectionDeleter gets the ListerCollectionDeleter for the given CRD // GetCustomResourceListerCollectionDeleter gets the ListerCollectionDeleter for the given CRD
// UID. // UID.
GetCustomResourceListerCollectionDeleter(crd *apiextensions.CustomResourceDefinition) (ListerCollectionDeleter, error) GetCustomResourceListerCollectionDeleter(crd *apiextensionsv1.CustomResourceDefinition) (ListerCollectionDeleter, error)
} }
// NewCRDFinalizer creates a new CRDFinalizer. // NewCRDFinalizer creates a new CRDFinalizer.
@@ -114,16 +114,16 @@ func (c *CRDFinalizer) sync(key string) error {
} }
// no work to do // no work to do
if cachedCRD.DeletionTimestamp.IsZero() || !apiextensionshelpers.CRDHasFinalizer(cachedCRD, apiextensions.CustomResourceCleanupFinalizer) { if cachedCRD.DeletionTimestamp.IsZero() || !apiextensionshelpers.CRDHasFinalizer(cachedCRD, apiextensionsv1.CustomResourceCleanupFinalizer) {
return nil return nil
} }
crd := cachedCRD.DeepCopy() crd := cachedCRD.DeepCopy()
// update the status condition. This cleanup could take a while. // update the status condition. This cleanup could take a while.
apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ apiextensionshelpers.SetCRDCondition(crd, apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "InstanceDeletionInProgress", Reason: "InstanceDeletionInProgress",
Message: "CustomResource deletion is in progress", 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. // 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}] { 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 // Skip deletion, explain why, and proceed to remove the finalizer and delete the CRD
apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ apiextensionshelpers.SetCRDCondition(crd, apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "OverlappingBuiltInResource", Reason: "OverlappingBuiltInResource",
Message: "instances overlap with built-in resources in storage", 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) cond, deleteErr := c.deleteInstances(crd)
apiextensionshelpers.SetCRDCondition(crd, cond) apiextensionshelpers.SetCRDCondition(crd, cond)
if deleteErr != nil { if deleteErr != nil {
@@ -156,15 +156,15 @@ func (c *CRDFinalizer) sync(key string) error {
return deleteErr return deleteErr
} }
} else { } else {
apiextensionshelpers.SetCRDCondition(crd, apiextensions.CustomResourceDefinitionCondition{ apiextensionshelpers.SetCRDCondition(crd, apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "NeverEstablished", Reason: "NeverEstablished",
Message: "resource was never established", Message: "resource was never established",
}) })
} }
apiextensionshelpers.CRDRemoveFinalizer(crd, apiextensions.CustomResourceCleanupFinalizer) apiextensionshelpers.CRDRemoveFinalizer(crd, apiextensionsv1.CustomResourceCleanupFinalizer)
_, err = c.crdClient.CustomResourceDefinitions().UpdateStatus(crd) _, err = c.crdClient.CustomResourceDefinitions().UpdateStatus(crd)
if apierrors.IsNotFound(err) || apierrors.IsConflict(err) { if apierrors.IsNotFound(err) || apierrors.IsConflict(err) {
// deleted or changed in the meantime, we'll get called again // deleted or changed in the meantime, we'll get called again
@@ -173,16 +173,16 @@ func (c *CRDFinalizer) sync(key string) error {
return err 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 // 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 // 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. // directly to the storage instead. Since we control the storage, we know that delete collection works.
crClient, err := c.crClientGetter.GetCustomResourceListerCollectionDeleter(crd) crClient, err := c.crClientGetter.GetCustomResourceListerCollectionDeleter(crd)
if err != nil { 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) 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{ return apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "InstanceDeletionFailed", Reason: "InstanceDeletionFailed",
Message: fmt.Sprintf("could not list instances: %v", err), Message: fmt.Sprintf("could not list instances: %v", err),
}, err }, err
@@ -191,9 +191,9 @@ func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefiniti
ctx := genericapirequest.NewContext() ctx := genericapirequest.NewContext()
allResources, err := crClient.List(ctx, nil) allResources, err := crClient.List(ctx, nil)
if err != nil { if err != nil {
return apiextensions.CustomResourceDefinitionCondition{ return apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "InstanceDeletionFailed", Reason: "InstanceDeletionFailed",
Message: fmt.Sprintf("could not list instances: %v", err), Message: fmt.Sprintf("could not list instances: %v", err),
}, err }, err
@@ -219,9 +219,9 @@ func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefiniti
} }
} }
if deleteError := utilerrors.NewAggregate(deleteErrors); deleteError != nil { if deleteError := utilerrors.NewAggregate(deleteErrors); deleteError != nil {
return apiextensions.CustomResourceDefinitionCondition{ return apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "InstanceDeletionFailed", Reason: "InstanceDeletionFailed",
Message: fmt.Sprintf("could not issue all deletes: %v", deleteError), Message: fmt.Sprintf("could not issue all deletes: %v", deleteError),
}, deleteError }, deleteError
@@ -242,16 +242,16 @@ func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefiniti
return false, nil return false, nil
}) })
if err != nil { if err != nil {
return apiextensions.CustomResourceDefinitionCondition{ return apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "InstanceDeletionCheck", Reason: "InstanceDeletionCheck",
Message: fmt.Sprintf("could not confirm zero CustomResources remaining: %v", err), Message: fmt.Sprintf("could not confirm zero CustomResources remaining: %v", err),
}, err }, err
} }
return apiextensions.CustomResourceDefinitionCondition{ return apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Terminating, Type: apiextensionsv1.Terminating,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "InstanceDeletionCompleted", Reason: "InstanceDeletionCompleted",
Message: "removed all instances", Message: "removed all instances",
}, nil }, nil
@@ -300,7 +300,7 @@ func (c *CRDFinalizer) processNextWorkItem() bool {
return true return true
} }
func (c *CRDFinalizer) enqueue(obj *apiextensions.CustomResourceDefinition) { func (c *CRDFinalizer) enqueue(obj *apiextensionsv1.CustomResourceDefinition) {
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
if err != nil { if err != nil {
utilruntime.HandleError(fmt.Errorf("couldn't get key for object %#v: %v", obj, err)) 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{}) { func (c *CRDFinalizer) addCustomResourceDefinition(obj interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
// only queue deleted things // 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) c.enqueue(castObj)
} }
} }
func (c *CRDFinalizer) updateCustomResourceDefinition(oldObj, newObj interface{}) { func (c *CRDFinalizer) updateCustomResourceDefinition(oldObj, newObj interface{}) {
oldCRD := oldObj.(*apiextensions.CustomResourceDefinition) oldCRD := oldObj.(*apiextensionsv1.CustomResourceDefinition)
newCRD := newObj.(*apiextensions.CustomResourceDefinition) newCRD := newObj.(*apiextensionsv1.CustomResourceDefinition)
// only queue deleted things that haven't been finalized by us // 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 return
} }
@@ -340,8 +340,8 @@ func (c *CRDFinalizer) updateCustomResourceDefinition(oldObj, newObj interface{}
newCopy := newCRD.DeepCopy() newCopy := newCRD.DeepCopy()
oldCopy.ResourceVersion = "" oldCopy.ResourceVersion = ""
newCopy.ResourceVersion = "" newCopy.ResourceVersion = ""
apiextensionshelpers.RemoveCRDCondition(oldCopy, apiextensions.Terminating) apiextensionshelpers.RemoveCRDCondition(oldCopy, apiextensionsv1.Terminating)
apiextensionshelpers.RemoveCRDCondition(newCopy, apiextensions.Terminating) apiextensionshelpers.RemoveCRDCondition(newCopy, apiextensionsv1.Terminating)
if !reflect.DeepEqual(oldCopy, newCopy) { if !reflect.DeepEqual(oldCopy, newCopy) {
c.enqueue(newCRD) c.enqueue(newCRD)

View File

@@ -32,7 +32,7 @@ import (
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers"
apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" 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" "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/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" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
@@ -81,10 +81,10 @@ func NewConditionController(
return c return c
} }
func calculateCondition(in *apiextensions.CustomResourceDefinition) *apiextensions.CustomResourceDefinitionCondition { func calculateCondition(in *apiextensionsv1.CustomResourceDefinition) *apiextensionsv1.CustomResourceDefinitionCondition {
cond := &apiextensions.CustomResourceDefinitionCondition{ cond := &apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.NonStructuralSchema, Type: apiextensionsv1.NonStructuralSchema,
Status: apiextensions.ConditionUnknown, Status: apiextensionsv1.ConditionUnknown,
} }
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
@@ -95,7 +95,7 @@ func calculateCondition(in *apiextensions.CustomResourceDefinition) *apiextensio
} }
internalSchema := &apiextensionsinternal.CustomResourceValidation{} 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) klog.Errorf("failed to convert CRD validation to internal version: %v", err)
continue continue
} }
@@ -115,7 +115,7 @@ func calculateCondition(in *apiextensions.CustomResourceDefinition) *apiextensio
return nil return nil
} }
cond.Status = apiextensions.ConditionTrue cond.Status = apiextensionsv1.ConditionTrue
cond.Reason = "Violations" cond.Reason = "Violations"
cond.Message = allErrs.ToAggregate().Error() cond.Message = allErrs.ToAggregate().Error()
@@ -141,7 +141,7 @@ func (c *ConditionController) sync(key string) error {
// check old condition // check old condition
cond := calculateCondition(inCustomResourceDefinition) cond := calculateCondition(inCustomResourceDefinition)
old := apiextensionshelpers.FindCRDCondition(inCustomResourceDefinition, apiextensions.NonStructuralSchema) old := apiextensionshelpers.FindCRDCondition(inCustomResourceDefinition, apiextensionsv1.NonStructuralSchema)
if cond == nil && old == nil { if cond == nil && old == nil {
return nil return nil
@@ -153,7 +153,7 @@ func (c *ConditionController) sync(key string) error {
// update condition // update condition
crd := inCustomResourceDefinition.DeepCopy() crd := inCustomResourceDefinition.DeepCopy()
if cond == nil { if cond == nil {
apiextensionshelpers.RemoveCRDCondition(crd, apiextensions.NonStructuralSchema) apiextensionshelpers.RemoveCRDCondition(crd, apiextensionsv1.NonStructuralSchema)
} else { } else {
cond.LastTransitionTime = metav1.NewTime(time.Now()) cond.LastTransitionTime = metav1.NewTime(time.Now())
apiextensionshelpers.SetCRDCondition(crd, *cond) apiextensionshelpers.SetCRDCondition(crd, *cond)
@@ -221,7 +221,7 @@ func (c *ConditionController) processNextWorkItem() bool {
return true return true
} }
func (c *ConditionController) enqueue(obj *apiextensions.CustomResourceDefinition) { func (c *ConditionController) enqueue(obj *apiextensionsv1.CustomResourceDefinition) {
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
if err != nil { if err != nil {
utilruntime.HandleError(fmt.Errorf("couldn't get key for object %#v: %v", obj, err)) 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{}) { func (c *ConditionController) addCustomResourceDefinition(obj interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Adding %s", castObj.Name) klog.V(4).Infof("Adding %s", castObj.Name)
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *ConditionController) updateCustomResourceDefinition(obj, _ interface{}) { func (c *ConditionController) updateCustomResourceDefinition(obj, _ interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Updating %s", castObj.Name) klog.V(4).Infof("Updating %s", castObj.Name)
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *ConditionController) deleteCustomResourceDefinition(obj interface{}) { func (c *ConditionController) deleteCustomResourceDefinition(obj interface{}) {
castObj, ok := obj.(*apiextensions.CustomResourceDefinition) castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
tombstone, ok := obj.(cache.DeletedFinalStateUnknown) tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
if !ok { if !ok {
klog.Errorf("Couldn't get object from tombstone %#v", obj) klog.Errorf("Couldn't get object from tombstone %#v", obj)
return return
} }
castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
klog.Errorf("Tombstone contained object that is not expected %#v", obj) klog.Errorf("Tombstone contained object that is not expected %#v", obj)
return return

View File

@@ -28,7 +28,7 @@ import (
v1 "k8s.io/api/autoscaling/v1" v1 "k8s.io/api/autoscaling/v1"
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers"
apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" 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" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation"
structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
openapiv2 "k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2" 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 // 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 var schema *structuralschema.Structural
s, err := apiextensionshelpers.GetSchemaForVersion(crd, version) s, err := apiextensionshelpers.GetSchemaForVersion(crd, version)
if err != nil { if err != nil {
@@ -95,7 +95,7 @@ func BuildSwagger(crd *apiextensions.CustomResourceDefinition, version string, o
if s != nil && s.OpenAPIV3Schema != nil { if s != nil && s.OpenAPIV3Schema != nil {
internalCRDSchema := &apiextensionsinternal.CustomResourceValidation{} 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) return nil, fmt.Errorf("failed converting CRD validation to internal version: %v", err)
} }
if !validation.SchemaHasInvalidTypes(internalCRDSchema.OpenAPIV3Schema) { 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{ b := &builder{
schema: &spec.Schema{ schema: &spec.Schema{
SchemaProps: spec.SchemaProps{Type: []string{"object"}}, SchemaProps: spec.SchemaProps{Type: []string{"object"}},
@@ -518,7 +518,7 @@ func newBuilder(crd *apiextensions.CustomResourceDefinition, version string, sch
listKind: crd.Spec.Names.ListKind, listKind: crd.Spec.Names.ListKind,
plural: crd.Spec.Names.Plural, plural: crd.Spec.Names.Plural,
} }
if crd.Spec.Scope == apiextensions.NamespaceScoped { if crd.Spec.Scope == apiextensionsv1.NamespaceScoped {
b.namespaced = true b.namespaced = true
} }

View File

@@ -25,7 +25,7 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" 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" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/json"
@@ -352,12 +352,12 @@ func TestNewBuilder(t *testing.T) {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
var schema *structuralschema.Structural var schema *structuralschema.Structural
if len(tt.schema) > 0 { if len(tt.schema) > 0 {
v1beta1Schema := &apiextensions.JSONSchemaProps{} v1beta1Schema := &apiextensionsv1.JSONSchemaProps{}
if err := json.Unmarshal([]byte(tt.schema), &v1beta1Schema); err != nil { if err := json.Unmarshal([]byte(tt.schema), &v1beta1Schema); err != nil {
t.Fatal(err) t.Fatal(err)
} }
internalSchema := &apiextensionsinternal.JSONSchemaProps{} 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 var err error
schema, err = structuralschema.NewStructural(internalSchema) schema, err = structuralschema.NewStructural(internalSchema)
if err != nil { if err != nil {
@@ -369,21 +369,21 @@ func TestNewBuilder(t *testing.T) {
schema = schema.Unfold() schema = schema.Unfold()
} }
got := newBuilder(&apiextensions.CustomResourceDefinition{ got := newBuilder(&apiextensionsv1.CustomResourceDefinition{
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Group: "bar.k8s.io", Group: "bar.k8s.io",
Versions: []apiextensions.CustomResourceDefinitionVersion{ Versions: []apiextensionsv1.CustomResourceDefinitionVersion{
{ {
Name: "v1", Name: "v1",
}, },
}, },
Names: apiextensions.CustomResourceDefinitionNames{ Names: apiextensionsv1.CustomResourceDefinitionNames{
Plural: "foos", Plural: "foos",
Singular: "foo", Singular: "foo",
Kind: "Foo", Kind: "Foo",
ListKind: "FooList", ListKind: "FooList",
}, },
Scope: apiextensions.NamespaceScoped, Scope: apiextensionsv1.NamespaceScoped,
}, },
}, "v1", schema, tt.v2) }, "v1", schema, tt.v2)
@@ -434,7 +434,7 @@ func TestCRDRouteParameterBuilder(t *testing.T) {
testCRDResourceName := "foos" testCRDResourceName := "foos"
testCases := []struct { testCases := []struct {
scope apiextensions.ResourceScope scope apiextensionsv1.ResourceScope
paths map[string]struct { paths map[string]struct {
expectNamespaceParam bool expectNamespaceParam bool
expectNameParam bool expectNameParam bool
@@ -442,7 +442,7 @@ func TestCRDRouteParameterBuilder(t *testing.T) {
} }
}{ }{
{ {
scope: apiextensions.NamespaceScoped, scope: apiextensionsv1.NamespaceScoped,
paths: map[string]struct { paths: map[string]struct {
expectNamespaceParam bool expectNamespaceParam bool
expectNameParam bool expectNameParam bool
@@ -456,7 +456,7 @@ func TestCRDRouteParameterBuilder(t *testing.T) {
}, },
}, },
{ {
scope: apiextensions.ClusterScoped, scope: apiextensionsv1.ClusterScoped,
paths: map[string]struct { paths: map[string]struct {
expectNamespaceParam bool expectNamespaceParam bool
expectNameParam bool expectNameParam bool
@@ -471,20 +471,20 @@ func TestCRDRouteParameterBuilder(t *testing.T) {
} }
for _, testCase := range testCases { for _, testCase := range testCases {
testNamespacedCRD := &apiextensions.CustomResourceDefinition{ testNamespacedCRD := &apiextensionsv1.CustomResourceDefinition{
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Scope: testCase.scope, Scope: testCase.scope,
Group: testCRDGroup, Group: testCRDGroup,
Names: apiextensions.CustomResourceDefinitionNames{ Names: apiextensionsv1.CustomResourceDefinitionNames{
Kind: testCRDKind, Kind: testCRDKind,
Plural: testCRDResourceName, Plural: testCRDResourceName,
}, },
Versions: []apiextensions.CustomResourceDefinitionVersion{ Versions: []apiextensionsv1.CustomResourceDefinitionVersion{
{ {
Name: testCRDVersion, Name: testCRDVersion,
Subresources: &apiextensions.CustomResourceSubresources{ Subresources: &apiextensionsv1.CustomResourceSubresources{
Status: &apiextensions.CustomResourceSubresourceStatus{}, Status: &apiextensionsv1.CustomResourceSubresourceStatus{},
Scale: &apiextensions.CustomResourceSubresourceScale{}, Scale: &apiextensionsv1.CustomResourceSubresourceScale{},
}, },
}, },
}, },
@@ -631,13 +631,13 @@ func TestBuildSwagger(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
var validation *apiextensions.CustomResourceValidation var validation *apiextensionsv1.CustomResourceValidation
if len(tt.schema) > 0 { if len(tt.schema) > 0 {
v1Schema := &apiextensions.JSONSchemaProps{} v1Schema := &apiextensionsv1.JSONSchemaProps{}
if err := json.Unmarshal([]byte(tt.schema), &v1Schema); err != nil { if err := json.Unmarshal([]byte(tt.schema), &v1Schema); err != nil {
t.Fatal(err) t.Fatal(err)
} }
validation = &apiextensions.CustomResourceValidation{ validation = &apiextensionsv1.CustomResourceValidation{
OpenAPIV3Schema: v1Schema, OpenAPIV3Schema: v1Schema,
} }
} }
@@ -646,22 +646,22 @@ func TestBuildSwagger(t *testing.T) {
} }
// TODO: mostly copied from the test above. reuse code to cleanup // TODO: mostly copied from the test above. reuse code to cleanup
got, err := BuildSwagger(&apiextensions.CustomResourceDefinition{ got, err := BuildSwagger(&apiextensionsv1.CustomResourceDefinition{
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Group: "bar.k8s.io", Group: "bar.k8s.io",
Versions: []apiextensions.CustomResourceDefinitionVersion{ Versions: []apiextensionsv1.CustomResourceDefinitionVersion{
{ {
Name: "v1", Name: "v1",
Schema: validation, Schema: validation,
}, },
}, },
Names: apiextensions.CustomResourceDefinitionNames{ Names: apiextensionsv1.CustomResourceDefinitionNames{
Plural: "foos", Plural: "foos",
Singular: "foo", Singular: "foo",
Kind: "Foo", Kind: "Foo",
ListKind: "FooList", ListKind: "FooList",
}, },
Scope: apiextensions.NamespaceScoped, Scope: apiextensionsv1.NamespaceScoped,
}, },
}, "v1", tt.opts) }, "v1", tt.opts)
if err != nil { if err != nil {

View File

@@ -34,7 +34,7 @@ import (
"k8s.io/kube-openapi/pkg/handler" "k8s.io/kube-openapi/pkg/handler"
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" 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" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
"k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder" "k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder"
@@ -100,7 +100,7 @@ func (c *Controller) Run(staticSpec *spec.Swagger, openAPIService *handler.OpenA
return return
} }
for _, crd := range crds { for _, crd := range crds {
if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensions.Established) { if !apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Established) {
continue continue
} }
newSpecs, changed, err := buildVersionSpecs(crd, nil) 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? // 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 { if _, found := c.crdSpecs[name]; !found {
return nil return nil
} }
@@ -195,7 +195,7 @@ func (c *Controller) sync(name string) error {
return c.updateSpecLocked() 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{} newSpecs := map[string]*spec.Swagger{}
anyChanged := false anyChanged := false
for _, v := range crd.Spec.Versions { for _, v := range crd.Spec.Versions {
@@ -235,26 +235,26 @@ func (c *Controller) updateSpecLocked() error {
} }
func (c *Controller) addCustomResourceDefinition(obj interface{}) { func (c *Controller) addCustomResourceDefinition(obj interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Adding customresourcedefinition %s", castObj.Name) klog.V(4).Infof("Adding customresourcedefinition %s", castObj.Name)
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *Controller) updateCustomResourceDefinition(oldObj, newObj interface{}) { func (c *Controller) updateCustomResourceDefinition(oldObj, newObj interface{}) {
castNewObj := newObj.(*apiextensions.CustomResourceDefinition) castNewObj := newObj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Updating customresourcedefinition %s", castNewObj.Name) klog.V(4).Infof("Updating customresourcedefinition %s", castNewObj.Name)
c.enqueue(castNewObj) c.enqueue(castNewObj)
} }
func (c *Controller) deleteCustomResourceDefinition(obj interface{}) { func (c *Controller) deleteCustomResourceDefinition(obj interface{}) {
castObj, ok := obj.(*apiextensions.CustomResourceDefinition) castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
tombstone, ok := obj.(cache.DeletedFinalStateUnknown) tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
if !ok { if !ok {
klog.Errorf("Couldn't get object from tombstone %#v", obj) klog.Errorf("Couldn't get object from tombstone %#v", obj)
return return
} }
castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
klog.Errorf("Tombstone contained object that is not expected %#v", obj) klog.Errorf("Tombstone contained object that is not expected %#v", obj)
return return
@@ -264,6 +264,6 @@ func (c *Controller) deleteCustomResourceDefinition(obj interface{}) {
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *Controller) enqueue(obj *apiextensions.CustomResourceDefinition) { func (c *Controller) enqueue(obj *apiextensionsv1.CustomResourceDefinition) {
c.queue.Add(obj.Name) c.queue.Add(obj.Name)
} }

View File

@@ -35,7 +35,7 @@ import (
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" 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" client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
listers "k8s.io/apiextensions-apiserver/pkg/client/listers/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 item := curr
obj, exists, err := c.crdMutationCache.GetByKey(curr.Name) obj, exists, err := c.crdMutationCache.GetByKey(curr.Name)
if exists && err == nil { if exists && err == nil {
item = obj.(*apiextensions.CustomResourceDefinition) item = obj.(*apiextensionsv1.CustomResourceDefinition)
} }
allResources.Insert(item.Status.AcceptedNames.Plural) allResources.Insert(item.Status.AcceptedNames.Plural)
@@ -118,13 +118,13 @@ func (c *NamingConditionController) getAcceptedNamesForGroup(group string) (allR
return allResources, allKinds 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 // Get the names that have already been claimed
allResources, allKinds := c.getAcceptedNamesForGroup(in.Spec.Group) allResources, allKinds := c.getAcceptedNamesForGroup(in.Spec.Group)
namesAcceptedCondition := apiextensions.CustomResourceDefinitionCondition{ namesAcceptedCondition := apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionUnknown, Status: apiextensionsv1.ConditionUnknown,
} }
requestedNames := in.Spec.Names 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. // 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 // Continue on errors so that the status is the best match possible
if err := equalToAcceptedOrFresh(requestedNames.Plural, acceptedNames.Plural, allResources); err != nil { if err := equalToAcceptedOrFresh(requestedNames.Plural, acceptedNames.Plural, allResources); err != nil {
namesAcceptedCondition.Status = apiextensions.ConditionFalse namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse
namesAcceptedCondition.Reason = "PluralConflict" namesAcceptedCondition.Reason = "PluralConflict"
namesAcceptedCondition.Message = err.Error() namesAcceptedCondition.Message = err.Error()
} else { } else {
newNames.Plural = requestedNames.Plural newNames.Plural = requestedNames.Plural
} }
if err := equalToAcceptedOrFresh(requestedNames.Singular, acceptedNames.Singular, allResources); err != nil { if err := equalToAcceptedOrFresh(requestedNames.Singular, acceptedNames.Singular, allResources); err != nil {
namesAcceptedCondition.Status = apiextensions.ConditionFalse namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse
namesAcceptedCondition.Reason = "SingularConflict" namesAcceptedCondition.Reason = "SingularConflict"
namesAcceptedCondition.Message = err.Error() namesAcceptedCondition.Message = err.Error()
} else { } else {
@@ -161,7 +161,7 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension
} }
if err := utilerrors.NewAggregate(errs); err != nil { if err := utilerrors.NewAggregate(errs); err != nil {
namesAcceptedCondition.Status = apiextensions.ConditionFalse namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse
namesAcceptedCondition.Reason = "ShortNamesConflict" namesAcceptedCondition.Reason = "ShortNamesConflict"
namesAcceptedCondition.Message = err.Error() namesAcceptedCondition.Message = err.Error()
} else { } else {
@@ -170,14 +170,14 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension
} }
if err := equalToAcceptedOrFresh(requestedNames.Kind, acceptedNames.Kind, allKinds); err != nil { if err := equalToAcceptedOrFresh(requestedNames.Kind, acceptedNames.Kind, allKinds); err != nil {
namesAcceptedCondition.Status = apiextensions.ConditionFalse namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse
namesAcceptedCondition.Reason = "KindConflict" namesAcceptedCondition.Reason = "KindConflict"
namesAcceptedCondition.Message = err.Error() namesAcceptedCondition.Message = err.Error()
} else { } else {
newNames.Kind = requestedNames.Kind newNames.Kind = requestedNames.Kind
} }
if err := equalToAcceptedOrFresh(requestedNames.ListKind, acceptedNames.ListKind, allKinds); err != nil { if err := equalToAcceptedOrFresh(requestedNames.ListKind, acceptedNames.ListKind, allKinds); err != nil {
namesAcceptedCondition.Status = apiextensions.ConditionFalse namesAcceptedCondition.Status = apiextensionsv1.ConditionFalse
namesAcceptedCondition.Reason = "ListKindConflict" namesAcceptedCondition.Reason = "ListKindConflict"
namesAcceptedCondition.Message = err.Error() namesAcceptedCondition.Message = err.Error()
} else { } else {
@@ -187,8 +187,8 @@ func (c *NamingConditionController) calculateNamesAndConditions(in *apiextension
newNames.Categories = requestedNames.Categories newNames.Categories = requestedNames.Categories
// if we haven't changed the condition, then our names must be good. // if we haven't changed the condition, then our names must be good.
if namesAcceptedCondition.Status == apiextensions.ConditionUnknown { if namesAcceptedCondition.Status == apiextensionsv1.ConditionUnknown {
namesAcceptedCondition.Status = apiextensions.ConditionTrue namesAcceptedCondition.Status = apiextensionsv1.ConditionTrue
namesAcceptedCondition.Reason = "NoConflicts" namesAcceptedCondition.Reason = "NoConflicts"
namesAcceptedCondition.Message = "no conflicts found" 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. // 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 // At that time the API endpoint handler will serve the endpoint, avoiding a race
// which we had if we set Established to true here. // which we had if we set Established to true here.
establishedCondition := apiextensions.CustomResourceDefinitionCondition{ establishedCondition := apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "NotAccepted", Reason: "NotAccepted",
Message: "not all names are accepted", 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 establishedCondition = *old
} }
if establishedCondition.Status != apiextensions.ConditionTrue && namesAcceptedCondition.Status == apiextensions.ConditionTrue { if establishedCondition.Status != apiextensionsv1.ConditionTrue && namesAcceptedCondition.Status == apiextensionsv1.ConditionTrue {
establishedCondition = apiextensions.CustomResourceDefinitionCondition{ establishedCondition = apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "Installing", Reason: "Installing",
Message: "the initial names have been accepted", 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 // nothing to do if accepted names and NamesAccepted condition didn't change
if reflect.DeepEqual(inCustomResourceDefinition.Status.AcceptedNames, acceptedNames) && 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 return nil
} }
@@ -324,7 +324,7 @@ func (c *NamingConditionController) processNextWorkItem() bool {
return true return true
} }
func (c *NamingConditionController) enqueue(obj *apiextensions.CustomResourceDefinition) { func (c *NamingConditionController) enqueue(obj *apiextensionsv1.CustomResourceDefinition) {
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
if err != nil { if err != nil {
utilruntime.HandleError(fmt.Errorf("couldn't get key for object %#v: %v", obj, err)) 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{}) { func (c *NamingConditionController) addCustomResourceDefinition(obj interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Adding %s", castObj.Name) klog.V(4).Infof("Adding %s", castObj.Name)
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *NamingConditionController) updateCustomResourceDefinition(obj, _ interface{}) { func (c *NamingConditionController) updateCustomResourceDefinition(obj, _ interface{}) {
castObj := obj.(*apiextensions.CustomResourceDefinition) castObj := obj.(*apiextensionsv1.CustomResourceDefinition)
klog.V(4).Infof("Updating %s", castObj.Name) klog.V(4).Infof("Updating %s", castObj.Name)
c.enqueue(castObj) c.enqueue(castObj)
} }
func (c *NamingConditionController) deleteCustomResourceDefinition(obj interface{}) { func (c *NamingConditionController) deleteCustomResourceDefinition(obj interface{}) {
castObj, ok := obj.(*apiextensions.CustomResourceDefinition) castObj, ok := obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
tombstone, ok := obj.(cache.DeletedFinalStateUnknown) tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
if !ok { if !ok {
klog.Errorf("Couldn't get object from tombstone %#v", obj) klog.Errorf("Couldn't get object from tombstone %#v", obj)
return return
} }
castObj, ok = tombstone.Obj.(*apiextensions.CustomResourceDefinition) castObj, ok = tombstone.Obj.(*apiextensionsv1.CustomResourceDefinition)
if !ok { if !ok {
klog.Errorf("Tombstone contained object that is not expected %#v", obj) klog.Errorf("Tombstone contained object that is not expected %#v", obj)
return return

View File

@@ -23,24 +23,24 @@ import (
"time" "time"
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers" 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" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
) )
type crdBuilder struct { type crdBuilder struct {
curr apiextensions.CustomResourceDefinition curr apiextensionsv1.CustomResourceDefinition
} }
func newCRD(name string) *crdBuilder { func newCRD(name string) *crdBuilder {
tokens := strings.SplitN(name, ".", 2) tokens := strings.SplitN(name, ".", 2)
return &crdBuilder{ return &crdBuilder{
curr: apiextensions.CustomResourceDefinition{ curr: apiextensionsv1.CustomResourceDefinition{
ObjectMeta: metav1.ObjectMeta{Name: name}, ObjectMeta: metav1.ObjectMeta{Name: name},
Spec: apiextensions.CustomResourceDefinitionSpec{ Spec: apiextensionsv1.CustomResourceDefinitionSpec{
Group: tokens[1], Group: tokens[1],
Names: apiextensions.CustomResourceDefinitionNames{ Names: apiextensionsv1.CustomResourceDefinitionNames{
Plural: tokens[0], Plural: tokens[0],
}, },
}, },
@@ -68,14 +68,14 @@ func (b *crdBuilder) StatusNames(plural, singular, kind, listKind string, shortN
return b 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) b.curr.Status.Conditions = append(b.curr.Status.Conditions, c)
return b return b
} }
func names(plural, singular, kind, listKind string, shortNames ...string) apiextensions.CustomResourceDefinitionNames { func names(plural, singular, kind, listKind string, shortNames ...string) apiextensionsv1.CustomResourceDefinitionNames {
ret := apiextensions.CustomResourceDefinitionNames{ ret := apiextensionsv1.CustomResourceDefinitionNames{
Plural: plural, Plural: plural,
Singular: singular, Singular: singular,
Kind: kind, Kind: kind,
@@ -85,42 +85,42 @@ func names(plural, singular, kind, listKind string, shortNames ...string) apiext
return ret return ret
} }
func (b *crdBuilder) NewOrDie() *apiextensions.CustomResourceDefinition { func (b *crdBuilder) NewOrDie() *apiextensionsv1.CustomResourceDefinition {
return &b.curr return &b.curr
} }
var acceptedCondition = apiextensions.CustomResourceDefinitionCondition{ var acceptedCondition = apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionTrue, Status: apiextensionsv1.ConditionTrue,
Reason: "NoConflicts", Reason: "NoConflicts",
Message: "no conflicts found", Message: "no conflicts found",
} }
var notAcceptedCondition = apiextensions.CustomResourceDefinitionCondition{ var notAcceptedCondition = apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "NotAccepted", Reason: "NotAccepted",
Message: "not all names are accepted", Message: "not all names are accepted",
} }
var installingCondition = apiextensions.CustomResourceDefinitionCondition{ var installingCondition = apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "Installing", Reason: "Installing",
Message: "the initial names have been accepted", Message: "the initial names have been accepted",
} }
var notEstablishedCondition = apiextensions.CustomResourceDefinitionCondition{ var notEstablishedCondition = apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.Established, Type: apiextensionsv1.Established,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: "NotAccepted", Reason: "NotAccepted",
Message: "not all names are accepted", Message: "not all names are accepted",
} }
func nameConflictCondition(reason, message string) apiextensions.CustomResourceDefinitionCondition { func nameConflictCondition(reason, message string) apiextensionsv1.CustomResourceDefinitionCondition {
return apiextensions.CustomResourceDefinitionCondition{ return apiextensionsv1.CustomResourceDefinitionCondition{
Type: apiextensions.NamesAccepted, Type: apiextensionsv1.NamesAccepted,
Status: apiextensions.ConditionFalse, Status: apiextensionsv1.ConditionFalse,
Reason: reason, Reason: reason,
Message: message, Message: message,
} }
@@ -130,17 +130,17 @@ func TestSync(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
in *apiextensions.CustomResourceDefinition in *apiextensionsv1.CustomResourceDefinition
existing []*apiextensions.CustomResourceDefinition existing []*apiextensionsv1.CustomResourceDefinition
expectedNames apiextensions.CustomResourceDefinitionNames expectedNames apiextensionsv1.CustomResourceDefinitionNames
expectedNameConflictCondition apiextensions.CustomResourceDefinitionCondition expectedNameConflictCondition apiextensionsv1.CustomResourceDefinitionCondition
expectedEstablishedCondition apiextensions.CustomResourceDefinitionCondition expectedEstablishedCondition apiextensionsv1.CustomResourceDefinitionCondition
}{ }{
{ {
name: "first resource", name: "first resource",
in: newCRD("alfa.bravo.com").NewOrDie(), in: newCRD("alfa.bravo.com").NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{}, existing: []*apiextensionsv1.CustomResourceDefinition{},
expectedNames: apiextensions.CustomResourceDefinitionNames{ expectedNames: apiextensionsv1.CustomResourceDefinitionNames{
Plural: "alfa", Plural: "alfa",
}, },
expectedNameConflictCondition: acceptedCondition, expectedNameConflictCondition: acceptedCondition,
@@ -149,7 +149,7 @@ func TestSync(t *testing.T) {
{ {
name: "different groups", name: "different groups",
in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").NewOrDie(), 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(), 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"), 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", 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(), 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(), newCRD("india.bravo.com").StatusNames("india", "alfa", "", "").NewOrDie(),
}, },
expectedNames: names("", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), 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", 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(), 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(), newCRD("india.bravo.com").StatusNames("india", "indias", "", "", "delta-singular").NewOrDie(),
}, },
expectedNames: names("alfa", "", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), 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", 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(), 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(), newCRD("india.bravo.com").StatusNames("india", "indias", "", "", "hotel-shortname-2").NewOrDie(),
}, },
expectedNames: names("alfa", "delta-singular", "echo-kind", "foxtrot-listkind"), expectedNames: names("alfa", "delta-singular", "echo-kind", "foxtrot-listkind"),
@@ -189,7 +189,7 @@ func TestSync(t *testing.T) {
{ {
name: "conflict on kind to listkind", 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(), 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(), newCRD("india.bravo.com").StatusNames("india", "indias", "", "echo-kind").NewOrDie(),
}, },
expectedNames: names("alfa", "delta-singular", "", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), 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", 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(), 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(), newCRD("india.bravo.com").StatusNames("india", "indias", "foxtrot-listkind", "").NewOrDie(),
}, },
expectedNames: names("alfa", "delta-singular", "echo-kind", "", "golf-shortname-1", "hotel-shortname-2"), 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", 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(), 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(), newCRD("india.bravo.com").StatusNames("india", "echo-kind", "", "").NewOrDie(),
}, },
expectedNames: names("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), 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"). 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"). StatusNames("zulu", "yankee-singular", "xray-kind", "whiskey-listkind", "victor-shortname-1", "uniform-shortname-2").
NewOrDie(), NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{ existing: []*apiextensionsv1.CustomResourceDefinition{
newCRD("india.bravo.com").StatusNames("india", "indias", "foxtrot-listkind", "", "delta-singular").NewOrDie(), 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"), 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"). 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"). StatusNames("zulu", "yankee-singular", "xray-kind", "whiskey-listkind", "victor-shortname-1", "uniform-shortname-2").
NewOrDie(), NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{ existing: []*apiextensionsv1.CustomResourceDefinition{
newCRD("india.bravo.com").StatusNames("india", "indias", "foxtrot-listkind", "", "delta-singular", "golf-shortname-1").NewOrDie(), 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"), 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"). 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"). StatusNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").
NewOrDie(), NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{ existing: []*apiextensionsv1.CustomResourceDefinition{
newCRD("alfa.bravo.com"). newCRD("alfa.bravo.com").
SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). 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"). 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"). 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"). StatusNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").
NewOrDie(), NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{ existing: []*apiextensionsv1.CustomResourceDefinition{
newCRD("alfa.bravo.com"). newCRD("alfa.bravo.com").
SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"). 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"). 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", name: "installing before with true condition",
in: newCRD("alfa.bravo.com").Condition(acceptedCondition).NewOrDie(), in: newCRD("alfa.bravo.com").Condition(acceptedCondition).NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{}, existing: []*apiextensionsv1.CustomResourceDefinition{},
expectedNames: apiextensions.CustomResourceDefinitionNames{ expectedNames: apiextensionsv1.CustomResourceDefinitionNames{
Plural: "alfa", Plural: "alfa",
}, },
expectedNameConflictCondition: acceptedCondition, expectedNameConflictCondition: acceptedCondition,
@@ -287,8 +287,8 @@ func TestSync(t *testing.T) {
{ {
name: "not installing before with false condition", name: "not installing before with false condition",
in: newCRD("alfa.bravo.com").Condition(notAcceptedCondition).NewOrDie(), in: newCRD("alfa.bravo.com").Condition(notAcceptedCondition).NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{}, existing: []*apiextensionsv1.CustomResourceDefinition{},
expectedNames: apiextensions.CustomResourceDefinitionNames{ expectedNames: apiextensionsv1.CustomResourceDefinitionNames{
Plural: "alfa", Plural: "alfa",
}, },
expectedNameConflictCondition: acceptedCondition, 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"). in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").
Condition(acceptedCondition). Condition(acceptedCondition).
NewOrDie(), NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{ existing: []*apiextensionsv1.CustomResourceDefinition{
newCRD("india.bravo.com").StatusNames("india", "alfa", "", "").NewOrDie(), newCRD("india.bravo.com").StatusNames("india", "alfa", "", "").NewOrDie(),
}, },
expectedNames: names("", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), 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"). in: newCRD("alfa.bravo.com").SpecNames("alfa", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2").
Condition(notAcceptedCondition). Condition(notAcceptedCondition).
NewOrDie(), NewOrDie(),
existing: []*apiextensions.CustomResourceDefinition{ existing: []*apiextensionsv1.CustomResourceDefinition{
newCRD("india.bravo.com").StatusNames("india", "alfa", "", "").NewOrDie(), newCRD("india.bravo.com").StatusNames("india", "alfa", "", "").NewOrDie(),
}, },
expectedNames: names("", "delta-singular", "echo-kind", "foxtrot-listkind", "golf-shortname-1", "hotel-shortname-2"), 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" etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing"
apiextensionsinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" 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/apiserver"
"k8s.io/apiextensions-apiserver/pkg/crdserverscheme" "k8s.io/apiextensions-apiserver/pkg/crdserverscheme"
"k8s.io/apiextensions-apiserver/pkg/registry/customresource" "k8s.io/apiextensions-apiserver/pkg/registry/customresource"
@@ -76,7 +76,7 @@ func newStorage(t *testing.T) (customresource.CustomResourceStorage, *etcd3testi
status := &apiextensionsinternal.CustomResourceSubresourceStatus{} status := &apiextensionsinternal.CustomResourceSubresourceStatus{}
headers := []apiextensions.CustomResourceColumnDefinition{ headers := []apiextensionsv1.CustomResourceColumnDefinition{
{Name: "Age", Type: "date", JSONPath: ".metadata.creationTimestamp"}, {Name: "Age", Type: "date", JSONPath: ".metadata.creationTimestamp"},
{Name: "Replicas", Type: "integer", JSONPath: ".spec.replicas"}, {Name: "Replicas", Type: "integer", JSONPath: ".spec.replicas"},
{Name: "Missing", Type: "string", JSONPath: ".spec.missing"}, {Name: "Missing", Type: "string", JSONPath: ".spec.missing"},

View File

@@ -23,7 +23,7 @@ import (
"fmt" "fmt"
"reflect" "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" "k8s.io/apimachinery/pkg/api/meta"
metatable "k8s.io/apimachinery/pkg/api/meta/table" metatable "k8s.io/apimachinery/pkg/api/meta/table"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 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, // 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. // 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{ headers := []metav1.TableColumnDefinition{
{Name: "Name", Type: "string", Format: "name", Description: swaggerMetadataDescriptions["name"]}, {Name: "Name", Type: "string", Format: "name", Description: swaggerMetadataDescriptions["name"]},
} }