Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pkg/csi/manila/nodeserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ func (ns *nodeServer) buildVolumeContext(ctx context.Context, volID volumeID, sh
sa := getShareAdapter(ns.d.shareProto)
opts := &shareadapters.VolumeContextArgs{
Locations: availableExportLocations,
Share: share,
Options: shareOpts,
}
volumeContext, err = sa.BuildVolumeContext(opts)
Expand Down
36 changes: 36 additions & 0 deletions pkg/csi/manila/shareadapters/cephfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package shareadapters
import (
"context"
"fmt"
"strings"
"time"

"github.com/gophercloud/gophercloud/v2"
Expand Down Expand Up @@ -133,9 +134,44 @@ func (Cephfs) BuildVolumeContext(args *VolumeContextArgs) (volumeContext map[str
volCtx["fuseMountOptions"] = args.Options.CephfsFuseMountOptions
}

// Extract fs_name from __mount_options metadata if available
if fsName := extractFsNameFromMountOptions(args.Share); fsName != "" {
volCtx["fsName"] = fsName
klog.V(4).Infof("Found fs_name in share metadata: %s", fsName)
}

return volCtx, err
}

// extractFsNameFromMountOptions extracts the fs from __mount_options metadata
// The __mount_options metadata contains mount options including fs for CephFS
func extractFsNameFromMountOptions(share *shares.Share) string {
if share == nil || share.Metadata == nil {
return ""
}

mountOptions, exists := share.Metadata["__mount_options"]
if !exists {
klog.V(4).Infof("No __mount_options metadata found in share %s", share.ID)
return ""
}

// Parse mount options to extract fs
// Mount options are typically comma-separated key=value pairs
// Example: "fs=myfs,other_option=value"
options := strings.Split(mountOptions, ",")
for _, option := range options {
option = strings.TrimSpace(option)
if strings.HasPrefix(option, "fs=") {
fsName := strings.TrimPrefix(option, "fs=")
return strings.TrimSpace(fsName)
}
}

klog.V(4).Infof("No fs found in __mount_options metadata for share %s: %s", share.ID, mountOptions)
return ""
}

func (Cephfs) BuildNodeStageSecret(args *SecretArgs) (secret map[string]string, err error) {
return map[string]string{
"userID": args.AccessRight.AccessTo,
Expand Down
3 changes: 3 additions & 0 deletions pkg/csi/manila/shareadapters/shareadapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ type VolumeContextArgs struct {
// an export location when building a volume context.
Locations []shares.ExportLocation

// Share object containing metadata and other share information
Share *shares.Share

Options *options.NodeVolumeContext
}

Expand Down