Skip to content

Commit

Permalink
rbd: expose the GroupControllerService
Browse files Browse the repository at this point in the history
When the GroupSnapGetInfo go-ceph function is supported by librbd, the
Group Controller Servive and VolumeGroupSnapshot capabilities can be
exposed to the Container Orchestrator.

Signed-off-by: Niels de Vos <[email protected]>
  • Loading branch information
nixpanic committed Oct 18, 2024
1 parent dacf907 commit f31e391
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 17 deletions.
15 changes: 15 additions & 0 deletions internal/rbd/driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
csiaddons "github.com/ceph/ceph-csi/internal/csi-addons/server"
csicommon "github.com/ceph/ceph-csi/internal/csi-common"
"github.com/ceph/ceph-csi/internal/rbd"
"github.com/ceph/ceph-csi/internal/rbd/features"
"github.com/ceph/ceph-csi/internal/util"
"github.com/ceph/ceph-csi/internal/util/k8s"
"github.com/ceph/ceph-csi/internal/util/log"
Expand Down Expand Up @@ -123,6 +124,19 @@ func (r *Driver) Run(conf *util.Config) {
csi.VolumeCapability_AccessMode_SINGLE_NODE_SINGLE_WRITER,
csi.VolumeCapability_AccessMode_SINGLE_NODE_MULTI_WRITER,
})

// GroupSnapGetInfo is used within the VolumeGroupSnapshot implementation
vgsSupported, vgsErr := features.SupportsGroupSnapGetInfo()
if vgsSupported {
r.cd.AddGroupControllerServiceCapabilities([]csi.GroupControllerServiceCapability_RPC_Type{
csi.GroupControllerServiceCapability_RPC_CREATE_DELETE_GET_VOLUME_GROUP_SNAPSHOT,
})
} else {
log.DefaultLog("not enabling VolumeGroupSnapshot service capability")
}
if vgsErr != nil {
log.ErrorLogMsg("failed detecting VolumeGroupSnapshot support: %v", vgsErr)
}
}

if k8s.RunsOnKubernetes() && conf.IsNodeServer {
Expand Down Expand Up @@ -178,6 +192,7 @@ func (r *Driver) Run(conf *util.Config) {
IS: r.ids,
CS: r.cs,
NS: r.ns,
GS: r.cs,
}
s.Start(conf.Endpoint, srv, csicommon.MiddlewareServerOptionConfig{
LogSlowOpInterval: conf.LogSlowOpInterval,
Expand Down
50 changes: 33 additions & 17 deletions internal/rbd/identityserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"context"

csicommon "github.com/ceph/ceph-csi/internal/csi-common"
"github.com/ceph/ceph-csi/internal/rbd/features"

"github.com/container-storage-interface/spec/lib/go/csi"
)
Expand All @@ -35,29 +36,44 @@ func (is *IdentityServer) GetPluginCapabilities(
ctx context.Context,
req *csi.GetPluginCapabilitiesRequest,
) (*csi.GetPluginCapabilitiesResponse, error) {
return &csi.GetPluginCapabilitiesResponse{
Capabilities: []*csi.PluginCapability{
{
Type: &csi.PluginCapability_Service_{
Service: &csi.PluginCapability_Service{
Type: csi.PluginCapability_Service_CONTROLLER_SERVICE,
},
caps := []*csi.PluginCapability{
{
Type: &csi.PluginCapability_Service_{
Service: &csi.PluginCapability_Service{
Type: csi.PluginCapability_Service_CONTROLLER_SERVICE,
},
},
{
Type: &csi.PluginCapability_VolumeExpansion_{
VolumeExpansion: &csi.PluginCapability_VolumeExpansion{
Type: csi.PluginCapability_VolumeExpansion_ONLINE,
},
},
{
Type: &csi.PluginCapability_VolumeExpansion_{
VolumeExpansion: &csi.PluginCapability_VolumeExpansion{
Type: csi.PluginCapability_VolumeExpansion_ONLINE,
},
},
{
Type: &csi.PluginCapability_Service_{
Service: &csi.PluginCapability_Service{
Type: csi.PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS,
},
},
{
Type: &csi.PluginCapability_Service_{
Service: &csi.PluginCapability_Service{
Type: csi.PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS,
},
},
},
}

// GroupSnapGetInfo is used within the VolumeGroupSnapshot implementation
vgsSupported, err := features.SupportsGroupSnapGetInfo()
if err == nil && vgsSupported {
gcs := csi.PluginCapability{
Type: &csi.PluginCapability_Service_{
Service: &csi.PluginCapability_Service{
Type: csi.PluginCapability_Service_GROUP_CONTROLLER_SERVICE,
},
},
}
caps = append(caps, &gcs)
}

return &csi.GetPluginCapabilitiesResponse{
Capabilities: caps,
}, nil
}

0 comments on commit f31e391

Please sign in to comment.