Skip to content

Commit ce940ee

Browse files
committed
Merge pull request #420 from vmware/cluster-import-fix
Handle x-kubernetes-preserve-unknown-fields in import
1 parent 3578fd2 commit ce940ee

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

internal/helper/openapi_v3_schema_validator/openapi_v3_schema_validator.go

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const (
2222
PropertiesKey OpenAPIV3Key = "properties"
2323
TypeKey OpenAPIV3Key = "type"
2424
AdditionalPropertiesKey OpenAPIV3Key = "additionalProperties"
25+
PreserveUnknownFieldKey OpenAPIV3Key = "x-kubernetes-preserve-unknown-fields"
2526
ItemsKey OpenAPIV3Key = "items"
2627
PatternKey OpenAPIV3Key = "pattern"
2728
MinLengthKey OpenAPIV3Key = "minLength"

internal/resources/tanzukubernetescluster/helper.go

+11-6
Original file line numberDiff line numberDiff line change
@@ -460,15 +460,20 @@ func removeModelVariable(clusterClassSchema interface{}, modelVariable interface
460460
}
461461
}
462462
} else {
463-
modelVarAdditionalProperties := clusterClassSchema.(map[string]interface{})[string(openapiv3.AdditionalPropertiesKey)]
464-
_, propertiesExist := modelVarAdditionalProperties.(map[string]interface{})[string(openapiv3.PropertiesKey)]
463+
modelVarAdditionalProperties, additionalPropertiesExist := clusterClassSchema.(map[string]interface{})[string(openapiv3.AdditionalPropertiesKey)]
464+
preserve, preserveExists := clusterClassSchema.(map[string]interface{})[string(openapiv3.PreserveUnknownFieldKey)]
465+
if additionalPropertiesExist {
466+
_, propertiesExist := modelVarAdditionalProperties.(map[string]interface{})[string(openapiv3.PropertiesKey)]
465467

466-
if propertiesExist {
467-
modelVariable = make(map[string]interface{})
468+
if propertiesExist {
469+
modelVariable = make(map[string]interface{})
468470

469-
for k, v := range modelVariableMap {
470-
modelVariable.(map[string]interface{})[k] = removeModelVariable(modelVarAdditionalProperties, v)
471+
for k, v := range modelVariableMap {
472+
modelVariable.(map[string]interface{})[k] = removeModelVariable(modelVarAdditionalProperties, v)
473+
}
471474
}
475+
} else if !preserveExists || !preserve.(bool) {
476+
modelVariable = make(map[string]interface{})
472477
}
473478
}
474479
}

0 commit comments

Comments
 (0)