@@ -1101,6 +1101,7 @@ func (sc *syncContext) shouldUseServerSideApply(targetObj *unstructured.Unstruct
1101
1101
return sc .serverSideApply || resourceutil .HasAnnotationOption (targetObj , common .AnnotationSyncOptions , common .SyncOptionServerSideApply )
1102
1102
}
1103
1103
1104
+ << << << < HEAD
1104
1105
// needsClientSideApplyMigration checks if a resource has fields managed by the specified manager
1105
1106
// that need to be migrated to the server-side apply manager
1106
1107
func (sc * syncContext ) needsClientSideApplyMigration (liveObj * unstructured.Unstructured , fieldManager string ) bool {
@@ -1147,56 +1148,103 @@ func (sc *syncContext) performClientSideApplyMigration(targetObj *unstructured.U
1147
1148
return nil
1148
1149
}
1149
1150
1151
+ == == == =
1152
+ // formatValue converts any value to its string representation with special handling for
1153
+ // templates, maps, and strings. Returns "<nil>" for nil values.
1154
+ >> >> >> > 3 df63b1 (refactor formatValue method to reduce complexity )
1150
1155
func formatValue (v any ) string {
1151
1156
if v == nil {
1152
1157
return "<nil>"
1153
1158
}
1154
1159
1155
- // Special case for volumeClaimTemplates
1156
- if templates , ok := v .([]any ); ok {
1157
- // For a single volumeClaimTemplate field change
1158
- if len (templates ) == 1 {
1159
- if template , ok := templates [0 ].(map [string ]any ); ok {
1160
- if storage := getTemplateStorage (template ); storage != "" {
1161
- return fmt .Sprintf ("%q" , storage )
1162
- }
1163
- }
1164
- }
1165
- // For multiple templates or other array types format
1166
- var names []string
1167
- for _ , t := range templates {
1168
- if template , ok := t .(map [string ]any ); ok {
1169
- if metadata , ok := template ["metadata" ].(map [string ]any ); ok {
1170
- if name , ok := metadata ["name" ].(string ); ok {
1171
- if storage := getTemplateStorage (template ); storage != "" {
1172
- names = append (names , fmt .Sprintf ("%s(%s)" , name , storage ))
1173
- continue
1174
- }
1175
- names = append (names , name )
1176
- }
1177
- }
1178
- }
1160
+ switch val := v .(type ) {
1161
+ case []any :
1162
+ return formatTemplates (val )
1163
+ case map [string ]any :
1164
+ return formatMap (val )
1165
+ case string :
1166
+ return fmt .Sprintf ("%q" , val )
1167
+ default :
1168
+ return fmt .Sprintf ("%v" , val )
1169
+ }
1170
+ }
1171
+
1172
+ // formatTemplates handles the formatting of volumeClaimTemplates arrays.
1173
+ // For single templates with storage, returns the storage value.
1174
+ // For multiple templates, returns a formatted list of template names with storage.
1175
+ func formatTemplates (templates []any ) string {
1176
+ if len (templates ) == 1 {
1177
+ if storage := getSingleTemplateStorage (templates [0 ]); storage != "" {
1178
+ return fmt .Sprintf ("%q" , storage )
1179
1179
}
1180
- return fmt .Sprintf ("[%s]" , strings .Join (names , ", " ))
1181
1180
}
1181
+ return formatMultipleTemplates (templates )
1182
+ }
1182
1183
1183
- // Special case for selector matchLabels
1184
- if m , ok := v .(map [string ]any ); ok {
1185
- if matchLabels , exists := m ["matchLabels" ].(map [string ]any ); exists {
1186
- var labels []string
1187
- for k , v := range matchLabels {
1188
- labels = append (labels , fmt .Sprintf ("%s:%s" , k , v ))
1189
- }
1190
- sort .Strings (labels )
1191
- return fmt .Sprintf ("{%s}" , strings .Join (labels , ", " ))
1184
+ // getSingleTemplateStorage extracts storage value from a single template.
1185
+ // Returns empty string if template is invalid or has no storage.
1186
+ func getSingleTemplateStorage (t any ) string {
1187
+ template , ok := t .(map [string ]any )
1188
+ if ! ok {
1189
+ return ""
1190
+ }
1191
+ return getTemplateStorage (template )
1192
+ }
1193
+
1194
+ // formatMultipleTemplates formats an array of templates into a string list
1195
+ // of template names, optionally including storage information.
1196
+ func formatMultipleTemplates (templates []any ) string {
1197
+ var names []string
1198
+ for _ , t := range templates {
1199
+ if name := getTemplateName (t ); name != "" {
1200
+ names = append (names , name )
1192
1201
}
1193
1202
}
1194
- // Add quotes for string values
1195
- if str , ok := v .(string ); ok {
1196
- return fmt .Sprintf ("%q" , str )
1203
+ return fmt .Sprintf ("[%s]" , strings .Join (names , ", " ))
1204
+ }
1205
+
1206
+ // getTemplateName extracts and formats the name from a template.
1207
+ // If template has storage, appends it to the name in parentheses.
1208
+ func getTemplateName (t any ) string {
1209
+ template , ok := t .(map [string ]any )
1210
+ if ! ok {
1211
+ return ""
1212
+ }
1213
+
1214
+ metadata , ok := template ["metadata" ].(map [string ]any )
1215
+ if ! ok {
1216
+ return ""
1217
+ }
1218
+
1219
+ name , ok := metadata ["name" ].(string )
1220
+ if ! ok {
1221
+ return ""
1222
+ }
1223
+
1224
+ if storage := getTemplateStorage (template ); storage != "" {
1225
+ return fmt .Sprintf ("%s(%s)" , name , storage )
1226
+ }
1227
+ return name
1228
+ }
1229
+
1230
+ // formatMap handles special case formatting for maps, particularly for matchLabels.
1231
+ // Returns standard string representation for non-matchLabel maps.
1232
+ func formatMap (m map [string ]any ) string {
1233
+ if matchLabels , exists := m ["matchLabels" ].(map [string ]any ); exists {
1234
+ return formatMatchLabels (matchLabels )
1235
+ }
1236
+ return fmt .Sprintf ("%v" , m )
1237
+ }
1238
+
1239
+ // formatMatchLabels converts a matchLabels map into a sorted string list
1240
+ // of key:value pairs enclosed in curly braces.
1241
+ func formatMatchLabels (matchLabels map [string ]any ) string {
1242
+ var labels []string
1243
+ for k , v := range matchLabels {
1244
+ labels = append (labels , fmt .Sprintf ("%s:%s" , k , v ))
1197
1245
}
1198
- // For other types, use standard formatting
1199
- return fmt .Sprintf ("%v " , v )
1246
+ sort . Strings ( labels )
1247
+ return fmt .Sprintf ("{%s} " , strings . Join ( labels , ", " ) )
1200
1248
}
1201
1249
1202
1250
// Get storage size from template
0 commit comments