mirror of
https://github.com/argoproj/argo-cd
synced 2026-05-24 01:38:43 +00:00
Check app label on client side before deleting app resource
This commit is contained in:
parent
66b0702c24
commit
19c5ecdbfa
2 changed files with 15 additions and 9 deletions
|
|
@ -97,7 +97,7 @@ func (s *Server) Delete(ctx context.Context, q *DeleteApplicationRequest) (*Appl
|
|||
return nil, err
|
||||
}
|
||||
config := clst.RESTConfig()
|
||||
err = kube.DeleteResourceWithLabel(config, namespace, fmt.Sprintf("%s=%s", common.LabelApplicationName, q.Name))
|
||||
err = kube.DeleteResourceWithLabel(config, namespace, common.LabelApplicationName, q.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ func GetResourcesWithLabel(config *rest.Config, namespace string, labelName stri
|
|||
}
|
||||
|
||||
// DeleteResourceWithLabel delete all resources which match to specified label selector
|
||||
func DeleteResourceWithLabel(config *rest.Config, namespace string, labelSelector string) error {
|
||||
func DeleteResourceWithLabel(config *rest.Config, namespace string, labelName string, labelValue string) error {
|
||||
dynClientPool := dynamic.NewDynamicClientPool(config)
|
||||
disco, err := discovery.NewDiscoveryClientForConfig(config)
|
||||
if err != nil {
|
||||
|
|
@ -162,21 +162,27 @@ func DeleteResourceWithLabel(config *rest.Config, namespace string, labelSelecto
|
|||
if deleteCollectionSupported {
|
||||
err = dclient.Resource(&apiResource, namespace).DeleteCollection(&metav1.DeleteOptions{
|
||||
PropagationPolicy: &propagationPolicy,
|
||||
}, metav1.ListOptions{LabelSelector: labelSelector})
|
||||
}, metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", labelName, labelValue)})
|
||||
if err != nil && !apierr.IsNotFound(err) {
|
||||
return err
|
||||
}
|
||||
} else if deleteSupported {
|
||||
items, err := dclient.Resource(&apiResource, namespace).List(metav1.ListOptions{LabelSelector: labelSelector})
|
||||
items, err := dclient.Resource(&apiResource, namespace).List(metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", labelName, labelValue)})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, item := range items.(*unstructured.UnstructuredList).Items {
|
||||
err = dclient.Resource(&apiResource, namespace).Delete(item.GetName(), &metav1.DeleteOptions{
|
||||
PropagationPolicy: &propagationPolicy,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
// apply client side filtering since not every kubernetes API supports label filtering
|
||||
labels := item.GetLabels()
|
||||
if labels != nil {
|
||||
if value, ok := labels[labelName]; ok && value == labelValue {
|
||||
err = dclient.Resource(&apiResource, namespace).Delete(item.GetName(), &metav1.DeleteOptions{
|
||||
PropagationPolicy: &propagationPolicy,
|
||||
})
|
||||
if err != nil && !apierr.IsNotFound(err) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue