mirror of
https://github.com/open-cluster-management-io/ocm.git
synced 2026-02-14 18:09:57 +00:00
✨ Add addon conversion webhook for v1alpha1/v1beta1 API migration (#1289)
Some checks failed
Post / images (amd64, addon-manager) (push) Failing after 46s
Post / images (amd64, placement) (push) Failing after 41s
Post / images (amd64, registration-operator) (push) Failing after 39s
Post / images (amd64, work) (push) Failing after 42s
Post / images (arm64, addon-manager) (push) Failing after 39s
Post / images (arm64, placement) (push) Failing after 39s
Post / images (arm64, registration) (push) Failing after 40s
Post / images (arm64, registration-operator) (push) Failing after 42s
Post / images (arm64, work) (push) Failing after 39s
Post / images (amd64, registration) (push) Failing after 7m46s
Post / image manifest (addon-manager) (push) Has been skipped
Post / image manifest (placement) (push) Has been skipped
Post / image manifest (registration) (push) Has been skipped
Post / image manifest (registration-operator) (push) Has been skipped
Post / image manifest (work) (push) Has been skipped
Post / trigger clusteradm e2e (push) Has been skipped
Post / coverage (push) Failing after 14m33s
Scorecard supply-chain security / Scorecard analysis (push) Failing after 1m25s
Close stale issues and PRs / stale (push) Successful in 46s
Some checks failed
Post / images (amd64, addon-manager) (push) Failing after 46s
Post / images (amd64, placement) (push) Failing after 41s
Post / images (amd64, registration-operator) (push) Failing after 39s
Post / images (amd64, work) (push) Failing after 42s
Post / images (arm64, addon-manager) (push) Failing after 39s
Post / images (arm64, placement) (push) Failing after 39s
Post / images (arm64, registration) (push) Failing after 40s
Post / images (arm64, registration-operator) (push) Failing after 42s
Post / images (arm64, work) (push) Failing after 39s
Post / images (amd64, registration) (push) Failing after 7m46s
Post / image manifest (addon-manager) (push) Has been skipped
Post / image manifest (placement) (push) Has been skipped
Post / image manifest (registration) (push) Has been skipped
Post / image manifest (registration-operator) (push) Has been skipped
Post / image manifest (work) (push) Has been skipped
Post / trigger clusteradm e2e (push) Has been skipped
Post / coverage (push) Failing after 14m33s
Scorecard supply-chain security / Scorecard analysis (push) Failing after 1m25s
Close stale issues and PRs / stale (push) Successful in 46s
* Add addon conversion webhook for v1alpha1/v1beta1 API migration 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Qing Hao <qhao@redhat.com> * Fix GroupVersion compatibility issues after API dependency update This commit fixes compilation and test errors introduced by updating the API dependency to use native conversion functions from PR #411. Changes include: 1. Fix GroupVersion type mismatches across the codebase: - Updated OwnerReference creation to use schema.GroupVersion - Fixed webhook scheme registration to use proper GroupVersion type - Applied fixes to addon, placement, migration, work, and registration controllers 2. Enhance addon conversion webhook: - Use native API conversion functions from addon/v1beta1/conversion.go - Fix InstallNamespace annotation key to match expected format - Add custom logic to populate deprecated ConfigReferent field in ConfigReferences - Properly preserve annotations during v1alpha1 <-> v1beta1 conversion 3. Remove duplicate conversion code: - Deleted pkg/addon/webhook/conversion/ directory (~500 lines) - Now using native conversion functions from the API repository 4. Patch vendored addon-framework: - Fixed GroupVersion errors in agentdeploy utils All unit tests pass successfully (97 packages, 0 failures). Signed-off-by: Qing Hao <qhao@redhat.com> --------- Signed-off-by: Qing Hao <qhao@redhat.com> Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -70,8 +70,8 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
var hubRegistrationWebhookDeployment = fmt.Sprintf("%s-registration-webhook", clusterManagerName)
|
||||
var hubWorkWebhookDeployment = fmt.Sprintf("%s-work-webhook", clusterManagerName)
|
||||
var hubAddOnManagerDeployment = fmt.Sprintf("%s-addon-manager-controller", clusterManagerName)
|
||||
var hubAddOnWebhookDeployment = fmt.Sprintf("%s-addon-webhook", clusterManagerName)
|
||||
var hubWorkControllerDeployment = fmt.Sprintf("%s-work-controller", clusterManagerName)
|
||||
var hubAddonManagerDeployment = fmt.Sprintf("%s-addon-manager-controller", clusterManagerName)
|
||||
var hubRegistrationClusterRole = fmt.Sprintf("open-cluster-management:%s-registration:controller", clusterManagerName)
|
||||
var hubRegistrationWebhookClusterRole = fmt.Sprintf("open-cluster-management:%s-registration:webhook", clusterManagerName)
|
||||
var hubWorkWebhookClusterRole = fmt.Sprintf("open-cluster-management:%s-registration:webhook", clusterManagerName)
|
||||
@@ -227,7 +227,7 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
}, eventuallyTimeout, eventuallyInterval).Should(gomega.BeNil())
|
||||
|
||||
gomega.Eventually(func() error {
|
||||
if _, err := hostedKubeClient.AppsV1().Deployments(hubNamespaceHosted).Get(hostedCtx, hubAddonManagerDeployment, metav1.GetOptions{}); err != nil {
|
||||
if _, err := hostedKubeClient.AppsV1().Deployments(hubNamespaceHosted).Get(hostedCtx, hubAddOnManagerDeployment, metav1.GetOptions{}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -287,7 +287,7 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
ginkgo.By("Update the deployment status to fail to prevent other cases from interfering")
|
||||
updateDeploymentsStatusFail(hostedKubeClient, hubNamespaceHosted,
|
||||
hubRegistrationDeployment, hubPlacementDeployment, hubRegistrationWebhookDeployment,
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddonManagerDeployment)
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddOnManagerDeployment, hubAddOnWebhookDeployment)
|
||||
|
||||
// Check validating webhook
|
||||
registrationValidtingWebhook := "managedclustervalidators.admission.cluster.open-cluster-management.io"
|
||||
@@ -305,7 +305,7 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
|
||||
updateDeploymentsStatusSuccess(hostedKubeClient, hubNamespaceHosted,
|
||||
hubRegistrationDeployment, hubPlacementDeployment, hubRegistrationWebhookDeployment,
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddonManagerDeployment)
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddOnManagerDeployment, hubAddOnWebhookDeployment)
|
||||
|
||||
gomega.Eventually(func() error {
|
||||
_, err := hostedKubeClient.AdmissionregistrationV1().ValidatingWebhookConfigurations().Get(
|
||||
@@ -392,7 +392,7 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
|
||||
updateDeploymentsStatusSuccess(hostedKubeClient, hubNamespaceHosted,
|
||||
hubRegistrationDeployment, hubPlacementDeployment, hubRegistrationWebhookDeployment,
|
||||
hubWorkWebhookDeployment, hubAddOnManagerDeployment)
|
||||
hubWorkWebhookDeployment, hubAddOnManagerDeployment, hubAddOnWebhookDeployment)
|
||||
|
||||
// Check if relatedResources are correct
|
||||
gomega.Eventually(func() error {
|
||||
@@ -401,8 +401,8 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(actual.Status.RelatedResources) != 41 {
|
||||
return fmt.Errorf("should get 41 relatedResources, actual got %v, %v",
|
||||
if len(actual.Status.RelatedResources) != 43 {
|
||||
return fmt.Errorf("should get 43 relatedResources, actual got %v, %v",
|
||||
len(actual.Status.RelatedResources), actual.Status.RelatedResources)
|
||||
}
|
||||
return nil
|
||||
@@ -472,7 +472,7 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
|
||||
updateDeploymentsStatusSuccess(hostedKubeClient, hubNamespaceHosted,
|
||||
hubRegistrationDeployment, hubPlacementDeployment, hubRegistrationWebhookDeployment,
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddonManagerDeployment)
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddOnManagerDeployment, hubAddOnWebhookDeployment)
|
||||
// Check if relatedResources are correct
|
||||
gomega.Eventually(func() error {
|
||||
actual, err := hostedOperatorClient.OperatorV1().ClusterManagers().Get(
|
||||
@@ -480,8 +480,8 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(actual.Status.RelatedResources) != 45 {
|
||||
return fmt.Errorf("should get 45 relatedResources, actual got %v, %v",
|
||||
if len(actual.Status.RelatedResources) != 47 {
|
||||
return fmt.Errorf("should get 47 relatedResources, actual got %v, %v",
|
||||
len(actual.Status.RelatedResources), actual.Status.RelatedResources)
|
||||
}
|
||||
return nil
|
||||
@@ -694,8 +694,8 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(actual.Status.RelatedResources) != 40 {
|
||||
return fmt.Errorf("should get 40 relatedResources, actual got %v, %v",
|
||||
if len(actual.Status.RelatedResources) != 42 {
|
||||
return fmt.Errorf("should get 42 relatedResources, actual got %v, %v",
|
||||
len(actual.Status.RelatedResources), actual.Status.RelatedResources)
|
||||
}
|
||||
return nil
|
||||
@@ -748,15 +748,15 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
|
||||
updateDeploymentsStatusSuccess(hostedKubeClient, hubNamespaceHosted,
|
||||
hubRegistrationDeployment, hubPlacementDeployment, hubRegistrationWebhookDeployment,
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddonManagerDeployment)
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddOnManagerDeployment, hubAddOnWebhookDeployment)
|
||||
// Check if relatedResources are correct
|
||||
gomega.Eventually(func() error {
|
||||
actual, err := hostedOperatorClient.OperatorV1().ClusterManagers().Get(context.Background(), clusterManagerName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(actual.Status.RelatedResources) != 45 {
|
||||
return fmt.Errorf("should get 45 relatedResources, actual got %v, %v", len(actual.Status.RelatedResources), actual.Status.RelatedResources)
|
||||
if len(actual.Status.RelatedResources) != 47 {
|
||||
return fmt.Errorf("should get 47 relatedResources, actual got %v, %v", len(actual.Status.RelatedResources), actual.Status.RelatedResources)
|
||||
}
|
||||
return nil
|
||||
}, eventuallyTimeout, eventuallyInterval).ShouldNot(gomega.HaveOccurred())
|
||||
@@ -808,7 +808,7 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
|
||||
updateDeploymentsStatusSuccess(hostedKubeClient, hubNamespaceHosted,
|
||||
hubRegistrationDeployment, hubPlacementDeployment, hubRegistrationWebhookDeployment,
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddonManagerDeployment)
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddOnManagerDeployment, hubAddOnWebhookDeployment)
|
||||
|
||||
// Check if generations are correct
|
||||
gomega.Eventually(func() error {
|
||||
@@ -871,7 +871,7 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
|
||||
updateDeploymentsStatusSuccess(hostedKubeClient, hubNamespaceHosted,
|
||||
hubRegistrationDeployment, hubPlacementDeployment, hubRegistrationWebhookDeployment,
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddonManagerDeployment)
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddOnManagerDeployment, hubAddOnWebhookDeployment)
|
||||
})
|
||||
|
||||
ginkgo.It("Deployment should be reconciled when manually updated", func() {
|
||||
@@ -943,7 +943,7 @@ var _ = ginkgo.Describe("ClusterManager Hosted Mode", func() {
|
||||
// Update replica of deployment
|
||||
updateDeploymentsStatusSuccess(hostedKubeClient, hubNamespaceHosted,
|
||||
hubRegistrationDeployment, hubPlacementDeployment, hubRegistrationWebhookDeployment,
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddonManagerDeployment)
|
||||
hubWorkWebhookDeployment, hubWorkControllerDeployment, hubAddOnManagerDeployment, hubAddOnWebhookDeployment)
|
||||
|
||||
// The cluster manager should be functional at last
|
||||
util.AssertClusterManagerCondition(clusterManagerName, hostedOperatorClient, "HubRegistrationDegraded", "RegistrationFunctional", metav1.ConditionFalse)
|
||||
|
||||
Reference in New Issue
Block a user