⚠️ Remove crd apiextensions v1beta1 (#1095)
Some checks failed
Post / coverage (push) Failing after 39m34s
Post / images (amd64) (push) Failing after 8m31s
Post / images (arm64) (push) Failing after 7m55s
Post / image manifest (push) Has been skipped
Post / trigger clusteradm e2e (push) Has been skipped
Scorecard supply-chain security / Scorecard analysis (push) Failing after 1m53s
Close stale issues and PRs / stale (push) Successful in 56s

* Remove crd apiextensions v1beta1

Signed-off-by: zhujian <jiazhu@redhat.com>

* fix unit test

Signed-off-by: zhujian <jiazhu@redhat.com>

---------

Signed-off-by: zhujian <jiazhu@redhat.com>
This commit is contained in:
Jian Zhu
2025-07-30 09:59:42 +08:00
committed by GitHub
parent 9311ed7abf
commit aa660678a4
6 changed files with 2 additions and 118 deletions

View File

@@ -11,7 +11,6 @@ import (
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/client-go/kubernetes/scheme"
@@ -32,7 +31,6 @@ var chartScheme = runtime.NewScheme()
func init() {
_ = scheme.AddToScheme(chartScheme)
_ = apiextensionsv1.AddToScheme(chartScheme)
_ = apiextensionsv1beta1.AddToScheme(chartScheme)
_ = operatorv1.AddToScheme(chartScheme)
decoder = serializer.NewCodecFactory(chartScheme).UniversalDeserializer()

View File

@@ -19,7 +19,6 @@ import (
corev1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
"k8s.io/apimachinery/pkg/api/equality"
"k8s.io/apimachinery/pkg/api/errors"
@@ -87,7 +86,6 @@ var (
func init() {
utilruntime.Must(api.InstallKube(genericScheme))
utilruntime.Must(apiextensionsv1beta1.AddToScheme(genericScheme))
utilruntime.Must(apiextensionsv1.AddToScheme(genericScheme))
utilruntime.Must(apiregistrationv1.AddToScheme(genericScheme))
utilruntime.Must(admissionv1.AddToScheme(genericScheme))
@@ -137,12 +135,6 @@ func CleanUpStaticObject(
} else {
err = apiExtensionClient.ApiextensionsV1().CustomResourceDefinitions().Delete(ctx, t.Name, metav1.DeleteOptions{})
}
case *apiextensionsv1beta1.CustomResourceDefinition:
if apiExtensionClient == nil {
err = fmt.Errorf("apiExtensionClient is nil")
} else {
err = apiExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().Delete(ctx, t.Name, metav1.DeleteOptions{})
}
case *apiregistrationv1.APIService:
if apiRegistrationClient == nil {
err = fmt.Errorf("apiRegistrationClient is nil")
@@ -516,8 +508,6 @@ func GenerateRelatedResource(objBytes []byte) (operatorapiv1.RelatedResourceMeta
relatedResource = newRelatedResource(rbacv1.SchemeGroupVersion.WithResource("roles"), requiredObj)
case *rbacv1.RoleBinding:
relatedResource = newRelatedResource(rbacv1.SchemeGroupVersion.WithResource("rolebindings"), requiredObj)
case *apiextensionsv1beta1.CustomResourceDefinition:
relatedResource = newRelatedResource(apiextensionsv1beta1.SchemeGroupVersion.WithResource("customresourcedefinitions"), requiredObj)
case *apiextensionsv1.CustomResourceDefinition:
relatedResource = newRelatedResource(apiextensionsv1.SchemeGroupVersion.WithResource("customresourcedefinitions"), requiredObj)
default:

View File

@@ -304,7 +304,7 @@ func TestDeleteStaticObject(t *testing.T) {
"secret": newUnstructured(
"v1", "Secret", "ns1", "n1", map[string]interface{}{"data": map[string]interface{}{"key1": []byte("key1")}}),
"crd": newUnstructured(
"apiextensions.k8s.io/v1beta1", "CustomResourceDefinition", "", "", map[string]interface{}{}),
"apiextensions.k8s.io/v1", "CustomResourceDefinition", "", "", map[string]interface{}{}),
"kind1": newUnstructured(
"v1", "Kind1", "ns1", "n1", map[string]interface{}{"spec": map[string]interface{}{"key1": []byte("key1")}}),
}

View File

@@ -9,7 +9,6 @@ import (
"github.com/openshift/library-go/pkg/operator/resource/resourceapply"
"github.com/openshift/library-go/pkg/operator/resource/resourcemerge"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -41,11 +40,10 @@ var (
func init() {
utilruntime.Must(apiextensionsv1.AddToScheme(genericScheme))
utilruntime.Must(apiextensionsv1beta1.AddToScheme(genericScheme))
}
type CRD interface {
*apiextensionsv1.CustomResourceDefinition | *apiextensionsv1beta1.CustomResourceDefinition
*apiextensionsv1.CustomResourceDefinition
}
type Manager[T CRD] struct {
@@ -284,10 +282,3 @@ func EqualV1(old, new *apiextensionsv1.CustomResourceDefinition) bool {
resourcemerge.EnsureCustomResourceDefinitionV1(modified, old, *new)
return !*modified
}
func EqualV1Beta1(old, new *apiextensionsv1beta1.CustomResourceDefinition) bool {
modified := pointer.Bool(false)
resourcemerge.EnsureCustomResourceDefinitionV1Beta1(modified, old, *new)
return !*modified
}

View File

@@ -12,7 +12,6 @@ import (
"testing"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
fakeapiextensions "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/fake"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -106,80 +105,6 @@ func TestApplyV1CRD(t *testing.T) {
}
}
func TestApplyV1Beta1CRD(t *testing.T) {
cases := []struct {
name string
desiredVersion string
requiredCRDs []runtime.Object
existingCRDs []runtime.Object
verify func(t *testing.T, actions []clienttesting.Action)
}{
{
name: "create crd",
desiredVersion: "v0.9.0",
requiredCRDs: []runtime.Object{newV1Beta1CRD("foo", "")},
existingCRDs: []runtime.Object{},
verify: func(t *testing.T, actions []clienttesting.Action) {
testingcommon.AssertActions(t, actions, "get", "create")
},
},
{
name: "update crd",
desiredVersion: "v0.9.0-16-g889bd8b",
requiredCRDs: []runtime.Object{newV1Beta1CRD("foo", "")},
existingCRDs: []runtime.Object{newV1Beta1CRD("foo", "v0.8.0")},
verify: func(t *testing.T, actions []clienttesting.Action) {
testingcommon.AssertActions(t, actions, "get", "update")
obj := actions[1].(clienttesting.UpdateActionImpl).Object
assertCRDVersion(t, obj, "0.9.0-16-g889bd8b")
},
},
{
name: "update crd from none",
desiredVersion: "v0.9.0-16-g889bd8b",
requiredCRDs: []runtime.Object{newV1Beta1CRD("foo", "")},
existingCRDs: []runtime.Object{newV1Beta1CRD("foo", "")},
verify: func(t *testing.T, actions []clienttesting.Action) {
testingcommon.AssertActions(t, actions, "get", "update")
obj := actions[1].(clienttesting.UpdateActionImpl).Object
assertCRDVersion(t, obj, "0.9.0-16-g889bd8b")
},
},
{
name: "noop crd",
desiredVersion: "v0.8.0-16-g889bd8b",
requiredCRDs: []runtime.Object{newV1Beta1CRD("foo", "")},
existingCRDs: []runtime.Object{newV1Beta1CRD("foo", "v0.9.0")},
verify: func(t *testing.T, actions []clienttesting.Action) {
testingcommon.AssertActions(t, actions, "get")
},
},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
client := fakeapiextensions.NewSimpleClientset(c.existingCRDs...)
manager := NewManager[*apiextensionsv1beta1.CustomResourceDefinition](client.ApiextensionsV1beta1().CustomResourceDefinitions(), EqualV1Beta1)
v, _ := versionutil.ParseSemantic(c.desiredVersion)
manager.version = v
var indices []string
for i := range c.requiredCRDs {
indices = append(indices, fmt.Sprintf("%d", i))
}
err := manager.Apply(context.TODO(), func(index string) ([]byte, error) {
i, _ := strconv.Atoi(index)
return json.Marshal(c.requiredCRDs[i])
}, indices...)
if err != nil {
t.Errorf("apply error: %v", err)
}
c.verify(t, client.Actions())
})
}
}
func TestClean(t *testing.T) {
cases := []struct {
name string
@@ -263,23 +188,6 @@ func TestClean(t *testing.T) {
}
}
func newV1Beta1CRD(name, version string) *apiextensionsv1beta1.CustomResourceDefinition {
crd := &apiextensionsv1beta1.CustomResourceDefinition{
TypeMeta: metav1.TypeMeta{
APIVersion: "apiextensions.k8s.io/v1beta1",
Kind: "CustomResourceDefinition",
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
},
}
if len(version) > 0 {
crd.Annotations = map[string]string{versionAnnotationKey: version}
}
return crd
}
func newV1CRD(name, version string) *apiextensionsv1.CustomResourceDefinition {
crd := &apiextensionsv1.CustomResourceDefinition{
TypeMeta: metav1.TypeMeta{

View File

@@ -15,7 +15,6 @@ import (
"github.com/openshift/library-go/pkg/operator/resource/resourcehelper"
"github.com/openshift/library-go/pkg/operator/resource/resourcemerge"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -45,8 +44,6 @@ var (
)
func init() {
// add apiextensions v1beta1 to scheme to support CustomResourceDefinition v1beta1
_ = apiextensionsv1beta1.AddToScheme(genericScheme)
_ = apiextensionsv1.AddToScheme(genericScheme)
}