mirror of https://github.com/k3s-io/k3s
Merge pull request #46430 from sttts/sttts-fix-cdr-deletion-panic
Automatic merge from submit-queue (batch tested with PRs 44774, 46266, 46248, 46403, 46430) apiextensions: fix nil dereference during deletion The returned condition was possibly nil and we dereferenced it.pull/6/head
commit
714ac7c95e
|
@ -131,7 +131,7 @@ func (c *CRDFinalizer) sync(key string) error {
|
|||
// Since we control the endpoints, we know that delete collection works. No need to delete if not established.
|
||||
if apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) {
|
||||
cond, deleteErr := c.deleteInstances(crd)
|
||||
apiextensions.SetCRDCondition(crd, *cond)
|
||||
apiextensions.SetCRDCondition(crd, cond)
|
||||
if deleteErr != nil {
|
||||
crd, err = c.crdClient.CustomResourceDefinitions().UpdateStatus(crd)
|
||||
if err != nil {
|
||||
|
@ -158,19 +158,25 @@ func (c *CRDFinalizer) sync(key string) error {
|
|||
return c.crdClient.CustomResourceDefinitions().Delete(crd.Name, nil)
|
||||
}
|
||||
|
||||
func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefinition) (*apiextensions.CustomResourceDefinitionCondition, error) {
|
||||
func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefinition) (apiextensions.CustomResourceDefinitionCondition, error) {
|
||||
// Now we can start deleting items. While it would be ideal to use a REST API client, doing so
|
||||
// could incorrectly delete a ThirdPartyResource with the same URL as the CustomResource, so we go
|
||||
// directly to the storage instead. Since we control the storage, we know that delete collection works.
|
||||
crClient := c.crClientGetter.GetCustomResourceListerCollectionDeleter(crd.UID)
|
||||
if crClient == nil {
|
||||
return nil, fmt.Errorf("unable to find a custom resource client for %s.%s", crd.Status.AcceptedNames.Plural, crd.Spec.Group)
|
||||
err := fmt.Errorf("unable to find a custom resource client for %s.%s", crd.Status.AcceptedNames.Plural, crd.Spec.Group)
|
||||
return apiextensions.CustomResourceDefinitionCondition{
|
||||
Type: apiextensions.Terminating,
|
||||
Status: apiextensions.ConditionTrue,
|
||||
Reason: "InstanceDeletionFailed",
|
||||
Message: fmt.Sprintf("could not list instances: %v", err),
|
||||
}, err
|
||||
}
|
||||
|
||||
ctx := genericapirequest.NewContext()
|
||||
allResources, err := crClient.List(ctx, nil)
|
||||
if err != nil {
|
||||
return &apiextensions.CustomResourceDefinitionCondition{
|
||||
return apiextensions.CustomResourceDefinitionCondition{
|
||||
Type: apiextensions.Terminating,
|
||||
Status: apiextensions.ConditionTrue,
|
||||
Reason: "InstanceDeletionFailed",
|
||||
|
@ -198,7 +204,7 @@ func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefiniti
|
|||
}
|
||||
}
|
||||
if deleteError := utilerrors.NewAggregate(deleteErrors); deleteError != nil {
|
||||
return &apiextensions.CustomResourceDefinitionCondition{
|
||||
return apiextensions.CustomResourceDefinitionCondition{
|
||||
Type: apiextensions.Terminating,
|
||||
Status: apiextensions.ConditionTrue,
|
||||
Reason: "InstanceDeletionFailed",
|
||||
|
@ -221,14 +227,14 @@ func (c *CRDFinalizer) deleteInstances(crd *apiextensions.CustomResourceDefiniti
|
|||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return &apiextensions.CustomResourceDefinitionCondition{
|
||||
return apiextensions.CustomResourceDefinitionCondition{
|
||||
Type: apiextensions.Terminating,
|
||||
Status: apiextensions.ConditionTrue,
|
||||
Reason: "InstanceDeletionCheck",
|
||||
Message: fmt.Sprintf("could not confirm zero CustomResources remaining: %v", err),
|
||||
}, err
|
||||
}
|
||||
return &apiextensions.CustomResourceDefinitionCondition{
|
||||
return apiextensions.CustomResourceDefinitionCondition{
|
||||
Type: apiextensions.Terminating,
|
||||
Status: apiextensions.ConditionFalse,
|
||||
Reason: "InstanceDeletionCompleted",
|
||||
|
|
Loading…
Reference in New Issue