From d6366cbc3451f7d5e53a3b8b73fd2be0e6d98597 Mon Sep 17 00:00:00 2001 From: fullsend-code <278716306+fullsend-ai-coder[bot]@users.noreply.github.com> Date: Tue, 1 Sep 2026 03:03:22 +0000 Subject: [PATCH 1/3] fix(ROSAENG-61675): rename resendWait to resendInterval The ManagedFleetNotification CRD required resendWait but SelectorSyncSet manifests use resendInterval. Kubernetes silently ignores unknown fields so resendInterval was dropped and the API server rejected resources, blocking SelectorSyncSet syncs to managed clusters. Rename JSON tag on FleetNotification.ResendWait and NotificationRecordByName.ResendWait structs. Update all CRD YAMLs and e2e test references. ManagedNotification type (non-fleet) is unchanged. Note: golangci-lint and make go-test could not run due to sandbox network restrictions. Targeted go test, go vet, and go build all passed. Related to ROSAENG-61675 --- api/v1alpha1/managedfleetnotification_types.go | 2 +- api/v1alpha1/managedfleetnotificationrecord_types.go | 2 +- ....managed.openshift.io_managedfleetnotificationrecords.yaml | 4 ++-- ...magent.managed.openshift.io_managedfleetnotifications.yaml | 4 ++-- ...leetnotificationrecords.ocmagent.managed.openshift.io.yaml | 4 ++-- ...nagedfleetnotifications.ocmagent.managed.openshift.io.yaml | 4 ++-- ...leetnotificationrecords.ocmagent.managed.openshift.io.yaml | 4 ++-- ...nagedfleetnotifications.ocmagent.managed.openshift.io.yaml | 4 ++-- test/deploy/60_ocmagent.ManagedFleetNotification.yaml | 2 +- test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml | 4 ++-- test/e2e/ocm_agent_operator_tests.go | 4 ++-- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/api/v1alpha1/managedfleetnotification_types.go b/api/v1alpha1/managedfleetnotification_types.go index 218903a..fe9d997 100644 --- a/api/v1alpha1/managedfleetnotification_types.go +++ b/api/v1alpha1/managedfleetnotification_types.go @@ -44,7 +44,7 @@ type FleetNotification struct { Severity NotificationSeverity `json:"severity"` // Measured in hours. The minimum time interval that must elapse between active notifications - ResendWait int32 `json:"resendWait"` + ResendWait int32 `json:"resendInterval"` // Whether or not limited support should be sent for this notification LimitedSupport bool `json:"limitedSupport,omitempty"` diff --git a/api/v1alpha1/managedfleetnotificationrecord_types.go b/api/v1alpha1/managedfleetnotificationrecord_types.go index f0b766e..f8d51a2 100644 --- a/api/v1alpha1/managedfleetnotificationrecord_types.go +++ b/api/v1alpha1/managedfleetnotificationrecord_types.go @@ -36,7 +36,7 @@ type NotificationRecordByName struct { // Name of the notification NotificationName string `json:"notificationName"` // Resend interval for the notification - ResendWait int32 `json:"resendWait"` + ResendWait int32 `json:"resendInterval"` // Notification record item with the notification name NotificationRecordItems []NotificationRecordItem `json:"notificationRecordItems"` } diff --git a/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotificationrecords.yaml b/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotificationrecords.yaml index bf2ed7c..9f48ef7 100644 --- a/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotificationrecords.yaml +++ b/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotificationrecords.yaml @@ -84,14 +84,14 @@ spec: - resolvedNotificationSentCount type: object type: array - resendWait: + resendInterval: description: Resend interval for the notification format: int32 type: integer required: - notificationName - notificationRecordItems - - resendWait + - resendInterval type: object type: array required: diff --git a/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotifications.yaml b/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotifications.yaml index b164191..ebb1aee 100644 --- a/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotifications.yaml +++ b/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotifications.yaml @@ -68,7 +68,7 @@ spec: pattern: ^https?:\/\/.+$ type: string type: array - resendWait: + resendInterval: description: Measured in hours. The minimum time interval that must elapse between active notifications format: int32 @@ -90,7 +90,7 @@ spec: required: - name - notificationMessage - - resendWait + - resendInterval - severity - summary type: object diff --git a/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml b/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml index 1dfc6dc..f7f69f4 100755 --- a/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml +++ b/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml @@ -78,14 +78,14 @@ spec: - resolvedNotificationSentCount type: object type: array - resendWait: + resendInterval: description: Resend interval for the notification format: int32 type: integer required: - notificationName - notificationRecordItems - - resendWait + - resendInterval type: object type: array required: diff --git a/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml b/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml index d97ddf5..ca915a0 100755 --- a/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml +++ b/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml @@ -63,7 +63,7 @@ spec: pattern: ^https?:\/\/.+$ type: string type: array - resendWait: + resendInterval: description: Measured in hours. The minimum time interval that must elapse between active notifications format: int32 type: integer @@ -84,7 +84,7 @@ spec: required: - name - notificationMessage - - resendWait + - resendInterval - severity - summary type: object diff --git a/deploy_pko/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml b/deploy_pko/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml index 1dfc6dc..f7f69f4 100644 --- a/deploy_pko/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml +++ b/deploy_pko/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml @@ -78,14 +78,14 @@ spec: - resolvedNotificationSentCount type: object type: array - resendWait: + resendInterval: description: Resend interval for the notification format: int32 type: integer required: - notificationName - notificationRecordItems - - resendWait + - resendInterval type: object type: array required: diff --git a/deploy_pko/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml b/deploy_pko/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml index d97ddf5..ca915a0 100644 --- a/deploy_pko/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml +++ b/deploy_pko/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml @@ -63,7 +63,7 @@ spec: pattern: ^https?:\/\/.+$ type: string type: array - resendWait: + resendInterval: description: Measured in hours. The minimum time interval that must elapse between active notifications format: int32 type: integer @@ -84,7 +84,7 @@ spec: required: - name - notificationMessage - - resendWait + - resendInterval - severity - summary type: object diff --git a/test/deploy/60_ocmagent.ManagedFleetNotification.yaml b/test/deploy/60_ocmagent.ManagedFleetNotification.yaml index 677cac1..8a081e2 100644 --- a/test/deploy/60_ocmagent.ManagedFleetNotification.yaml +++ b/test/deploy/60_ocmagent.ManagedFleetNotification.yaml @@ -10,4 +10,4 @@ spec: notificationMessage: |- This is a test notification for hypershift hosted clusters. severity: Warning - resendWait: 60 \ No newline at end of file + resendInterval: 60 \ No newline at end of file diff --git a/test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml b/test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml index aaeab42..3454433 100644 --- a/test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml +++ b/test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml @@ -8,7 +8,7 @@ status: managementCluster: xxx-yyy-zzz notificationRecordByName: - notificationName: notification A - resendWait: 60 + resendInterval: 60 notificationRecordItems: - hostedClusterID: 22b0n23htr7cbjhgmn3iihsrf18ii9ke serviceLogSentCount: 0 @@ -17,7 +17,7 @@ status: serviceLogSentCount: 5 lastTransitionTime: "2023-03-07T23:45:03Z" - notificationName: notification B - resendWait: 60 + resendInterval: 60 notificationRecordItems: - hostedClusterID: 22b42c7dlht72ldnqs52ipc9b7hmldjk serviceLogSentCount: 0 diff --git a/test/e2e/ocm_agent_operator_tests.go b/test/e2e/ocm_agent_operator_tests.go index 1760626..26fd778 100644 --- a/test/e2e/ocm_agent_operator_tests.go +++ b/test/e2e/ocm_agent_operator_tests.go @@ -688,7 +688,7 @@ var _ = ginkgo.Describe("ocm-agent-operator", ginkgo.Ordered, func() { "summary": "E2E Test MFN No Controller", "notificationMessage": "Testing MFN has no controller behavior", "severity": "Info", - "resendWait": 1, + "resendInterval": 1, }, }, }, @@ -713,7 +713,7 @@ var _ = ginkgo.Describe("ocm-agent-operator", ginkgo.Ordered, func() { fleetNotif := spec["fleetNotification"].(map[string]interface{}) Expect(fleetNotif["name"]).To(Equal("test-notification-e2e")) Expect(fleetNotif["severity"]).To(Equal("Info")) - Expect(fleetNotif["resendWait"]).To(Equal(int64(1))) + Expect(fleetNotif["resendInterval"]).To(Equal(int64(1))) ginkgo.By("monitoring MFN for no controller activity over time") Consistently(func() []interface{} { From ed7e34d94c477ed2c6d7726cc9adec32fdd9b02a Mon Sep 17 00:00:00 2001 From: fullsend-code <278716306+fullsend-ai-coder[bot]@users.noreply.github.com> Date: Tue, 1 Sep 2026 03:07:17 +0000 Subject: [PATCH 2/3] fix: add missing trailing newline to test fixture YAML --- test/deploy/60_ocmagent.ManagedFleetNotification.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/deploy/60_ocmagent.ManagedFleetNotification.yaml b/test/deploy/60_ocmagent.ManagedFleetNotification.yaml index 8a081e2..948048c 100644 --- a/test/deploy/60_ocmagent.ManagedFleetNotification.yaml +++ b/test/deploy/60_ocmagent.ManagedFleetNotification.yaml @@ -10,4 +10,4 @@ spec: notificationMessage: |- This is a test notification for hypershift hosted clusters. severity: Warning - resendInterval: 60 \ No newline at end of file + resendInterval: 60 From 8ae2b69fd334cd041b9a55825a512b14245f36ff Mon Sep 17 00:00:00 2001 From: fullsend-fix <278716306+fullsend-ai-coder[bot]@users.noreply.github.com> Date: Tue, 1 Sep 2026 03:38:25 +0000 Subject: [PATCH 3/3] fix: revert JSON tag rename to preserve backward compatibility Reverts the resendInterval JSON tag back to resendWait across all CRD types, YAML manifests, test fixtures, and e2e tests. The rename was a backward-incompatible CRD schema change that would break existing resources stored in etcd. The trailing newline fix on the test fixture is preserved. Addresses #356 --- api/v1alpha1/managedfleetnotification_types.go | 2 +- api/v1alpha1/managedfleetnotificationrecord_types.go | 2 +- ....managed.openshift.io_managedfleetnotificationrecords.yaml | 4 ++-- ...magent.managed.openshift.io_managedfleetnotifications.yaml | 4 ++-- ...leetnotificationrecords.ocmagent.managed.openshift.io.yaml | 4 ++-- ...nagedfleetnotifications.ocmagent.managed.openshift.io.yaml | 4 ++-- ...leetnotificationrecords.ocmagent.managed.openshift.io.yaml | 4 ++-- ...nagedfleetnotifications.ocmagent.managed.openshift.io.yaml | 4 ++-- test/deploy/60_ocmagent.ManagedFleetNotification.yaml | 2 +- test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml | 4 ++-- test/e2e/ocm_agent_operator_tests.go | 4 ++-- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/api/v1alpha1/managedfleetnotification_types.go b/api/v1alpha1/managedfleetnotification_types.go index fe9d997..218903a 100644 --- a/api/v1alpha1/managedfleetnotification_types.go +++ b/api/v1alpha1/managedfleetnotification_types.go @@ -44,7 +44,7 @@ type FleetNotification struct { Severity NotificationSeverity `json:"severity"` // Measured in hours. The minimum time interval that must elapse between active notifications - ResendWait int32 `json:"resendInterval"` + ResendWait int32 `json:"resendWait"` // Whether or not limited support should be sent for this notification LimitedSupport bool `json:"limitedSupport,omitempty"` diff --git a/api/v1alpha1/managedfleetnotificationrecord_types.go b/api/v1alpha1/managedfleetnotificationrecord_types.go index f8d51a2..f0b766e 100644 --- a/api/v1alpha1/managedfleetnotificationrecord_types.go +++ b/api/v1alpha1/managedfleetnotificationrecord_types.go @@ -36,7 +36,7 @@ type NotificationRecordByName struct { // Name of the notification NotificationName string `json:"notificationName"` // Resend interval for the notification - ResendWait int32 `json:"resendInterval"` + ResendWait int32 `json:"resendWait"` // Notification record item with the notification name NotificationRecordItems []NotificationRecordItem `json:"notificationRecordItems"` } diff --git a/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotificationrecords.yaml b/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotificationrecords.yaml index 9f48ef7..bf2ed7c 100644 --- a/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotificationrecords.yaml +++ b/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotificationrecords.yaml @@ -84,14 +84,14 @@ spec: - resolvedNotificationSentCount type: object type: array - resendInterval: + resendWait: description: Resend interval for the notification format: int32 type: integer required: - notificationName - notificationRecordItems - - resendInterval + - resendWait type: object type: array required: diff --git a/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotifications.yaml b/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotifications.yaml index ebb1aee..b164191 100644 --- a/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotifications.yaml +++ b/deploy/crds/ocmagent.managed.openshift.io_managedfleetnotifications.yaml @@ -68,7 +68,7 @@ spec: pattern: ^https?:\/\/.+$ type: string type: array - resendInterval: + resendWait: description: Measured in hours. The minimum time interval that must elapse between active notifications format: int32 @@ -90,7 +90,7 @@ spec: required: - name - notificationMessage - - resendInterval + - resendWait - severity - summary type: object diff --git a/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml b/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml index f7f69f4..1dfc6dc 100755 --- a/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml +++ b/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml @@ -78,14 +78,14 @@ spec: - resolvedNotificationSentCount type: object type: array - resendInterval: + resendWait: description: Resend interval for the notification format: int32 type: integer required: - notificationName - notificationRecordItems - - resendInterval + - resendWait type: object type: array required: diff --git a/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml b/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml index ca915a0..d97ddf5 100755 --- a/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml +++ b/deploy_pko/.test-fixtures/config-with-proxy/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml @@ -63,7 +63,7 @@ spec: pattern: ^https?:\/\/.+$ type: string type: array - resendInterval: + resendWait: description: Measured in hours. The minimum time interval that must elapse between active notifications format: int32 type: integer @@ -84,7 +84,7 @@ spec: required: - name - notificationMessage - - resendInterval + - resendWait - severity - summary type: object diff --git a/deploy_pko/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml b/deploy_pko/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml index f7f69f4..1dfc6dc 100644 --- a/deploy_pko/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml +++ b/deploy_pko/CustomResourceDefinition-managedfleetnotificationrecords.ocmagent.managed.openshift.io.yaml @@ -78,14 +78,14 @@ spec: - resolvedNotificationSentCount type: object type: array - resendInterval: + resendWait: description: Resend interval for the notification format: int32 type: integer required: - notificationName - notificationRecordItems - - resendInterval + - resendWait type: object type: array required: diff --git a/deploy_pko/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml b/deploy_pko/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml index ca915a0..d97ddf5 100644 --- a/deploy_pko/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml +++ b/deploy_pko/CustomResourceDefinition-managedfleetnotifications.ocmagent.managed.openshift.io.yaml @@ -63,7 +63,7 @@ spec: pattern: ^https?:\/\/.+$ type: string type: array - resendInterval: + resendWait: description: Measured in hours. The minimum time interval that must elapse between active notifications format: int32 type: integer @@ -84,7 +84,7 @@ spec: required: - name - notificationMessage - - resendInterval + - resendWait - severity - summary type: object diff --git a/test/deploy/60_ocmagent.ManagedFleetNotification.yaml b/test/deploy/60_ocmagent.ManagedFleetNotification.yaml index 948048c..83f375f 100644 --- a/test/deploy/60_ocmagent.ManagedFleetNotification.yaml +++ b/test/deploy/60_ocmagent.ManagedFleetNotification.yaml @@ -10,4 +10,4 @@ spec: notificationMessage: |- This is a test notification for hypershift hosted clusters. severity: Warning - resendInterval: 60 + resendWait: 60 diff --git a/test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml b/test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml index 3454433..aaeab42 100644 --- a/test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml +++ b/test/deploy/60_ocmagent.ManagedFleetNotificationRecord.yaml @@ -8,7 +8,7 @@ status: managementCluster: xxx-yyy-zzz notificationRecordByName: - notificationName: notification A - resendInterval: 60 + resendWait: 60 notificationRecordItems: - hostedClusterID: 22b0n23htr7cbjhgmn3iihsrf18ii9ke serviceLogSentCount: 0 @@ -17,7 +17,7 @@ status: serviceLogSentCount: 5 lastTransitionTime: "2023-03-07T23:45:03Z" - notificationName: notification B - resendInterval: 60 + resendWait: 60 notificationRecordItems: - hostedClusterID: 22b42c7dlht72ldnqs52ipc9b7hmldjk serviceLogSentCount: 0 diff --git a/test/e2e/ocm_agent_operator_tests.go b/test/e2e/ocm_agent_operator_tests.go index 26fd778..1760626 100644 --- a/test/e2e/ocm_agent_operator_tests.go +++ b/test/e2e/ocm_agent_operator_tests.go @@ -688,7 +688,7 @@ var _ = ginkgo.Describe("ocm-agent-operator", ginkgo.Ordered, func() { "summary": "E2E Test MFN No Controller", "notificationMessage": "Testing MFN has no controller behavior", "severity": "Info", - "resendInterval": 1, + "resendWait": 1, }, }, }, @@ -713,7 +713,7 @@ var _ = ginkgo.Describe("ocm-agent-operator", ginkgo.Ordered, func() { fleetNotif := spec["fleetNotification"].(map[string]interface{}) Expect(fleetNotif["name"]).To(Equal("test-notification-e2e")) Expect(fleetNotif["severity"]).To(Equal("Info")) - Expect(fleetNotif["resendInterval"]).To(Equal(int64(1))) + Expect(fleetNotif["resendWait"]).To(Equal(int64(1))) ginkgo.By("monitoring MFN for no controller activity over time") Consistently(func() []interface{} {