-
Notifications
You must be signed in to change notification settings - Fork 263
Description
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
- Run import with
--no-renameflag:
tridentctl -n trident-operator import volume backend-name volume_name -f /tmp/pvc.yaml --no-rename- 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:
- ✅
ImportVolumeRequeststruct hasNoRenamefield (storage/volume.go:233) - ✅
VolumeConfighasImportNoRenamefield (storage/volume.go:56) - ✅ Kubernetes helper reads
AnnImportNoRenameannotation (frontend/csi/controller_helpers/kubernetes/helper.go) - ✅ Unit tests expect 5-parameter
volumeImport()function withnoRename(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.