diff --git a/cmd/storage-nvme-namespace.go b/cmd/storage-nvme-namespace.go index 740057e..892e1f9 100644 --- a/cmd/storage-nvme-namespace.go +++ b/cmd/storage-nvme-namespace.go @@ -49,3 +49,37 @@ func newCreateNvmeNamespaceCommand() *cobra.Command { return cmd } + +func newDeleteNvmeNamespaceCommand() *cobra.Command { + name := "" + allowMissing := false + cmd := &cobra.Command{ + Use: "namespace", + Aliases: []string{"d"}, + Short: "Deletes nvme namespace", + Args: cobra.NoArgs, + Run: func(c *cobra.Command, args []string) { + addr, err := c.Flags().GetString(addrCmdLineArg) + cobra.CheckErr(err) + + timeout, err := c.Flags().GetDuration(timeoutCmdLineArg) + cobra.CheckErr(err) + + client, err := storage.New(addr) + cobra.CheckErr(err) + + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + err = client.DeleteNvmeNamespace(ctx, name, allowMissing) + cobra.CheckErr(err) + }, + } + + cmd.Flags().StringVar(&name, "name", "", "name of deleted namespace") + cmd.Flags().BoolVar(&allowMissing, "allowMissing", false, "cmd succeeds if attempts to delete a resource that is not present") + + cobra.CheckErr(cmd.MarkFlagRequired("name")) + + return cmd +} diff --git a/cmd/storage.go b/cmd/storage.go index 6106d7f..0b8c51e 100644 --- a/cmd/storage.go +++ b/cmd/storage.go @@ -104,6 +104,7 @@ func newDeleteNvmeCommand() *cobra.Command { } cmd.AddCommand(newDeleteNvmeSubsystemCommand()) + cmd.AddCommand(newDeleteNvmeNamespaceCommand()) return cmd } diff --git a/storage/nvme_namespace.go b/storage/nvme_namespace.go index 7720918..7cb26d2 100644 --- a/storage/nvme_namespace.go +++ b/storage/nvme_namespace.go @@ -36,3 +36,26 @@ func (c *Client) CreateNvmeNamespace( return response, err } + +// DeleteNvmeNamespace deletes an nvme namespace +func (c *Client) DeleteNvmeNamespace( + ctx context.Context, + name string, + allowMissing bool, +) error { + conn, connClose, err := c.connector.NewConn() + if err != nil { + return err + } + defer connClose() + + client := c.createClient(conn) + _, err = client.DeleteNvmeNamespace( + ctx, + &pb.DeleteNvmeNamespaceRequest{ + Name: name, + AllowMissing: allowMissing, + }) + + return err +}