From 538ed3b8471f1367aeb745267947c8bc0dec04f8 Mon Sep 17 00:00:00 2001 From: Janet Kuo Date: Fri, 22 Jun 2018 09:50:43 -0700 Subject: [PATCH] Remove kubectl delete hack that handles DaemonSet deletion --- pkg/kubectl/cmd/BUILD | 2 -- pkg/kubectl/cmd/delete.go | 65 --------------------------------------- 2 files changed, 67 deletions(-) diff --git a/pkg/kubectl/cmd/BUILD b/pkg/kubectl/cmd/BUILD index fd115482f0..8186991bd4 100644 --- a/pkg/kubectl/cmd/BUILD +++ b/pkg/kubectl/cmd/BUILD @@ -95,7 +95,6 @@ go_library( "//pkg/util/interrupt:go_default_library", "//pkg/util/taints:go_default_library", "//pkg/version:go_default_library", - "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", @@ -117,7 +116,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", diff --git a/pkg/kubectl/cmd/delete.go b/pkg/kubectl/cmd/delete.go index 089067d272..24ec2d3d73 100644 --- a/pkg/kubectl/cmd/delete.go +++ b/pkg/kubectl/cmd/delete.go @@ -24,15 +24,9 @@ import ( "github.com/golang/glog" "github.com/spf13/cobra" - appsv1 "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/uuid" - "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/dynamic" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -294,16 +288,6 @@ func (o *DeleteOptions) DeleteResult(r *resource.Result) error { } func (o *DeleteOptions) deleteResource(info *resource.Info, deleteOptions *metav1.DeleteOptions) error { - // TODO: Remove this in or after 1.12 release. - // Server version >= 1.11 no longer needs this hack. - mapping := info.ResourceMapping() - if mapping.Resource.GroupResource() == (schema.GroupResource{Group: "extensions", Resource: "daemonsets"}) || - mapping.Resource.GroupResource() == (schema.GroupResource{Group: "apps", Resource: "daemonsets"}) { - if err := updateDaemonSet(info.Namespace, info.Name, o.DynamicClient); err != nil { - return err - } - } - if err := resource.NewHelper(info.Client, info.Mapping).DeleteWithOptions(info.Namespace, info.Name, deleteOptions); err != nil { return cmdutil.AddSourceToErr("deleting", info.Source, err) } @@ -312,55 +296,6 @@ func (o *DeleteOptions) deleteResource(info *resource.Info, deleteOptions *metav return nil } -// TODO: Remove this in or after 1.12 release. -// Server version >= 1.11 no longer needs this hack. -func updateDaemonSet(namespace, name string, dynamicClient dynamic.Interface) error { - dsClient := dynamicClient.Resource(schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "daemonsets"}).Namespace(namespace) - obj, err := dsClient.Get(name, metav1.GetOptions{}) - if err != nil { - return err - } - ds := &appsv1.DaemonSet{} - if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, ds); err != nil { - return err - } - - // We set the nodeSelector to a random label. This label is nearly guaranteed - // to not be set on any node so the DameonSetController will start deleting - // daemon pods. Once it's done deleting the daemon pods, it's safe to delete - // the DaemonSet. - ds.Spec.Template.Spec.NodeSelector = map[string]string{ - string(uuid.NewUUID()): string(uuid.NewUUID()), - } - // force update to avoid version conflict - ds.ResourceVersion = "" - - out, err := runtime.DefaultUnstructuredConverter.ToUnstructured(ds) - if err != nil { - return err - } - if _, err = dsClient.Update(&unstructured.Unstructured{Object: out}); err != nil { - return err - } - - // Wait for the daemon set controller to kill all the daemon pods. - if err := wait.Poll(1*time.Second, 5*time.Minute, func() (bool, error) { - updatedObj, err := dsClient.Get(name, metav1.GetOptions{}) - if err != nil { - return false, nil - } - updatedDS := &appsv1.DaemonSet{} - if err := runtime.DefaultUnstructuredConverter.FromUnstructured(updatedObj.Object, ds); err != nil { - return false, nil - } - - return updatedDS.Status.CurrentNumberScheduled+updatedDS.Status.NumberMisscheduled == 0, nil - }); err != nil { - return err - } - return nil -} - // deletion printing is special because we do not have an object to print. // This mirrors name printer behavior func (o *DeleteOptions) PrintObj(info *resource.Info) {