kubectl should always set orphanDependents=false for cascading deletion

This commit is contained in:
nikhiljindal 2017-01-26 19:15:59 -08:00
parent 17375fc59f
commit 78ae193de6
2 changed files with 17 additions and 4 deletions

View File

@ -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")

View File

@ -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()
} }