fix dropped subresources
some subresources were not properly included in the array due to pointers becoming stale over a resize Kubernetes-commit: d74b6b2cfa9bd2bc322750db9c42fb575e947982
This commit is contained in:
parent
987645aaa7
commit
9508b3bed7
|
@ -71,7 +71,7 @@ type action struct {
|
|||
|
||||
func ConvertGroupVersionIntoToDiscovery(list []metav1.APIResource) ([]apidiscoveryv2beta1.APIResourceDiscovery, error) {
|
||||
var apiResourceList []apidiscoveryv2beta1.APIResourceDiscovery
|
||||
parentResources := map[string]*apidiscoveryv2beta1.APIResourceDiscovery{}
|
||||
parentResources := make(map[string]int)
|
||||
|
||||
// Loop through all top-level resources
|
||||
for _, r := range list {
|
||||
|
@ -87,7 +87,7 @@ func ConvertGroupVersionIntoToDiscovery(list []metav1.APIResource) ([]apidiscove
|
|||
scope = apidiscoveryv2beta1.ScopeCluster
|
||||
}
|
||||
|
||||
apiResourceList = append(apiResourceList, apidiscoveryv2beta1.APIResourceDiscovery{
|
||||
resource := apidiscoveryv2beta1.APIResourceDiscovery{
|
||||
Resource: r.Name,
|
||||
Scope: scope,
|
||||
ResponseKind: &metav1.GroupVersionKind{
|
||||
|
@ -99,8 +99,9 @@ func ConvertGroupVersionIntoToDiscovery(list []metav1.APIResource) ([]apidiscove
|
|||
ShortNames: r.ShortNames,
|
||||
Categories: r.Categories,
|
||||
SingularResource: r.SingularName,
|
||||
})
|
||||
parentResources[r.Name] = &apiResourceList[len(apiResourceList)-1]
|
||||
}
|
||||
apiResourceList = append(apiResourceList, resource)
|
||||
parentResources[r.Name] = len(apiResourceList) - 1
|
||||
}
|
||||
|
||||
// Loop through all subresources
|
||||
|
@ -120,23 +121,19 @@ func ConvertGroupVersionIntoToDiscovery(list []metav1.APIResource) ([]apidiscove
|
|||
scope = apidiscoveryv2beta1.ScopeCluster
|
||||
}
|
||||
|
||||
var parent *apidiscoveryv2beta1.APIResourceDiscovery
|
||||
var exists bool
|
||||
|
||||
parent, exists = parentResources[split[0]]
|
||||
parentidx, exists := parentResources[split[0]]
|
||||
if !exists {
|
||||
// If a subresource exists without a parent, create a parent
|
||||
apiResourceList = append(apiResourceList, apidiscoveryv2beta1.APIResourceDiscovery{
|
||||
Resource: split[0],
|
||||
Scope: scope,
|
||||
})
|
||||
parentResources[split[0]] = &apiResourceList[len(apiResourceList)-1]
|
||||
parent = &apiResourceList[len(apiResourceList)-1]
|
||||
parentResources[split[0]] = parent
|
||||
parentidx = len(apiResourceList) - 1
|
||||
parentResources[split[0]] = parentidx
|
||||
}
|
||||
|
||||
if parent.Scope != scope {
|
||||
return nil, fmt.Errorf("Error: Parent %s (scope: %s) and subresource %s (scope: %s) scope do not match", split[0], parent.Scope, split[1], scope)
|
||||
if apiResourceList[parentidx].Scope != scope {
|
||||
return nil, fmt.Errorf("Error: Parent %s (scope: %s) and subresource %s (scope: %s) scope do not match", split[0], apiResourceList[parentidx].Scope, split[1], scope)
|
||||
//
|
||||
}
|
||||
|
||||
|
@ -151,9 +148,9 @@ func ConvertGroupVersionIntoToDiscovery(list []metav1.APIResource) ([]apidiscove
|
|||
Kind: r.Kind,
|
||||
}
|
||||
}
|
||||
parent.Subresources = append(parent.Subresources, subresource)
|
||||
|
||||
apiResourceList[parentidx].Subresources = append(apiResourceList[parentidx].Subresources, subresource)
|
||||
}
|
||||
|
||||
return apiResourceList, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -206,6 +206,87 @@ func TestConvertAPIResourceToDiscovery(t *testing.T) {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: "Test multiple resources and subresources",
|
||||
resources: []metav1.APIResource{
|
||||
{
|
||||
Name: "cronjobs",
|
||||
Namespaced: true,
|
||||
Kind: "CronJob",
|
||||
Group: "batch",
|
||||
Version: "v1",
|
||||
ShortNames: []string{"cj"},
|
||||
Verbs: []string{"create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"},
|
||||
},
|
||||
{
|
||||
Name: "cronjobs/status",
|
||||
Namespaced: true,
|
||||
Kind: "CronJob",
|
||||
Group: "batch",
|
||||
Version: "v1",
|
||||
ShortNames: []string{"cj"},
|
||||
Verbs: []string{"create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"},
|
||||
},
|
||||
{
|
||||
Name: "deployments",
|
||||
Namespaced: true,
|
||||
Kind: "Deployment",
|
||||
Group: "apps",
|
||||
Version: "v1",
|
||||
ShortNames: []string{"deploy"},
|
||||
Verbs: []string{"create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"},
|
||||
},
|
||||
{
|
||||
Name: "deployments/status",
|
||||
Namespaced: true,
|
||||
Kind: "Deployment",
|
||||
Group: "apps",
|
||||
Version: "v1",
|
||||
ShortNames: []string{"deploy"},
|
||||
Verbs: []string{"create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"},
|
||||
},
|
||||
},
|
||||
wantAPIResourceDiscovery: []apidiscoveryv2beta1.APIResourceDiscovery{
|
||||
{
|
||||
Resource: "cronjobs",
|
||||
Scope: apidiscoveryv2beta1.ScopeNamespace,
|
||||
ResponseKind: &metav1.GroupVersionKind{
|
||||
Group: "batch",
|
||||
Version: "v1",
|
||||
Kind: "CronJob",
|
||||
},
|
||||
ShortNames: []string{"cj"},
|
||||
Verbs: []string{"create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"},
|
||||
Subresources: []apidiscoveryv2beta1.APISubresourceDiscovery{{
|
||||
Subresource: "status",
|
||||
ResponseKind: &metav1.GroupVersionKind{
|
||||
Group: "batch",
|
||||
Version: "v1",
|
||||
Kind: "CronJob",
|
||||
},
|
||||
Verbs: []string{"create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"},
|
||||
}},
|
||||
}, {
|
||||
Resource: "deployments",
|
||||
Scope: apidiscoveryv2beta1.ScopeNamespace,
|
||||
ResponseKind: &metav1.GroupVersionKind{
|
||||
Group: "apps",
|
||||
Version: "v1",
|
||||
Kind: "Deployment",
|
||||
},
|
||||
ShortNames: []string{"deploy"},
|
||||
Verbs: []string{"create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"},
|
||||
Subresources: []apidiscoveryv2beta1.APISubresourceDiscovery{{
|
||||
Subresource: "status",
|
||||
ResponseKind: &metav1.GroupVersionKind{
|
||||
Group: "apps",
|
||||
Version: "v1",
|
||||
Kind: "Deployment",
|
||||
},
|
||||
Verbs: []string{"create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
}, {
|
||||
name: "Test with subresource with no parent",
|
||||
resources: []metav1.APIResource{
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue