@@ -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"
2425corev1 "k8s.io/api/core/v1"
2526metav1 "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
3239fmt .Printf ("waiting for the duplicated pod %q to be ready...\n " , pod .Name )
3340err := 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
4754err = 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 ()
5057if err != nil {
5158return 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
6271return 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+
6587func GetOwnedPod (
6688ctx context.Context ,
6789client * kubernetes.Clientset ,
0 commit comments