mirror of https://github.com/k3s-io/k3s
tolerate more than one gvklist item
Some third-party resources could be part of more than one api group. Allow this to be the case when adding openapi models to openapi data.pull/6/head
parent
abdff8a0e6
commit
13add66f1e
|
@ -56,9 +56,11 @@ func NewOpenAPIData(doc *openapi_v2.Document) (Resources, error) {
|
||||||
if model == nil {
|
if model == nil {
|
||||||
panic("ListModels returns a model that can't be looked-up.")
|
panic("ListModels returns a model that can't be looked-up.")
|
||||||
}
|
}
|
||||||
gvk := parseGroupVersionKind(model)
|
gvkList := parseGroupVersionKind(model)
|
||||||
if len(gvk.Kind) > 0 {
|
for _, gvk := range gvkList {
|
||||||
resources[gvk] = modelName
|
if len(gvk.Kind) > 0 {
|
||||||
|
resources[gvk] = modelName
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.
|
// 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()
|
extensions := s.GetExtensions()
|
||||||
|
|
||||||
|
gvkListResult := []schema.GroupVersionKind{}
|
||||||
|
|
||||||
// Get the extensions
|
// Get the extensions
|
||||||
gvkExtension, ok := extensions[groupVersionKindExtensionKey]
|
gvkExtension, ok := extensions[groupVersionKindExtensionKey]
|
||||||
if !ok {
|
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{})
|
gvkList, ok := gvkExtension.([]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
return schema.GroupVersionKind{}
|
return []schema.GroupVersionKind{}
|
||||||
}
|
|
||||||
if len(gvkList) != 1 {
|
|
||||||
return schema.GroupVersionKind{}
|
|
||||||
|
|
||||||
}
|
|
||||||
gvk := gvkList[0]
|
|
||||||
|
|
||||||
// gvk extension list must be a map with group, version, and
|
|
||||||
// kind fields
|
|
||||||
gvkMap, ok := gvk.(map[interface{}]interface{})
|
|
||||||
if !ok {
|
|
||||||
return schema.GroupVersionKind{}
|
|
||||||
}
|
|
||||||
group, ok := gvkMap["group"].(string)
|
|
||||||
if !ok {
|
|
||||||
return schema.GroupVersionKind{}
|
|
||||||
}
|
|
||||||
version, ok := gvkMap["version"].(string)
|
|
||||||
if !ok {
|
|
||||||
return schema.GroupVersionKind{}
|
|
||||||
}
|
|
||||||
kind, ok := gvkMap["kind"].(string)
|
|
||||||
if !ok {
|
|
||||||
return schema.GroupVersionKind{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return schema.GroupVersionKind{
|
for _, gvk := range gvkList {
|
||||||
Group: group,
|
// gvk extension list must be a map with group, version, and
|
||||||
Version: version,
|
// kind fields
|
||||||
Kind: kind,
|
gvkMap, ok := gvk.(map[interface{}]interface{})
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
group, ok := gvkMap["group"].(string)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
version, ok := gvkMap["version"].(string)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
kind, ok := gvkMap["kind"].(string)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
gvkListResult = append(gvkListResult, schema.GroupVersionKind{
|
||||||
|
Group: group,
|
||||||
|
Version: version,
|
||||||
|
Kind: kind,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return gvkListResult
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue