Skip to content

Commit 00b465d

Browse files
committed
Update object upon deletion
If an object is deleted and the API responds with a resource, update the deleted object. This causes the object to be updated with the deletion timestamp. Signed-off-by: Kevin McDermott <[email protected]>
1 parent 7c50567 commit 00b465d

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

pkg/client/client_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import (
5151
"sigs.k8s.io/controller-runtime/examples/crd/pkg"
5252
"sigs.k8s.io/controller-runtime/pkg/cache"
5353
"sigs.k8s.io/controller-runtime/pkg/client"
54+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
5455
)
5556

5657
func deleteDeployment(ctx context.Context, dep *appsv1.Deployment, ns string) {
@@ -1733,6 +1734,7 @@ U5wwSivyi7vmegHKmblOzNVKA5qPO8zWzqBC
17331734
nodeName := node.Name
17341735
err = cl.Delete(ctx, node)
17351736
Expect(err).NotTo(HaveOccurred())
1737+
Expect(node.ObjectMeta.DeletionTimestamp).To(BeNil())
17361738

17371739
By("validating the Node no longer exists")
17381740
_, err = clientset.CoreV1().Nodes().Get(ctx, nodeName, metav1.GetOptions{})
@@ -1749,6 +1751,36 @@ U5wwSivyi7vmegHKmblOzNVKA5qPO8zWzqBC
17491751
Expect(err).To(HaveOccurred())
17501752
})
17511753

1754+
It("should update the resource when deleting if it receives a response", func() {
1755+
cl, err := client.New(cfg, client.Options{})
1756+
Expect(err).NotTo(HaveOccurred())
1757+
Expect(cl).NotTo(BeNil())
1758+
1759+
By("initially creating a Node")
1760+
node, err := clientset.CoreV1().Nodes().Create(ctx, node, metav1.CreateOptions{})
1761+
Expect(err).NotTo(HaveOccurred())
1762+
1763+
By("adding a finalizer we prevent the node from being deleted immediately")
1764+
controllerutil.AddFinalizer(node, "example.com/test")
1765+
node, err = clientset.CoreV1().Nodes().Update(ctx, node, metav1.UpdateOptions{})
1766+
Expect(err).NotTo(HaveOccurred())
1767+
1768+
By("deleting the Node")
1769+
nodeName := node.Name
1770+
err = cl.Delete(context.TODO(), node)
1771+
Expect(err).NotTo(HaveOccurred())
1772+
Expect(node.ObjectMeta.DeletionTimestamp).NotTo(BeNil())
1773+
1774+
By("removing the finalizer")
1775+
controllerutil.RemoveFinalizer(node, "example.com/test")
1776+
_, err = clientset.CoreV1().Nodes().Update(ctx, node, metav1.UpdateOptions{})
1777+
Expect(err).NotTo(HaveOccurred())
1778+
1779+
By("validating the Node no longer exists")
1780+
_, err = clientset.CoreV1().Nodes().Get(ctx, nodeName, metav1.GetOptions{})
1781+
Expect(err).To(HaveOccurred())
1782+
})
1783+
17521784
PIt("should fail if the object doesn't have meta", func() {
17531785

17541786
})

pkg/client/dryrun_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,9 @@ var _ = Describe("DryRunClient", func() {
179179
Expect(actual).To(BeEquivalentTo(dep))
180180
})
181181

182-
It("should not delete objects", func(ctx SpecContext) {
183-
Expect(getClient().Delete(ctx, dep)).NotTo(HaveOccurred())
182+
It("should not delete objects", func() {
183+
changedDep := dep.DeepCopy()
184+
Expect(getClient().Delete(ctx, changedDep)).NotTo(HaveOccurred())
184185

185186
actual, err := clientset.AppsV1().Deployments(ns).Get(ctx, dep.Name, metav1.GetOptions{})
186187
Expect(err).NotTo(HaveOccurred())
@@ -191,7 +192,8 @@ var _ = Describe("DryRunClient", func() {
191192
It("should not delete objects with opts", func(ctx SpecContext) {
192193
opts := &client.DeleteOptions{DryRun: []string{"Bye", "Pippa"}}
193194

194-
Expect(getClient().Delete(ctx, dep, opts)).NotTo(HaveOccurred())
195+
changedDep := dep.DeepCopy()
196+
Expect(getClient().Delete(ctx, changedDep, opts)).NotTo(HaveOccurred())
195197

196198
actual, err := clientset.AppsV1().Deployments(ns).Get(ctx, dep.Name, metav1.GetOptions{})
197199
Expect(err).NotTo(HaveOccurred())

pkg/client/typed_client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (c *typedClient) Delete(ctx context.Context, obj Object, opts ...DeleteOpti
8787
Name(o.name).
8888
Body(deleteOpts.AsDeleteOptions()).
8989
Do(ctx).
90-
Error()
90+
Into(obj)
9191
}
9292

9393
// DeleteAllOf implements client.Client.

0 commit comments

Comments
 (0)