Skip to content

--no-rename flag not implemented in tridentctl import volume CLI command #1096

@romankuzmik

Description

@romankuzmik

Description

The --no-rename flag for tridentctl import volume command is not functional. The flag is silently ignored, and Trident still attempts to rename volumes during managed import.

Steps to Reproduce

  1. Run import with --no-rename flag:
tridentctl -n trident-operator import volume backend-name volume_name -f /tmp/pvc.yaml --no-rename
  1. Observe that Trident still attempts to rename the volume:
error attempting to rename volume volume_name on backend backend-name: volume volume_name rename failed: API status: failed

Expected Behavior

When --no-rename flag is specified, Trident should import the volume in managed mode but preserve the original volume name on the storage backend.

Actual Behavior

The --no-rename flag is silently ignored. Trident attempts to rename the volume regardless of the flag.

Root Cause Analysis

The --no-rename flag implementation is incomplete in cli/cmd/import_volume.go. While the supporting infrastructure exists:

  1. ImportVolumeRequest struct has NoRename field (storage/volume.go:233)
  2. VolumeConfig has ImportNoRename field (storage/volume.go:56)
  3. ✅ Kubernetes helper reads AnnImportNoRename annotation (frontend/csi/controller_helpers/kubernetes/helper.go)
  4. ✅ Unit tests expect 5-parameter volumeImport() function with noRename (cli/cmd/import_volume_test.go:347)

However, the CLI implementation is missing the flag:

// cli/cmd/import_volume.go - CURRENT (incomplete)
var (
    importFilename   string
    importBase64Data string
    importNoManage   bool
    // MISSING: importNoRename bool
)

func init() {
    // ... 
    // MISSING: --no-rename flag registration
}

// Function signature missing noRename parameter
func volumeImport(backendName, internalVolumeName string, noManage bool, pvcDataJSON []byte) error {
    request := &storage.ImportVolumeRequest{
        Backend:      backendName,
        InternalName: internalVolumeName,
        NoManage:     noManage,
        // MISSING: NoRename: noRename,
        PVCData:      base64.StdEncoding.EncodeToString(pvcDataJSON),
    }
    // ...
}

Suggested Fix

Update cli/cmd/import_volume.go:

var (
    importFilename   string
    importBase64Data string
    importNoManage   bool
    importNoRename   bool  // ADD THIS
)

func init() {
    importCmd.AddCommand(importVolumeCmd)
    importVolumeCmd.Flags().StringVarP(&importFilename, "filename", "f", "", "Path to YAML or JSON PVC file")
    importVolumeCmd.Flags().BoolVarP(&importNoManage, "no-manage", "", false,
        "Create PV/PVC only, don't assume volume lifecycle management")
    // ADD THIS:
    importVolumeCmd.Flags().BoolVarP(&importNoRename, "no-rename", "", false,
        "Import volume without renaming it on the storage backend")
    importVolumeCmd.Flags().StringVarP(&importBase64Data, "base64", "", "", "Base64 encoding")
    // ...
}

var importVolumeCmd = &cobra.Command{
    // ...
    RunE: func(cmd *cobra.Command, args []string) error {
        // ...
        if OperatingMode == ModeTunnel {
            command := []string{"import", "volume", "--base64", base64.StdEncoding.EncodeToString(pvcDataJSON)}
            if importNoManage {
                command = append(command, "--no-manage")
            }
            // ADD THIS:
            if importNoRename {
                command = append(command, "--no-rename")
            }
            out, err := TunnelCommand(append(command, args...))
            // ...
        } else {
            return volumeImport(args[0], args[1], importNoManage, importNoRename, pvcDataJSON)  // ADD noRename
        }
    },
}

// UPDATE function signature
func volumeImport(backendName, internalVolumeName string, noManage, noRename bool, pvcDataJSON []byte) error {
    request := &storage.ImportVolumeRequest{
        Backend:      backendName,
        InternalName: internalVolumeName,
        NoManage:     noManage,
        NoRename:     noRename,  // ADD THIS
        PVCData:      base64.StdEncoding.EncodeToString(pvcDataJSON),
    }
    // ...
}

Environment

  • Trident version: master branch (commit f192a6c)
  • The issue also affects v25.10.0

Additional Context

The unit tests in cli/cmd/import_volume_test.go already expect this functionality to work (see test case "successful import with no-rename" at line 271), indicating this was intended functionality that was not fully implemented.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions