@@ -17,6 +17,7 @@ limitations under the License.
17
17
package spd
18
18
19
19
import (
20
+ "strings"
20
21
"time"
21
22
22
23
apiequality "k8s.io/apimachinery/pkg/api/equality"
@@ -192,39 +193,54 @@ func (sc *SPDController) mergeIndicatorSpec(spd *apiworkload.ServiceProfileDescr
192
193
util .InsertSPDExtendedIndicatorSpec (& spd .Spec , & indicator )
193
194
}
194
195
195
- for i := 0 ; i < len (spd .Spec .BusinessIndicator ); i ++ {
196
- if _ , ok := sc .indicatorsSpecBusiness [spd .Spec .BusinessIndicator [i ].Name ]; ! ok {
197
- klog .Infof ("skip spec business %v for spd %v" , spd .Spec .BusinessIndicator [i ].Name , spd .Name )
198
- spd .Spec .BusinessIndicator = append (spd .Spec .BusinessIndicator [:i ], spd .Spec .BusinessIndicator [i + 1 :]... )
196
+ // process BusinessIndicator
197
+ businessNew := spd .Spec .BusinessIndicator [:0 ]
198
+ for _ , indicator := range spd .Spec .BusinessIndicator {
199
+ if shouldKeep (indicator .Name , sc .indicatorsSpecBusiness ) {
200
+ businessNew = append (businessNew , indicator )
201
+ } else {
202
+ klog .Infof ("skip spec business %v for spd %v" , indicator .Name , spd .Name )
199
203
}
200
204
}
201
-
202
- for i := 0 ; i < len (spd .Spec .SystemIndicator ); i ++ {
203
- if _ , ok := sc .indicatorsSpecSystem [spd .Spec .SystemIndicator [i ].Name ]; ! ok {
204
- klog .Infof ("skip spec system %v for spd %v" , spd .Spec .SystemIndicator [i ].Name , spd .Name )
205
- spd .Spec .SystemIndicator = append (spd .Spec .SystemIndicator [:i ], spd .Spec .SystemIndicator [i + 1 :]... )
205
+ spd .Spec .BusinessIndicator = businessNew
206
+
207
+ // process SystemIndicator
208
+ systemNew := spd .Spec .SystemIndicator [:0 ]
209
+ for _ , indicator := range spd .Spec .SystemIndicator {
210
+ if shouldKeep (indicator .Name , sc .indicatorsSpecSystem ) {
211
+ systemNew = append (systemNew , indicator )
212
+ } else {
213
+ klog .Infof ("skip spec system %v for spd %v" , indicator .Name , spd .Name )
206
214
}
207
215
}
208
-
209
- for i := 0 ; i < len (spd .Spec .ExtendedIndicator ); i ++ {
210
- if _ , ok := sc .indicatorsSpecExtended [spd .Spec .ExtendedIndicator [i ].Name ]; ! ok {
211
- klog .Infof ("skip spec extended %v for spd %v" , spd .Spec .ExtendedIndicator [i ].Name , spd .Name )
212
- spd .Spec .ExtendedIndicator = append (spd .Spec .ExtendedIndicator [:i ], spd .Spec .ExtendedIndicator [i + 1 :]... )
216
+ spd .Spec .SystemIndicator = systemNew
217
+
218
+ // process ExtendedIndicator
219
+ extendedNew := spd .Spec .ExtendedIndicator [:0 ]
220
+ for _ , indicator := range spd .Spec .ExtendedIndicator {
221
+ if shouldKeep (indicator .Name , sc .indicatorsSpecExtended ) {
222
+ extendedNew = append (extendedNew , indicator )
223
+ } else {
224
+ klog .Infof ("skip spec extended %v for spd %v" , indicator .Name , spd .Name )
213
225
}
214
226
}
227
+ spd .Spec .ExtendedIndicator = extendedNew
215
228
}
216
229
217
230
func (sc * SPDController ) mergeIndicatorStatus (spd * apiworkload.ServiceProfileDescriptor , expected apiworkload.ServiceProfileDescriptorStatus ) {
218
231
for _ , indicator := range expected .BusinessStatus {
219
232
util .InsertSPDBusinessIndicatorStatus (& spd .Status , & indicator )
220
233
}
221
234
222
- for i := 0 ; i < len (spd .Status .BusinessStatus ); i ++ {
223
- if _ , ok := sc .indicatorsStatusBusiness [spd .Status .BusinessStatus [i ].Name ]; ! ok {
224
- klog .Infof ("skip status business %v for spd %v" , spd .Status .BusinessStatus [i ].Name , spd .Name )
225
- spd .Status .BusinessStatus = append (spd .Status .BusinessStatus [:i ], spd .Status .BusinessStatus [i + 1 :]... )
235
+ BusinessStatusNew := spd .Status .BusinessStatus [:0 ]
236
+ for _ , indicator := range spd .Status .BusinessStatus {
237
+ if shouldKeep (indicator .Name , sc .indicatorsStatusBusiness ) {
238
+ BusinessStatusNew = append (BusinessStatusNew , indicator )
239
+ } else {
240
+ klog .Infof ("skip status business %v for spd %v" , indicator .Name , spd .Name )
226
241
}
227
242
}
243
+ spd .Status .BusinessStatus = BusinessStatusNew
228
244
229
245
for _ , aggMetrics := range expected .AggMetrics {
230
246
util .InsertSPDAggMetricsStatus (& spd .Status , & aggMetrics )
@@ -242,3 +258,15 @@ func (sc *SPDController) mergeIndicatorStatus(spd *apiworkload.ServiceProfileDes
242
258
}
243
259
}
244
260
}
261
+
262
+ func shouldKeep [K ~ string ](name K , validMap map [K ]interface {}) bool {
263
+ if _ , ok := validMap [name ]; ok {
264
+ return true
265
+ }
266
+ for key := range validMap {
267
+ if strings .HasPrefix (string (name ), string (key )) {
268
+ return true
269
+ }
270
+ }
271
+ return false
272
+ }
0 commit comments