@@ -21,6 +21,7 @@ import (
2121 "path/filepath"
2222 "strings"
2323
24+ common_webhook "github.com/openstack-k8s-operators/lib-common/modules/common/webhook"
2425 "k8s.io/apimachinery/pkg/util/validation/field"
2526)
2627
@@ -58,3 +59,128 @@ func matchAny(requested string, allowed []string) bool {
5859 }
5960 return false
6061}
62+
63+ // getDeprecatedFields returns the centralized list of deprecated fields for NovaSpecCore
64+ func (spec * NovaSpecCore ) getDeprecatedFields (old * NovaSpecCore ) []common_webhook.DeprecatedFieldUpdate {
65+ // Get new field value (handle nil NotificationsBus)
66+ var newNotifBusCluster * string
67+ if spec .NotificationsBus != nil {
68+ newNotifBusCluster = & spec .NotificationsBus .Cluster
69+ }
70+
71+ deprecatedFields := []common_webhook.DeprecatedFieldUpdate {
72+ {
73+ DeprecatedFieldName : "apiMessageBusInstance" ,
74+ NewFieldPath : []string {"messagingBus" , "cluster" },
75+ NewDeprecatedValue : & spec .APIMessageBusInstance ,
76+ NewValue : & spec .MessagingBus .Cluster ,
77+ },
78+ {
79+ DeprecatedFieldName : "notificationsBusInstance" ,
80+ NewFieldPath : []string {"notificationsBus" , "cluster" },
81+ NewDeprecatedValue : spec .NotificationsBusInstance ,
82+ NewValue : newNotifBusCluster ,
83+ },
84+ }
85+
86+ // If old spec is provided (UPDATE operation), add old values
87+ if old != nil {
88+ deprecatedFields [0 ].OldDeprecatedValue = & old .APIMessageBusInstance
89+ deprecatedFields [1 ].OldDeprecatedValue = old .NotificationsBusInstance
90+ }
91+
92+ return deprecatedFields
93+ }
94+
95+ // validateDeprecatedFieldsCreate validates deprecated fields during CREATE operations
96+ func (spec * NovaSpecCore ) validateDeprecatedFieldsCreate (basePath * field.Path ) ([]string , field.ErrorList ) {
97+ // Get deprecated fields list (without old values for CREATE)
98+ deprecatedFieldsUpdate := spec .getDeprecatedFields (nil )
99+
100+ // Convert to DeprecatedField list for CREATE validation
101+ deprecatedFields := make ([]common_webhook.DeprecatedField , len (deprecatedFieldsUpdate ))
102+ for i , df := range deprecatedFieldsUpdate {
103+ deprecatedFields [i ] = common_webhook.DeprecatedField {
104+ DeprecatedFieldName : df .DeprecatedFieldName ,
105+ NewFieldPath : df .NewFieldPath ,
106+ DeprecatedValue : df .NewDeprecatedValue ,
107+ NewValue : df .NewValue ,
108+ }
109+ }
110+
111+ // Validate top-level NovaSpecCore fields
112+ warnings := common_webhook .ValidateDeprecatedFieldsCreate (deprecatedFields , basePath )
113+
114+ // Validate deprecated fields in cell templates
115+ for cellName , cellTemplate := range spec .CellTemplates {
116+ cellPath := basePath .Child ("cellTemplates" ).Key (cellName )
117+ cellWarnings := cellTemplate .validateDeprecatedFieldsCreate (cellPath )
118+ warnings = append (warnings , cellWarnings ... )
119+ }
120+
121+ return warnings , nil
122+ }
123+
124+ // validateDeprecatedFieldsUpdate validates deprecated fields during UPDATE operations
125+ func (spec * NovaSpecCore ) validateDeprecatedFieldsUpdate (old NovaSpecCore , basePath * field.Path ) ([]string , field.ErrorList ) {
126+ // Get deprecated fields list with old values
127+ deprecatedFields := spec .getDeprecatedFields (& old )
128+ warnings , errors := common_webhook .ValidateDeprecatedFieldsUpdate (deprecatedFields , basePath )
129+
130+ // Validate deprecated fields in cell templates
131+ for cellName , cellTemplate := range spec .CellTemplates {
132+ if oldCell , exists := old .CellTemplates [cellName ]; exists {
133+ cellPath := basePath .Child ("cellTemplates" ).Key (cellName )
134+ cellWarnings , cellErrors := cellTemplate .validateDeprecatedFieldsUpdate (oldCell , cellPath )
135+ warnings = append (warnings , cellWarnings ... )
136+ errors = append (errors , cellErrors ... )
137+ }
138+ }
139+
140+ return warnings , errors
141+ }
142+
143+ // getDeprecatedFields returns the centralized list of deprecated fields for NovaCellTemplate
144+ func (spec * NovaCellTemplate ) getDeprecatedFields (old * NovaCellTemplate ) []common_webhook.DeprecatedFieldUpdate {
145+ deprecatedFields := []common_webhook.DeprecatedFieldUpdate {
146+ {
147+ DeprecatedFieldName : "cellMessageBusInstance" ,
148+ NewFieldPath : []string {"messagingBus" , "cluster" },
149+ NewDeprecatedValue : & spec .CellMessageBusInstance ,
150+ NewValue : & spec .MessagingBus .Cluster ,
151+ },
152+ }
153+
154+ // If old spec is provided (UPDATE operation), add old values
155+ if old != nil {
156+ deprecatedFields [0 ].OldDeprecatedValue = & old .CellMessageBusInstance
157+ }
158+
159+ return deprecatedFields
160+ }
161+
162+ // validateDeprecatedFieldsCreate validates deprecated fields during CREATE operations for NovaCellTemplate
163+ func (spec * NovaCellTemplate ) validateDeprecatedFieldsCreate (basePath * field.Path ) []string {
164+ // Get deprecated fields list (without old values for CREATE)
165+ deprecatedFieldsUpdate := spec .getDeprecatedFields (nil )
166+
167+ // Convert to DeprecatedField list for CREATE validation
168+ deprecatedFields := make ([]common_webhook.DeprecatedField , len (deprecatedFieldsUpdate ))
169+ for i , df := range deprecatedFieldsUpdate {
170+ deprecatedFields [i ] = common_webhook.DeprecatedField {
171+ DeprecatedFieldName : df .DeprecatedFieldName ,
172+ NewFieldPath : df .NewFieldPath ,
173+ DeprecatedValue : df .NewDeprecatedValue ,
174+ NewValue : df .NewValue ,
175+ }
176+ }
177+
178+ return common_webhook .ValidateDeprecatedFieldsCreate (deprecatedFields , basePath )
179+ }
180+
181+ // validateDeprecatedFieldsUpdate validates deprecated fields during UPDATE operations for NovaCellTemplate
182+ func (spec * NovaCellTemplate ) validateDeprecatedFieldsUpdate (old NovaCellTemplate , basePath * field.Path ) ([]string , field.ErrorList ) {
183+ // Get deprecated fields list with old values
184+ deprecatedFields := spec .getDeprecatedFields (& old )
185+ return common_webhook .ValidateDeprecatedFieldsUpdate (deprecatedFields , basePath )
186+ }
0 commit comments