Skip to content

Commit 19c44fe

Browse files
committed
fix: deletion of duplicated resource
1 parent 547c756 commit 19c44fe

File tree

4 files changed

+35
-13
lines changed

4 files changed

+35
-13
lines changed

internal/duplicators/deployment_duplicator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (c *DeploymentClient) Duplicate(obj core.DuplicableObject, opts core.Duplic
9696
if err != nil {
9797
return err
9898
}
99-
return StartInteractiveShell(c.ctx, c.clientset, pod)
99+
return StartInteractiveShell(c.ctx, c.clientset, pod, duplicatedDeploy)
100100
}
101101

102102
return nil

internal/duplicators/pod_duplicator.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,14 @@ func (c *PodClient) Duplicate(obj core.DuplicableObject, opts core.DuplicateOpts
8080
}
8181

8282
// create the new pod
83-
_, err = c.clientset.CoreV1().Pods(pod.Namespace).Create(c.ctx, &newPod, metav1.CreateOptions{})
83+
duplicatedPod, err := c.clientset.CoreV1().Pods(pod.Namespace).Create(c.ctx, &newPod, metav1.CreateOptions{})
8484
if err != nil {
8585
return err
8686
}
8787
fmt.Printf("pod %q duplicated in %q\n", obj.Name, newName)
8888

8989
if opts.StartInteractiveShell {
90-
return StartInteractiveShell(c.ctx, c.clientset, newPod)
90+
return StartInteractiveShell(c.ctx, c.clientset, newPod, duplicatedPod)
9191
}
9292

9393
return nil

internal/duplicators/statefulset_duplicator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (c *StatefulSetClient) Duplicate(obj core.DuplicableObject, opts core.Dupli
9696
if err != nil {
9797
return err
9898
}
99-
return StartInteractiveShell(c.ctx, c.clientset, pod)
99+
return StartInteractiveShell(c.ctx, c.clientset, pod, duplicatedStatefulSet)
100100
}
101101

102102
return nil

internal/duplicators/utils.go

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,20 @@ import (
2121
"fmt"
2222
"github.com/charmbracelet/huh"
2323
"github.com/telemaco019/duplik8s/internal/utils"
24+
appsv1 "k8s.io/api/apps/v1"
2425
corev1 "k8s.io/api/core/v1"
2526
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27+
"k8s.io/apimachinery/pkg/runtime"
2628
"k8s.io/client-go/kubernetes"
2729
"time"
2830
)
2931

30-
func StartInteractiveShell(ctx context.Context, clientset *kubernetes.Clientset, pod corev1.Pod) error {
32+
func StartInteractiveShell(
33+
ctx context.Context,
34+
clientset *kubernetes.Clientset,
35+
pod corev1.Pod,
36+
duplicatedObject runtime.Object,
37+
) error {
3138
// wait for the pod to be ready
3239
fmt.Printf("waiting for the duplicated pod %q to be ready...\n", pod.Name)
3340
err := utils.WaitUntilPodReady(ctx, clientset, pod, 60*time.Second)
@@ -43,25 +50,40 @@ func StartInteractiveShell(ctx context.Context, clientset *kubernetes.Clientset,
4350
}
4451

4552
// prompt for deletion
46-
var deletePod = true
53+
var confirmDelete = true
4754
err = huh.NewConfirm().Title(
48-
fmt.Sprintf("Do you want to delete the duplicated pod %q?", pod.Namespace),
49-
).Value(&deletePod).Run()
55+
"Do you want to delete the duplicated resource?",
56+
).Value(&confirmDelete).Run()
5057
if err != nil {
5158
return err
5259
}
53-
if deletePod {
54-
if err = clientset.CoreV1().Pods(pod.Namespace).Delete(ctx, pod.Name, metav1.DeleteOptions{}); err != nil {
55-
return fmt.Errorf("failed to delete pod: %w", err)
60+
if confirmDelete {
61+
// Delete the duplicated object based on its type
62+
err = deleteResource(ctx, clientset, duplicatedObject)
63+
if err != nil {
64+
return err
5665
}
57-
fmt.Println("duplicated pod deleted.")
66+
fmt.Println("duplicated resource deleted.")
5867
} else {
59-
fmt.Println("pod retained.")
68+
fmt.Println("duplicated resource retained.")
6069
}
6170

6271
return nil
6372
}
6473

74+
func deleteResource(ctx context.Context, clientset *kubernetes.Clientset, duplicatedObject runtime.Object) error {
75+
switch obj := duplicatedObject.(type) {
76+
case *corev1.Pod:
77+
return clientset.CoreV1().Pods(obj.Namespace).Delete(ctx, obj.Name, metav1.DeleteOptions{})
78+
case *appsv1.Deployment:
79+
return clientset.AppsV1().Deployments(obj.Namespace).Delete(ctx, obj.Name, metav1.DeleteOptions{})
80+
case *appsv1.StatefulSet:
81+
return clientset.AppsV1().StatefulSets(obj.Namespace).Delete(ctx, obj.Name, metav1.DeleteOptions{})
82+
default:
83+
return fmt.Errorf("unsupported duplicated object type: %T", obj)
84+
}
85+
}
86+
6587
func GetOwnedPod(
6688
ctx context.Context,
6789
client *kubernetes.Clientset,

0 commit comments

Comments
 (0)