Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: opiproject/godpu
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: fca0026dca86e771f4d9e1c6b7e5b5a6cca7ea13
Choose a base ref
..
head repository: opiproject/godpu
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 9ba0ec1c06e09918446183120932e3d588c00440
Choose a head ref
92 changes: 92 additions & 0 deletions cmd/storage-virtio-blk.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2024 Intel Corporation

// Package cmd implements the CLI commands
package cmd

import (
"context"

"github.com/opiproject/godpu/storage"
"github.com/spf13/cobra"
)

func newCreateVirtioBlkCommand() *cobra.Command {
id := ""
volume := ""
var port uint
var pf uint
var vf uint
var maxIoQPS uint
cmd := &cobra.Command{
Use: "blk",
Aliases: []string{"b"},
Short: "Creates virtio-blk controller",
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()

response, err := client.CreateVirtioBlk(ctx, id, volume, port, pf, vf, maxIoQPS)
cobra.CheckErr(err)

printResponse(response.Name)
},
}

cmd.Flags().StringVar(&id, "id", "", "id for created resource. Assigned by server if omitted.")
cmd.Flags().StringVar(&volume, "volume", "", "volume name to attach to virtio-blk controller")
cmd.Flags().UintVar(&port, "port", 0, "port_id address part of the created controller")
cmd.Flags().UintVar(&pf, "pf", 0, "physical_function address part of the created controller")
cmd.Flags().UintVar(&vf, "vf", 0, "virtual_function address part of the created controller")
cmd.Flags().UintVar(&maxIoQPS, "max-io-qps", 0, "max io queue pairs")

cobra.CheckErr(cmd.MarkFlagRequired("volume"))
cobra.CheckErr(cmd.MarkFlagRequired("pf"))
cobra.CheckErr(cmd.MarkFlagRequired("vf"))

return cmd
}

func newDeleteVirtioBlkCommand() *cobra.Command {
name := ""
allowMissing := false
cmd := &cobra.Command{
Use: "blk",
Aliases: []string{"b"},
Short: "Deletes virtio-blk controller",
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.DeleteVirtioBlk(ctx, name, allowMissing)
cobra.CheckErr(err)
},
}

cmd.Flags().StringVar(&name, "name", "", "name of deleted virtio-blk controller")
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
}
38 changes: 37 additions & 1 deletion cmd/storage.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2023 Intel Corporation
// Copyright (C) 2023-2024 Intel Corporation

// Package cmd implements the CLI commands
package cmd
@@ -52,6 +52,7 @@ func newStorageCreateCommand() *cobra.Command {
}

cmd.AddCommand(newCreateNvmeCommand())
cmd.AddCommand(newCreateVirtioCommand())

return cmd
}
@@ -75,6 +76,23 @@ func newCreateNvmeCommand() *cobra.Command {
return cmd
}

func newCreateVirtioCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "virtio",
Aliases: []string{"v"},
Short: "Creates virtio resource",
Args: cobra.NoArgs,
Run: func(c *cobra.Command, args []string) {
err := c.Help()
cobra.CheckErr(err)
},
}

cmd.AddCommand(newCreateVirtioBlkCommand())

return cmd
}

func newStorageDeleteCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "delete",
@@ -88,6 +106,7 @@ func newStorageDeleteCommand() *cobra.Command {
}

cmd.AddCommand(newDeleteNvmeCommand())
cmd.AddCommand(newDeleteVirtioCommand())

return cmd
}
@@ -111,6 +130,23 @@ func newDeleteNvmeCommand() *cobra.Command {
return cmd
}

func newDeleteVirtioCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "virtio",
Aliases: []string{"v"},
Short: "Deletes virtio resource",
Args: cobra.NoArgs,
Run: func(c *cobra.Command, args []string) {
err := c.Help()
cobra.CheckErr(err)
},
}

cmd.AddCommand(newDeleteVirtioBlkCommand())

return cmd
}

func printResponse(response string) {
fmt.Fprintln(os.Stdout, response)
}
23 changes: 15 additions & 8 deletions storage/client.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2023 Intel Corporation
// Copyright (C) 2023-2024 Intel Corporation

// Package storage implements the go library for OPI to be used in storage, for example, CSI drivers
package storage
@@ -10,13 +10,17 @@ import (
"google.golang.org/grpc"
)

// CreateNvmeClient defines the function type used to retrieve FrontendNvmeServiceClient
type CreateNvmeClient func(cc grpc.ClientConnInterface) pb.FrontendNvmeServiceClient
// CreateFrontendNvmeClient defines the function type used to retrieve FrontendNvmeServiceClient
type CreateFrontendNvmeClient func(cc grpc.ClientConnInterface) pb.FrontendNvmeServiceClient

// CreateFrontendVirtioBlkClient defines the function type used to retrieve FrontendVirtioBlkServiceClient
type CreateFrontendVirtioBlkClient func(cc grpc.ClientConnInterface) pb.FrontendVirtioBlkServiceClient

// Client is used for managing storage devices on OPI server
type Client struct {
connector grpcOpi.Connector
createClient CreateNvmeClient
connector grpcOpi.Connector
createFrontendNvmeClient CreateFrontendNvmeClient
createFrontendVirtioBlkClient CreateFrontendVirtioBlkClient
}

// New creates a new instance of Client
@@ -29,16 +33,19 @@ func New(addr string) (*Client, error) {
return NewWithArgs(
connector,
pb.NewFrontendNvmeServiceClient,
pb.NewFrontendVirtioBlkServiceClient,
)
}

// NewWithArgs creates a new instance of Client with non-default members
func NewWithArgs(
connector grpcOpi.Connector,
createClient CreateNvmeClient,
createFrontendNvmeClient CreateFrontendNvmeClient,
createFrontendVirtioBlkClient CreateFrontendVirtioBlkClient,
) (*Client, error) {
return &Client{
connector: connector,
createClient: createClient,
connector: connector,
createFrontendNvmeClient: createFrontendNvmeClient,
createFrontendVirtioBlkClient: createFrontendVirtioBlkClient,
}, nil
}
8 changes: 4 additions & 4 deletions storage/nvme_controller.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2023 Intel Corporation
// Copyright (C) 2023-2024 Intel Corporation

// Package storage implements the go library for OPI to be used in storage, for example, CSI drivers
package storage
@@ -36,7 +36,7 @@ func (c *Client) CreateNvmeTCPController(
return nil, fmt.Errorf("invalid ip address format: %v", ip)
}

client := c.createClient(conn)
client := c.createFrontendNvmeClient(conn)
response, err := client.CreateNvmeController(
ctx,
&pb.CreateNvmeControllerRequest{
@@ -71,7 +71,7 @@ func (c *Client) CreateNvmePcieController(
}
defer connClose()

client := c.createClient(conn)
client := c.createFrontendNvmeClient(conn)
response, err := client.CreateNvmeController(
ctx,
&pb.CreateNvmeControllerRequest{
@@ -106,7 +106,7 @@ func (c *Client) DeleteNvmeController(
}
defer connClose()

client := c.createClient(conn)
client := c.createFrontendNvmeClient(conn)
_, err = client.DeleteNvmeController(
ctx,
&pb.DeleteNvmeControllerRequest{
5 changes: 4 additions & 1 deletion storage/nvme_controller_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2023 Intel Corporation
// Copyright (C) 2023-2024 Intel Corporation

// Package storage implements the go library for OPI to be used in storage, for example, CSI drivers
package storage
@@ -143,6 +143,7 @@ func TestCreateNvmeTCPController(t *testing.T) {
func(grpc.ClientConnInterface) pb.FrontendNvmeServiceClient {
return mockClient
},
pb.NewFrontendVirtioBlkServiceClient,
)

response, err := c.CreateNvmeTCPController(
@@ -243,6 +244,7 @@ func TestCreateNvmePcieController(t *testing.T) {
func(grpc.ClientConnInterface) pb.FrontendNvmeServiceClient {
return mockClient
},
pb.NewFrontendVirtioBlkServiceClient,
)

response, err := c.CreateNvmePcieController(
@@ -319,6 +321,7 @@ func TestDeleteNvmeController(t *testing.T) {
func(grpc.ClientConnInterface) pb.FrontendNvmeServiceClient {
return mockClient
},
pb.NewFrontendVirtioBlkServiceClient,
)

err := c.DeleteNvmeController(ctx, testControllerName, true)
6 changes: 3 additions & 3 deletions storage/nvme_namespace.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2023 Intel Corporation
// Copyright (C) 2023-2024 Intel Corporation

// Package storage implements the go library for OPI to be used in storage, for example, CSI drivers
package storage
@@ -21,7 +21,7 @@ func (c *Client) CreateNvmeNamespace(
}
defer connClose()

client := c.createClient(conn)
client := c.createFrontendNvmeClient(conn)
response, err := client.CreateNvmeNamespace(
ctx,
&pb.CreateNvmeNamespaceRequest{
@@ -49,7 +49,7 @@ func (c *Client) DeleteNvmeNamespace(
}
defer connClose()

client := c.createClient(conn)
client := c.createFrontendNvmeClient(conn)
_, err = client.DeleteNvmeNamespace(
ctx,
&pb.DeleteNvmeNamespaceRequest{
4 changes: 3 additions & 1 deletion storage/nvme_namespace_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2023 Intel Corporation
// Copyright (C) 2023-2024 Intel Corporation

// Package storage implements the go library for OPI to be used in storage, for example, CSI drivers
package storage
@@ -95,6 +95,7 @@ func TestCreateNvmeNamespace(t *testing.T) {
func(grpc.ClientConnInterface) pb.FrontendNvmeServiceClient {
return mockClient
},
pb.NewFrontendVirtioBlkServiceClient,
)

response, err := c.CreateNvmeNamespace(ctx, namespaceID, subsystem, volume)
@@ -166,6 +167,7 @@ func TestDeleteNvmeNamespace(t *testing.T) {
func(grpc.ClientConnInterface) pb.FrontendNvmeServiceClient {
return mockClient
},
pb.NewFrontendVirtioBlkServiceClient,
)

err := c.DeleteNvmeNamespace(ctx, testNamespaceName, true)
6 changes: 3 additions & 3 deletions storage/nvme_subsystem.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2023 Intel Corporation
// Copyright (C) 2023-2024 Intel Corporation

// Package storage implements the go library for OPI to be used in storage, for example, CSI drivers
package storage
@@ -21,7 +21,7 @@ func (c *Client) CreateNvmeSubsystem(
}
defer connClose()

client := c.createClient(conn)
client := c.createFrontendNvmeClient(conn)
response, err := client.CreateNvmeSubsystem(
ctx,
&pb.CreateNvmeSubsystemRequest{
@@ -49,7 +49,7 @@ func (c *Client) DeleteNvmeSubsystem(
}
defer connClose()

client := c.createClient(conn)
client := c.createFrontendNvmeClient(conn)
_, err = client.DeleteNvmeSubsystem(
ctx,
&pb.DeleteNvmeSubsystemRequest{
4 changes: 3 additions & 1 deletion storage/nvme_subsystem_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2023 Intel Corporation
// Copyright (C) 2023-2024 Intel Corporation

// Package storage implements the go library for OPI to be used in storage, for example, CSI drivers
package storage
@@ -94,6 +94,7 @@ func TestCreateNvmeSubsystem(t *testing.T) {
func(grpc.ClientConnInterface) pb.FrontendNvmeServiceClient {
return mockClient
},
pb.NewFrontendVirtioBlkServiceClient,
)

response, err := c.CreateNvmeSubsystem(ctx, subsystemID, nqn, hostnqn)
@@ -165,6 +166,7 @@ func TestDeleteNvmeSubsystem(t *testing.T) {
func(grpc.ClientConnInterface) pb.FrontendNvmeServiceClient {
return mockClient
},
pb.NewFrontendVirtioBlkServiceClient,
)

err := c.DeleteNvmeSubsystem(ctx, testSubsystemName, true)
Loading