UPSTREAM: 58466: tolerate more than one gvklist item
Origin resources, like deployment configs, are part of two api groups -
the legacy "empty" group, and, in cases like deploymentconfigs, the
"apps.openshift.io" group.
@@ -56,11 +56,13 @@ func NewOpenAPIData(doc *openapi_v2.Document) (Resources, error) {
if model == nil {
panic("ListModels returns a model that can't be looked-up.")
}
- gvk := parseGroupVersionKind(model)
+ gvkList := parseGroupVersionKind(model)
+ for _, gvk := range gvkList {
if len(gvk.Kind) > 0 {
resources[gvk] = modelName
}
}
+ }
return &document{
resources: resources,
@@ -77,48 +79,49 @@ func (d *document) LookupResource(gvk schema.GroupVersionKind) proto.Schema {
}
// Get and parse GroupVersionKind from the extension. Returns empty if it doesn't have one.
-func parseGroupVersionKind(s proto.Schema) schema.GroupVersionKind {
+func parseGroupVersionKind(s proto.Schema) []schema.GroupVersionKind {
extensions := s.GetExtensions()
+ gvkListResult := []schema.GroupVersionKind{}
+
// Get the extensions
gvkExtension, ok := extensions[groupVersionKindExtensionKey]
if !ok {
- return schema.GroupVersionKind{}
+ return []schema.GroupVersionKind{}
}
- // gvk extension must be a list of 1 element.
+ // gvk extension must be a list of at least 1 element.
gvkList, ok := gvkExtension.([]interface{})
if !ok {
- return schema.GroupVersionKind{}
+ return []schema.GroupVersionKind{}
}
- if len(gvkList) != 1 {
- return schema.GroupVersionKind{}
-
- }
- gvk := gvkList[0]
+ for _, gvk := range gvkList {
// gvk extension list must be a map with group, version, and
// kind fields
gvkMap, ok := gvk.(map[interface{}]interface{})
if !ok {
- return schema.GroupVersionKind{}
+ continue
}
group, ok := gvkMap["group"].(string)
if !ok {
- return schema.GroupVersionKind{}
+ continue
}
version, ok := gvkMap["version"].(string)
if !ok {
- return schema.GroupVersionKind{}
+ continue
}
kind, ok := gvkMap["kind"].(string)
if !ok {
- return schema.GroupVersionKind{}
+ continue
}
- return schema.GroupVersionKind{
+ gvkListResult = append(gvkListResult, schema.GroupVersionKind{
Group: group,
Version: version,
Kind: kind,
+ })
}
+
+ return gvkListResult
}
