diff --git a/docs/metal_interconnections_delete.md b/docs/metal_interconnections_delete.md index 25baabf4..e8b0c17b 100644 --- a/docs/metal_interconnections_delete.md +++ b/docs/metal_interconnections_delete.md @@ -4,7 +4,7 @@ Deletes a interconnection. ### Synopsis -Deletes the specified interconnection. +Deletes the specified interconnection. Use --force to skip confirmation ``` metal interconnections delete -i [flags] @@ -15,11 +15,15 @@ metal interconnections delete -i [flags] ``` # Deletes the specified interconnection: metal interconnections delete -i 7ec86e23-8dcf-48ed-bd9b-c25c20958277 + > + ✔ Are you sure you want to delete device 7ec86e23-8dcf-48ed-bd9b-c25c20958277 [Y/n]: Y + ``` ### Options ``` + -f, --force Skips confirmation for the interconnection deletion. -h, --help help for delete -i, --id string The UUID of the interconnection. ``` diff --git a/internal/interconnections/delete.go b/internal/interconnections/delete.go index 2a59a9c1..4dd98b20 100644 --- a/internal/interconnections/delete.go +++ b/internal/interconnections/delete.go @@ -3,23 +3,44 @@ package interconnections import ( "context" "fmt" + "strings" "github.com/spf13/cobra" ) func (c *Client) Delete() *cobra.Command { - var connectionID string + var connectionID, confirmation string + var force bool deleteConnectionCmd := &cobra.Command{ Use: `delete -i `, Short: "Deletes a interconnection.", - Long: "Deletes the specified interconnection.", + Long: "Deletes the specified interconnection. Use --force to skip confirmation", Example: ` # Deletes the specified interconnection: - metal interconnections delete -i 7ec86e23-8dcf-48ed-bd9b-c25c20958277`, + metal interconnections delete -i 7ec86e23-8dcf-48ed-bd9b-c25c20958277 + > + ✔ Are you sure you want to delete device 7ec86e23-8dcf-48ed-bd9b-c25c20958277 [Y/n]: Y +`, RunE: func(cmd *cobra.Command, args []string) error { cmd.SilenceUsage = true + if !force { + fmt.Printf("Are you sure you want to delete device %s [Y/n]: ", connectionID) + + _, err := fmt.Scanln(&confirmation) + if err != nil { + fmt.Println("Error reading confirmation:", err) + return nil + } + + confirmation = strings.TrimSpace(strings.ToLower(confirmation)) + if confirmation != "yes" && confirmation != "y" { + fmt.Println("Interconnection deletion cancelled.") + return nil + } + } + _, _, err := c.Service.DeleteInterconnection(context.Background(), connectionID).Execute() if err != nil { return err @@ -31,6 +52,7 @@ func (c *Client) Delete() *cobra.Command { } deleteConnectionCmd.Flags().StringVarP(&connectionID, "id", "i", "", "The UUID of the interconnection.") + deleteConnectionCmd.Flags().BoolVarP(&force, "force", "f", false, "Skips confirmation for the interconnection deletion.") _ = deleteConnectionCmd.MarkFlagRequired("id") return deleteConnectionCmd diff --git a/test/e2e/devices/devicecreateflagstest/device_create_flags_test.go b/test/e2e/devices/devicecreateflagstest/device_create_flags_test.go index d13a48d4..08920771 100644 --- a/test/e2e/devices/devicecreateflagstest/device_create_flags_test.go +++ b/test/e2e/devices/devicecreateflagstest/device_create_flags_test.go @@ -39,7 +39,7 @@ func TestCli_Devices_Create_Flags(t *testing.T) { want: &cobra.Command{}, cmdFunc: func(t *testing.T, c *cobra.Command) { root := c.Root() - projectName := "metal-cli-device-create-flags" + helper.GenerateRandomString(5) + projectName := "metal-cli-device-create-flags-" + helper.GenerateRandomString(5) project := helper.CreateTestProject(t, projectName) root.SetArgs([]string{subCommand, "create", "-p", project.GetId(), "-P", "m3.small.x86", "-m", "da", "-H", "metal-cli-create-flags-dev", "--operating-system", "custom_ipxe", "--always-pxe=true", "--ipxe-script-url", "https://boot.netboot.xyz/"}) diff --git a/test/e2e/devices/devicecreatetest/device_create_test.go b/test/e2e/devices/devicecreatetest/device_create_test.go index cdd5b435..8b200800 100644 --- a/test/e2e/devices/devicecreatetest/device_create_test.go +++ b/test/e2e/devices/devicecreatetest/device_create_test.go @@ -41,10 +41,10 @@ func TestCli_Devices_Create(t *testing.T) { want: &cobra.Command{}, cmdFunc: func(t *testing.T, c *cobra.Command) { root := c.Root() - projectName := "metal-cli-device-create" + randomId + projectName := "metal-cli-device-create-" + randomId project := helper.CreateTestProject(t, projectName) - deviceName := "metal-cli-create-dev" + randomId + deviceName := "metal-cli-create-dev-" + randomId root.SetArgs([]string{subCommand, "create", "-p", project.GetId(), "-P", "m3.small.x86", "-m", "da", "-O", "ubuntu_20_04", "-H", deviceName}) out := helper.ExecuteAndCaptureOutput(t, root) diff --git a/test/e2e/ipstest/ips_get_test.go b/test/e2e/ipstest/ips_get_test.go index 0f1ef87b..87ca372c 100644 --- a/test/e2e/ipstest/ips_get_test.go +++ b/test/e2e/ipstest/ips_get_test.go @@ -41,7 +41,7 @@ func TestCli_Ips_Get(t *testing.T) { t.Skip("Skipping this test because someCondition is true") } root := c.Root() - projectName := "metal-cli-ips-get" + helper.GenerateRandomString(5) + projectName := "metal-cli-ips-get-" + helper.GenerateRandomString(5) project := helper.CreateTestProject(t, projectName) ipsId, err = helper.CreateTestIps(t, project.GetId(), 1, "public_ipv4") if len(ipsId) != 0 { diff --git a/test/e2e/ipstest/ips_request_test.go b/test/e2e/ipstest/ips_request_test.go index aec6a565..80df69b7 100644 --- a/test/e2e/ipstest/ips_request_test.go +++ b/test/e2e/ipstest/ips_request_test.go @@ -39,7 +39,7 @@ func TestCli_Vlan_Create(t *testing.T) { t.Skip("Skipping temporarily for now") } root := c.Root() - projectName := "metal-cli-ips-get" + helper.GenerateRandomString(5) + projectName := "metal-cli-ips-get-" + helper.GenerateRandomString(5) project := helper.CreateTestProject(t, projectName) root.SetArgs([]string{subCommand, "request", "-p", project.GetId(), "-t", "public_ipv4", "-m", "da", "-q", "4"}) diff --git a/test/e2e/vlan/vlan_creat_test.go b/test/e2e/vlan/vlan_creat_test.go index 502fa28b..3941ca05 100644 --- a/test/e2e/vlan/vlan_creat_test.go +++ b/test/e2e/vlan/vlan_creat_test.go @@ -37,7 +37,7 @@ func TestCli_Vlan_Create(t *testing.T) { want: &cobra.Command{}, cmdFunc: func(t *testing.T, c *cobra.Command) { root := c.Root() - projectName := "metal-cli-vlan-create-pro" + helper.GenerateRandomString(5) + projectName := "metal-cli-vlan-create-pro-" + helper.GenerateRandomString(5) project := helper.CreateTestProject(t, projectName) if err != nil { t.Error(err) diff --git a/test/e2e/vlan/vlan_delete_test.go b/test/e2e/vlan/vlan_delete_test.go index bf442509..f1fab5d3 100644 --- a/test/e2e/vlan/vlan_delete_test.go +++ b/test/e2e/vlan/vlan_delete_test.go @@ -38,7 +38,7 @@ func TestCli_Vlan_Clean(t *testing.T) { want: &cobra.Command{}, cmdFunc: func(t *testing.T, c *cobra.Command) { root := c.Root() - projectName := "metal-cli-vlan-get-pro" + helper.GenerateRandomString(5) + projectName := "metal-cli-vlan-get-pro-" + helper.GenerateRandomString(5) project := helper.CreateTestProject(t, projectName) if err != nil { t.Error(err) diff --git a/test/e2e/vlan/vlan_get_test.go b/test/e2e/vlan/vlan_get_test.go index c27053d7..f8f62095 100644 --- a/test/e2e/vlan/vlan_get_test.go +++ b/test/e2e/vlan/vlan_get_test.go @@ -38,7 +38,7 @@ func TestCli_Vlan_Get(t *testing.T) { want: &cobra.Command{}, cmdFunc: func(t *testing.T, c *cobra.Command) { root := c.Root() - projectName := "metal-cli-vlan-delete-pro" + helper.GenerateRandomString(5) + projectName := "metal-cli-vlan-delete-pro-" + helper.GenerateRandomString(5) project := helper.CreateTestProject(t, projectName) if err != nil { t.Error(err)