kubectl should always set orphanDependents=false for cascading deletion
This commit is contained in:
		@@ -252,7 +252,8 @@ func ReapResult(r *resource.Result, f cmdutil.Factory, out io.Writer, isDefaultD
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			// If there is no reaper for this resources and the user didn't explicitly ask for stop.
 | 
								// If there is no reaper for this resources and the user didn't explicitly ask for stop.
 | 
				
			||||||
			if kubectl.IsNoSuchReaperError(err) && isDefaultDelete {
 | 
								if kubectl.IsNoSuchReaperError(err) && isDefaultDelete {
 | 
				
			||||||
				return deleteResource(info, out, shortOutput, mapper)
 | 
									// No client side reaper found. Let the server do cascading deletion.
 | 
				
			||||||
 | 
									return cascadingDeleteResource(info, out, shortOutput, mapper)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			return cmdutil.AddSourceToErr("reaping", info.Source, err)
 | 
								return cmdutil.AddSourceToErr("reaping", info.Source, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -292,7 +293,7 @@ func DeleteResult(r *resource.Result, out io.Writer, ignoreNotFound bool, shortO
 | 
				
			|||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		found++
 | 
							found++
 | 
				
			||||||
		return deleteResource(info, out, shortOutput, mapper)
 | 
							return deleteResource(info, out, shortOutput, mapper, nil)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -303,8 +304,14 @@ func DeleteResult(r *resource.Result, out io.Writer, ignoreNotFound bool, shortO
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func deleteResource(info *resource.Info, out io.Writer, shortOutput bool, mapper meta.RESTMapper) error {
 | 
					func cascadingDeleteResource(info *resource.Info, out io.Writer, shortOutput bool, mapper meta.RESTMapper) error {
 | 
				
			||||||
	if err := resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name); err != nil {
 | 
						falseVar := false
 | 
				
			||||||
 | 
						deleteOptions := &metav1.DeleteOptions{OrphanDependents: &falseVar}
 | 
				
			||||||
 | 
						return deleteResource(info, out, shortOutput, mapper, deleteOptions)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func deleteResource(info *resource.Info, out io.Writer, shortOutput bool, mapper meta.RESTMapper, deleteOptions *metav1.DeleteOptions) error {
 | 
				
			||||||
 | 
						if err := resource.NewHelper(info.Client, info.Mapping).DeleteWithOptions(info.Namespace, info.Name, deleteOptions); err != nil {
 | 
				
			||||||
		return cmdutil.AddSourceToErr("deleting", info.Source, err)
 | 
							return cmdutil.AddSourceToErr("deleting", info.Source, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, false, "deleted")
 | 
						cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, false, "deleted")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ import (
 | 
				
			|||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						"k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/fields"
 | 
						"k8s.io/apimachinery/pkg/fields"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
@@ -95,10 +96,15 @@ func (m *Helper) WatchSingle(namespace, name, resourceVersion string) (watch.Int
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Helper) Delete(namespace, name string) error {
 | 
					func (m *Helper) Delete(namespace, name string) error {
 | 
				
			||||||
 | 
						return m.DeleteWithOptions(namespace, name, nil)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *Helper) DeleteWithOptions(namespace, name string, options *metav1.DeleteOptions) error {
 | 
				
			||||||
	return m.RESTClient.Delete().
 | 
						return m.RESTClient.Delete().
 | 
				
			||||||
		NamespaceIfScoped(namespace, m.NamespaceScoped).
 | 
							NamespaceIfScoped(namespace, m.NamespaceScoped).
 | 
				
			||||||
		Resource(m.Resource).
 | 
							Resource(m.Resource).
 | 
				
			||||||
		Name(name).
 | 
							Name(name).
 | 
				
			||||||
 | 
							Body(options).
 | 
				
			||||||
		Do().
 | 
							Do().
 | 
				
			||||||
		Error()
 | 
							Error()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user