Skip to content

🐛 Fix dest pvc storage class check if existing - #919

Merged
stillalearner merged 2 commits into
migtools:mainfrom
stillalearner:fix_894
Sep 4, 2026
Merged

🐛 Fix dest pvc storage class check if existing#919
stillalearner merged 2 commits into
migtools:mainfrom
stillalearner:fix_894

Conversation

@stillalearner

@stillalearner stillalearner commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Fixes #894

Summary by CodeRabbit

Bug Fixes

  • Improved destination PVC handling during transfers.
  • Existing destination PVCs are accepted when their storage class matches the requested value—or when no storage class is specified.
  • Transfers now report a clear error when an existing PVC’s storage class differs from the requested value, with guidance to resolve the conflict.

@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: db822eeb-e2d3-445a-bab6-01ed737ee5fc

📥 Commits

Reviewing files that changed from the base of the PR and between 576e7f5 and b3f9375.

📒 Files selected for processing (1)
  • cmd/transfer-pvc/transfer-pvc.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • cmd/transfer-pvc/transfer-pvc.go

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change centralizes destination PVC creation. Existing PVCs are accepted when storage-class requirements match and rejected when they differ. Direct and indirect transfer paths use the new helper, with table-driven tests covering the behavior.

Changes

Destination PVC creation

Layer / File(s) Summary
Creation helper and validation
cmd/transfer-pvc/transfer-pvc.go, cmd/transfer-pvc/transfer-pvc_test.go
createDestinationPVC handles creation and existing PVCs. When a storage class is requested, it validates the existing PVC and reports mismatches. Tests cover matching, missing, and differing storage classes.
Transfer path integration
cmd/transfer-pvc/transfer-pvc.go, cmd/transfer-pvc/indirect.go
Phase 2 and indirect transfer use createDestinationPVC. The callers now return helper errors without separate IsAlreadyExists handling.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to b3f93

The change rejects existing destination PVCs whose StorageClass differs from the requested class, preventing data transfer to an unintended storage configuration. No merge-blocking risk is currently identified.

Sequence Diagram(s)

sequenceDiagram
  participant TransferPVCCommand
  participant KubernetesAPI
  participant DestinationPVC
  TransferPVCCommand->>KubernetesAPI: Create destination PVC
  KubernetesAPI-->>TransferPVCCommand: Return success or AlreadyExists
  TransferPVCCommand->>DestinationPVC: Read existing storage class
  DestinationPVC-->>TransferPVCCommand: Return storage class
  TransferPVCCommand-->>TransferPVCCommand: Accept match or return mismatch error
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main change: fixing destination PVC StorageClass validation when the PVC already exists. The wording is slightly informal, but it is specific and related to the change…
Linked Issues check ✅ Passed The changes satisfy issue #894. Existing destination PVCs are accepted when no StorageClass is requested or when the existing class matches. A mismatch now returns an error, and tests cover these case…
Out of Scope Changes check ✅ Passed All changes are within scope. The implementation updates destination PVC creation and adds focused tests for existing PVC StorageClass validation.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Test Coverage Report

Total: 49.9%

Per-package coverage

  • github.com/konveyor/crane — 0.0%
  • github.com/konveyor/crane/cmd/apply — 50.6%
  • github.com/konveyor/crane/cmd/convert — 0.0%
  • github.com/konveyor/crane/cmd/export — 93.9%
  • github.com/konveyor/crane/cmd/plugin-manager — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/add — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/list — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/remove — 0.0%
  • github.com/konveyor/crane/cmd/skopeo-sync-gen — 0.0%
  • github.com/konveyor/crane/cmd/transfer-pvc — 40.7%
  • github.com/konveyor/crane/cmd/transform — 59.8%
  • github.com/konveyor/crane/cmd/transform/listplugins — 21.1%
  • github.com/konveyor/crane/cmd/transform/optionals — 0.0%
  • github.com/konveyor/crane/cmd/tunnel-api — 0.0%
  • github.com/konveyor/crane/cmd/validate — 69.7%
  • github.com/konveyor/crane/cmd/version — 20.0%
  • github.com/konveyor/crane/internal/apply — 29.5%
  • github.com/konveyor/crane/internal/audit — 90.2%
  • github.com/konveyor/crane/internal/buildinfo — 100.0%
  • github.com/konveyor/crane/internal/cli — 100.0%
  • github.com/konveyor/crane/internal/file — 85.7%
  • github.com/konveyor/crane/internal/flags — 0.0%
  • github.com/konveyor/crane/internal/kustomize — 83.2%
  • github.com/konveyor/crane/internal/plugin — 32.9%
  • github.com/konveyor/crane/internal/transform — 82.0%
  • github.com/konveyor/crane/internal/validate — 57.7%
Full function-level details
github.com/konveyor/crane/cmd/apply/apply.go:45:			Complete								100.0%
github.com/konveyor/crane/cmd/apply/apply.go:54:			Validate								83.3%
github.com/konveyor/crane/cmd/apply/apply.go:72:			Run									0.0%
github.com/konveyor/crane/cmd/apply/apply.go:76:			NewApplyCommand								0.0%
github.com/konveyor/crane/cmd/apply/apply.go:119:			getStageNames								100.0%
github.com/konveyor/crane/cmd/apply/apply.go:127:			addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/apply/apply.go:140:			run									71.2%
github.com/konveyor/crane/cmd/convert/convert.go:32:			NewConvertOptions							0.0%
github.com/konveyor/crane/cmd/convert/convert.go:61:			addFlagsForConvertOptions						0.0%
github.com/konveyor/crane/cmd/convert/convert.go:72:			Complete								0.0%
github.com/konveyor/crane/cmd/convert/convert.go:81:			Run									0.0%
github.com/konveyor/crane/cmd/convert/convert.go:85:			run									0.0%
github.com/konveyor/crane/cmd/convert/convert.go:110:			getClientFromContext							0.0%
github.com/konveyor/crane/cmd/convert/convert.go:132:			getRestConfigFromContext						0.0%
github.com/konveyor/crane/cmd/export/cluster.go:29:			NewClusterScopeHandler							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:35:			isClusterScopedResource							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:44:			filterRbacResources							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:102:			NewClusterScopedRbacHandler						100.0%
github.com/konveyor/crane/cmd/export/cluster.go:113:			exportedSANamespaces							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:127:			groupMatchesExportedSANamespaces					100.0%
github.com/konveyor/crane/cmd/export/cluster.go:144:			parseServiceAccountUserSubject						100.0%
github.com/konveyor/crane/cmd/export/cluster.go:155:			prepareForFiltering							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:188:			filteredResourcesOfKind							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:214:			accept									100.0%
github.com/konveyor/crane/cmd/export/cluster.go:224:			acceptClusterRoleBinding						100.0%
github.com/konveyor/crane/cmd/export/cluster.go:261:			acceptClusterRole							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:285:			acceptSecurityContextConstraints					100.0%
github.com/konveyor/crane/cmd/export/cluster.go:337:			anyServiceAccountInNamespace						100.0%
github.com/konveyor/crane/cmd/export/crd.go:18:				normalizeGroupSet							85.7%
github.com/konveyor/crane/cmd/export/crd.go:30:				shouldSkipCRDGroup							100.0%
github.com/konveyor/crane/cmd/export/crd.go:51:				crdFailureAPIResourceName						100.0%
github.com/konveyor/crane/cmd/export/crd.go:57:				getOperatorManager							92.9%
github.com/konveyor/crane/cmd/export/crd.go:89:				collectRelatedCRDs							95.0%
github.com/konveyor/crane/cmd/export/discover.go:41:			hasClusterScopedManifests						100.0%
github.com/konveyor/crane/cmd/export/discover.go:59:			prepareClusterResourceDir						100.0%
github.com/konveyor/crane/cmd/export/discover.go:75:			prepareFailuresDir							100.0%
github.com/konveyor/crane/cmd/export/discover.go:87:			writeResources								85.7%
github.com/konveyor/crane/cmd/export/discover.go:135:			writeErrors								83.3%
github.com/konveyor/crane/cmd/export/discover.go:178:			discoverPreferredResources						100.0%
github.com/konveyor/crane/cmd/export/discover.go:209:			resourceToExtract							100.0%
github.com/konveyor/crane/cmd/export/discover.go:286:			isAdmittedResource							100.0%
github.com/konveyor/crane/cmd/export/discover.go:295:			getObjects								96.3%
github.com/konveyor/crane/cmd/export/discover.go:346:			iterateItemsByGet							90.9%
github.com/konveyor/crane/cmd/export/discover.go:382:			iterateItemsInList							92.3%
github.com/konveyor/crane/cmd/export/export.go:56:			Complete								88.6%
github.com/konveyor/crane/cmd/export/export.go:118:			Validate								100.0%
github.com/konveyor/crane/cmd/export/export.go:168:			validateExportNamespace							87.5%
github.com/konveyor/crane/cmd/export/export.go:185:			allResourceListsForbidden						87.5%
github.com/konveyor/crane/cmd/export/export.go:203:			mergeImpersonationExtras						100.0%
github.com/konveyor/crane/cmd/export/export.go:218:			Run									0.0%
github.com/konveyor/crane/cmd/export/export.go:359:			NewExportCommand							51.7%
github.com/konveyor/crane/cmd/export/gk_filter.go:23:			ParseGroupKind								100.0%
github.com/konveyor/crane/cmd/export/gk_filter.go:50:			Matches									100.0%
github.com/konveyor/crane/cmd/export/gk_filter.go:62:			String									100.0%
github.com/konveyor/crane/cmd/export/gk_filter.go:76:			NewGKFilter								100.0%
github.com/konveyor/crane/cmd/export/gk_filter.go:105:			ShouldInclude								100.0%
github.com/konveyor/crane/cmd/export/gk_filter.go:145:			IsEmpty									100.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:44:		Complete								0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:51:		Validate								0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:94:		Run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:98:		NewAddCommand								0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:129:		addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:134:		run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:206:		downloadBinary								0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:255:		binaryURIForPlatform							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:48:		Complete								0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:55:		Validate								0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:60:		Run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:64:		NewListCommand								0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:94:		addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:102:		run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:171:		printInstalledInformation						0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:181:		groupInformationForPlugins						0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:200:		printInformation							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:212:		printParamsInformation							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:226:		getOptionalFields							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:251:		printTable								0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:33:	Complete								0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:38:	Validate								0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:43:	Run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:47:	NewPluginManagerCommand							0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:78:	addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:86:	run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:35:	Complete								0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:42:	Validate								0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:47:	Run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:51:	NewRemoveCommand							0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:81:	run									0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:61:	Complete								0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:66:	Validate								0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:70:	NewSkopeoSyncGenCommand							0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:104:	shouldAddImageStream							0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:115:	Run									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/indirect.go:30:		runIndirect								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/indirect.go:237:		followPodLogsUntilComplete						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/indirect.go:332:		checkRclonePartialSuccess						87.5%
github.com/konveyor/crane/cmd/transfer-pvc/indirect.go:385:		validateRcloneConfigSecret						100.0%
github.com/konveyor/crane/cmd/transfer-pvc/indirect.go:409:		createTempRcloneSecretFromData						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/indirect.go:452:		generateCryptSection							62.5%
github.com/konveyor/crane/cmd/transfer-pvc/indirect.go:469:		rcloneObscure								69.2%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:39:		NewRsyncLogStream							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:53:		Init									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:146:		writeProgressToFile							100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:156:		Close									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:162:		Streams									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:166:		ExitCode								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:205:		addDataSize								100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:230:		String									100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:234:		MarshalJSON								100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:238:		AsString								100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:286:		NewProgress								100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:306:		Completed								100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:311:		Status									100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:336:		Merge									91.2%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:391:		newDataSize								81.8%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:414:		parseRsyncLogs								76.1%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:494:		waitForPodRunning							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:528:		getFinalPodStatus							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:102:		Validate								83.3%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:130:		Validate								55.6%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:146:		NewTransferPVCCommand							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:182:		addFlagsToTransferPVCCommand						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:207:		Complete								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:246:		Validate								61.9%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:313:		Run									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:323:		isIntraClusterSameNamespace						100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:329:		getClientFromContext							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:350:		getRestConfigFromContext						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:357:		run									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:697:		certificateSecretName							100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:706:		getValidatedResourceName						66.7%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:716:		getNodeNameForPVC							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:736:		getIDsForNamespace							77.8%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:799:		getSecurityContextFromWorkload						74.5%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:899:		podSpecReferencesPVC							100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:908:		extractPodSecurityContext						90.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:958:		inspectPVCFileOwnership							75.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1062:	getSourcePodSecurityContext						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1066:	getTargetPodSecurityContext						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1072:	rsyncTransferImage							100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1079:	garbageCollect								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1116:	deleteResourcesIteratively						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1142:	deleteResourcesForGVK							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1165:	followClientLogs							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1194:	waitForEndpoint								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1206:	createEndpoint								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1251:	getRouteHostName							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1268:	truncateWithHash							100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1274:	buildDestinationPVC							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1295:	createDestinationPVC							80.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1322:	stripServerManagedPVCAnnotations					100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1339:	isServerManagedPVCAnnotation						100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1356:	ApplyTo									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1376:	ApplyTo									100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1389:	ApplyTo									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1405:	String									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1409:	Set									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1419:	Type									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1425:	parseSourceDestinationMapping						100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1447:	String									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1451:	Set									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1460:	Type									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1464:	String									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1468:	Set									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1478:	Type									0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:34:	Complete								0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:41:	Validate								0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:46:	Run									0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:50:	NewListPluginsCommand							0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:83:	GetPluginNames								87.5%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:99:	getFilteredPlugins							60.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:109:	run									0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:33:	Complete								0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:40:	Validate								0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:45:	Run									0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:49:	NewOptionalsCommand							0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:81:	run									0.0%
github.com/konveyor/crane/cmd/transform/transform.go:57:		Complete								0.0%
github.com/konveyor/crane/cmd/transform/transform.go:65:		Validate								76.5%
github.com/konveyor/crane/cmd/transform/transform.go:90:		Run									0.0%
github.com/konveyor/crane/cmd/transform/transform.go:95:		getPluginCompletions							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:121:		NewTransformCommand							0.0%
github.com/konveyor/crane/cmd/transform/transform.go:166:		addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/transform/transform.go:186:		run									11.0%
github.com/konveyor/crane/cmd/transform/transform.go:393:		parseStageOptionals							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:426:		optionalFlagsToLowerChecked						100.0%
github.com/konveyor/crane/cmd/transform/transform.go:440:		runStageWithCleanup							0.0%
github.com/konveyor/crane/cmd/transform/transform.go:456:		reconcileInstructionStages						70.8%
github.com/konveyor/crane/cmd/transform/transform.go:502:		ensurePreviousStagesRun							71.4%
github.com/konveyor/crane/cmd/transform/transform.go:520:		ensureStagesHaveOutput							93.3%
github.com/konveyor/crane/cmd/transform/transform.go:559:		createDefaultStagesForAllPlugins					90.0%
github.com/konveyor/crane/cmd/transform/transform.go:612:		validateStageNameToken							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:627:		findStageByDirName							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:639:		findStagesByName							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:651:		createStageDirectory							77.8%
github.com/konveyor/crane/cmd/transform/transform.go:672:		createCustomStageWithExplicitName					100.0%
github.com/konveyor/crane/cmd/transform/transform.go:688:		createCustomStageWithAutoPriority					66.7%
github.com/konveyor/crane/cmd/transform/transform.go:712:		createPluginStage							0.0%
github.com/konveyor/crane/cmd/transform/transform.go:748:		resolveAndValidateStages						57.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:36:		NewTunnelAPIOptions							0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:65:		addFlagsForTunnelAPIOptions						0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:77:		Complete								0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:102:		Validate								0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:123:		Run									0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:127:		getClientFromContext							0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:136:		getRestConfigFromContext						0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:143:		run									0.0%
github.com/konveyor/crane/cmd/validate/validate.go:39:			Complete								92.3%
github.com/konveyor/crane/cmd/validate/validate.go:62:			determineClusterContext							91.7%
github.com/konveyor/crane/cmd/validate/validate.go:90:			Validate								100.0%
github.com/konveyor/crane/cmd/validate/validate.go:147:			Run									16.9%
github.com/konveyor/crane/cmd/validate/validate.go:264:			NewValidateCommand							47.6%
github.com/konveyor/crane/cmd/version/version.go:20:			Complete								0.0%
github.com/konveyor/crane/cmd/version/version.go:25:			Validate								0.0%
github.com/konveyor/crane/cmd/version/version.go:30:			Run									0.0%
github.com/konveyor/crane/cmd/version/version.go:34:			NewVersionCommand							0.0%
github.com/konveyor/crane/cmd/version/version.go:60:			run									100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:21:			CreateTempDir								100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:28:			ListFilesRecursively							91.7%
github.com/konveyor/crane/e2e-tests/utils/utils.go:51:			ListFilesRecursivelyAsList						80.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:75:			HasFilesRecursively							80.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:86:			ReadTestdataFile							88.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:105:			TestdataFilePath							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:125:			GoldenManifestsDir							90.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:147:			GoldenManifestsDirForPlatform						0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:170:			CompareDirectoryFileSets						78.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:204:			compareDirectoryYAMLSemanticsWithFunc					82.4%
github.com/konveyor/crane/e2e-tests/utils/utils.go:233:			CompareDirectoryYAMLSemantics						100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:239:			sortTopLevelArray							88.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:255:			compareYAMLFileBytesUnordered						88.2%
github.com/konveyor/crane/e2e-tests/utils/utils.go:289:			CompareDirectoryYAMLSemanticsUnordered					100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:299:			CompareDirectoryYAMLSemanticsExport					100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:307:			CompareDirectoryYAMLSemanticsExportAllowOptionalOCPOutputDefaults	100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:311:			compareDirectoryYAMLSemanticsExport					92.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:390:			isOptionalOCPOutputIdentity						100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:417:			buildNormalizedExportIndex						73.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:460:			canonicalizeDocs							87.5%
github.com/konveyor/crane/e2e-tests/utils/utils.go:474:			extractResourceIdentity							79.5%
github.com/konveyor/crane/e2e-tests/utils/utils.go:545:			parseYAMLDocuments							100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:561:			canonicalOpenShiftDockercfgSecretName					80.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:577:			compareYAMLFileBytes							100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:604:			AssertNoKindsInOutput							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:660:			AssertKindsInOutput							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:712:			LooksLikeYAMLFile							100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:726:			normalizeUnstableFields							73.1%
github.com/konveyor/crane/e2e-tests/utils/utils.go:842:			stripPodTemplateHash							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:850:			normalizePodServiceAccountVolumeNames					90.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:907:			normalizeServiceAccountDockercfgReferences				94.1%
github.com/konveyor/crane/e2e-tests/utils/utils.go:941:			normalizeWithPath							81.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:984:			shouldDropField								100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1040:		AssertWhiteoutResourceFilesExist					0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1080:		AssertWhiteoutResourceFileCount						0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1112:		AssertWhiteoutCommentsInKustomization					0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1167:		AssertKindsNotInActiveKustomizeResources				0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1209:		CaptureAPISurfaceScriptPath						75.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1228:		ToInt64									0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1245:		ExtractCPUAverageUtilization						0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1278:		AssertFilesExist							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1304:		RemapNamespaceInYAML							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1332:		ParseValidationReport							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils_validate.go:34:		VerifyValidateResults							0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:31:		ApplySingleStage							0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:89:		ApplyMultiStage								0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:153:		runKustomizeBuild							0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:162:		filterClusterScopedResources						70.0%
github.com/konveyor/crane/internal/apply/kustomize.go:224:		splitMultiDocYAMLToFiles						77.4%
github.com/konveyor/crane/internal/audit/audit_logger.go:21:		NewFileHook								77.8%
github.com/konveyor/crane/internal/audit/audit_logger.go:42:		Levels									100.0%
github.com/konveyor/crane/internal/audit/audit_logger.go:54:		Fire									86.7%
github.com/konveyor/crane/internal/audit/audit_logger.go:77:		Close									100.0%
github.com/konveyor/crane/internal/audit/audit_logger.go:91:		NewConsoleHook								100.0%
github.com/konveyor/crane/internal/audit/audit_logger.go:109:		Levels									100.0%
github.com/konveyor/crane/internal/audit/audit_logger.go:113:		Fire									66.7%
github.com/konveyor/crane/internal/buildinfo/buildinfo.go:25:		readKustomizeVersion							100.0%
github.com/konveyor/crane/internal/cli/banner.go:8:			PrintTransferBanner							100.0%
github.com/konveyor/crane/internal/cli/phase.go:17:			NewPhaseTracker								100.0%
github.com/konveyor/crane/internal/cli/phase.go:25:			Start									100.0%
github.com/konveyor/crane/internal/cli/phase.go:31:			End									100.0%
github.com/konveyor/crane/internal/cli/phase.go:39:			Fail									100.0%
github.com/konveyor/crane/internal/cli/phase.go:45:			Elapsed									100.0%
github.com/konveyor/crane/internal/cli/summary.go:14:			PrintTransferSummary							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:23:		ReadFiles								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:29:		ReadFilesWithLogger							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:40:		readFiles								84.6%
github.com/konveyor/crane/internal/file/file_helper.go:100:		GetWhiteOutFilePath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:104:		GetTransformPath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:108:		updateTransformDirPath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:112:		updatePath								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:119:		GetOutputFilePath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:129:		GetStageDir								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:135:		GetInputDir								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:141:		GetNewResourcesDir							0.0%
github.com/konveyor/crane/internal/file/file_helper.go:147:		GetPatchesDir								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:153:		GetKustomizationPath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:159:		GetMetadataPath								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:165:		GetResourceTypeFilePath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:171:		GetPatchFilePath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:178:		GetStageTransformDir							0.0%
github.com/konveyor/crane/internal/file/file_helper.go:184:		GetStageOutputDir							0.0%
github.com/konveyor/crane/internal/file/file_helper.go:191:		sanitizeFilename							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:209:		GetResourceFilename							100.0%
github.com/konveyor/crane/internal/file/ordering.go:82:			GetResourceOrder							100.0%
github.com/konveyor/crane/internal/file/ordering.go:92:			GetOrderedResourceFilename						100.0%
github.com/konveyor/crane/internal/flags/global_flags.go:23:		ApplyFlags								0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:32:		SetCmdName								0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:39:		GetLoggerOrDefault							0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:48:		isCompletionMode							0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:52:		GetLogger								0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:73:		Close									0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:80:		initConfig								0.0%
github.com/konveyor/crane/internal/flags/help_groups.go:12:		KubernetesClientInheritedFlagNames					0.0%
github.com/konveyor/crane/internal/flags/help_groups.go:40:		SetGroupedHelp								0.0%
github.com/konveyor/crane/internal/kustomize/args.go:20:		ParseAndValidateArgs							100.0%
github.com/konveyor/crane/internal/kustomize/args.go:92:		splitArgs								100.0%
github.com/konveyor/crane/internal/kustomize/runner.go:21:		Build									69.6%
github.com/konveyor/crane/internal/kustomize/runner.go:61:		buildOptions								100.0%
github.com/konveyor/crane/internal/kustomize/runner.go:115:		setEnvVars								46.2%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:21:		GetPlugins								0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:38:		getBinaryPlugins							0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:63:		IsExecAny								0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:67:		GetFilteredPlugins							0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:109:		isPluginInList								0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:24:	BuildManifestMap							0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:69:	GetYamlFromUrl								75.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:83:	YamlToManifest								72.7%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:105:	FilterPluginForOsArch							100.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:120:	GetDefaultSource							0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:129:	LocateBinaryInPluginDir							0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:141:	IsUrl									100.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:147:	getData									80.0%
github.com/konveyor/crane/internal/transform/instructions.go:43:	UnmarshalYAML								90.5%
github.com/konveyor/crane/internal/transform/instructions.go:88:	LoadInstructions							76.5%
github.com/konveyor/crane/internal/transform/instructions.go:119:	friendlyInstructionsDecodeError						100.0%
github.com/konveyor/crane/internal/transform/instructions.go:134:	ValidateInstructions							100.0%
github.com/konveyor/crane/internal/transform/instructions.go:167:	StageNames								100.0%
github.com/konveyor/crane/internal/transform/instructions.go:177:	StageOptionals								100.0%
github.com/konveyor/crane/internal/transform/instructions.go:197:	GenerateStageDirNames							100.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:48:	validateStageOptionalFlags						100.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:69:	resolveOptionalFlags							100.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:92:	RunMultiStage								63.2%
github.com/konveyor/crane/internal/transform/orchestrator.go:207:	executeStage								59.1%
github.com/konveyor/crane/internal/transform/orchestrator.go:257:	transformResources							73.7%
github.com/konveyor/crane/internal/transform/orchestrator.go:351:	formatResourceID							0.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:358:	getPluginForStage							83.3%
github.com/konveyor/crane/internal/transform/orchestrator.go:386:	getAvailablePluginNames							0.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:399:	applyStageTransforms							71.4%
github.com/konveyor/crane/internal/transform/orchestrator.go:473:	loadResourcesFromDirectory						75.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:489:	writeResourcesToDirectory						61.3%
github.com/konveyor/crane/internal/transform/stages.go:22:		DiscoverStages								90.5%
github.com/konveyor/crane/internal/transform/stages.go:83:		FilterStages								100.0%
github.com/konveyor/crane/internal/transform/stages.go:112:		GetFirstStage								100.0%
github.com/konveyor/crane/internal/transform/stages.go:122:		GetLastStage								66.7%
github.com/konveyor/crane/internal/transform/stages.go:132:		GetPreviousStage							100.0%
github.com/konveyor/crane/internal/transform/stages.go:142:		GetNextStage								100.0%
github.com/konveyor/crane/internal/transform/stages.go:152:		ValidateStageName							100.0%
github.com/konveyor/crane/internal/transform/stages.go:161:		GenerateStageName							100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:8:		hasKustomizeCommand							100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:14:	contains								100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:23:	findInString								100.0%
github.com/konveyor/crane/internal/transform/writer.go:27:		NewKustomizeWriter							100.0%
github.com/konveyor/crane/internal/transform/writer.go:36:		WriteStage								67.0%
github.com/konveyor/crane/internal/transform/writer.go:254:		getResourceID								100.0%
github.com/konveyor/crane/internal/transform/writer.go:267:		filterValidRemoveOps							76.2%
github.com/konveyor/crane/internal/transform/writer.go:311:		pathExists								93.5%
github.com/konveyor/crane/internal/transform/writer.go:388:		generateKustomizationWithComments					88.2%
github.com/konveyor/crane/internal/transform/writer.go:420:		checkStageDirectory							17.6%
github.com/konveyor/crane/internal/validate/api_resources.go:24:	ParseAPIResourcesJSON							88.2%
github.com/konveyor/crane/internal/validate/matcher.go:25:		MatchResults								75.0%
github.com/konveyor/crane/internal/validate/matcher.go:36:		MatchResultsFromIndex							100.0%
github.com/konveyor/crane/internal/validate/matcher.go:76:		buildDiscoveryIndex							62.5%
github.com/konveyor/crane/internal/validate/matcher.go:113:		matchEntry								100.0%
github.com/konveyor/crane/internal/validate/matcher.go:142:		buildKindIndex								100.0%
github.com/konveyor/crane/internal/validate/matcher.go:154:		addSuggestion								91.7%
github.com/konveyor/crane/internal/validate/report.go:17:		FormatTable								91.3%
github.com/konveyor/crane/internal/validate/report.go:60:		FormatJSON								100.0%
github.com/konveyor/crane/internal/validate/report.go:67:		FormatYAML								0.0%
github.com/konveyor/crane/internal/validate/report.go:79:		WriteFailures								0.0%
github.com/konveyor/crane/internal/validate/report.go:118:		failureFileName								0.0%
github.com/konveyor/crane/internal/validate/report.go:132:		safeFilePart								0.0%
github.com/konveyor/crane/internal/validate/report.go:148:		parseAPIVersion								0.0%
github.com/konveyor/crane/internal/validate/scanner.go:34:		ScanManifests								72.2%
github.com/konveyor/crane/internal/validate/types.go:46:		HasIncompatible								100.0%
github.com/konveyor/crane/internal/validate/types.go:49:		IncompatibleResults							0.0%
github.com/konveyor/crane/main.go:23:					main									0.0%
github.com/konveyor/crane/main.go:27:					run									0.0%
total:									(statements)								49.9%

Posted by CI

@stillalearner

Copy link
Copy Markdown
Contributor Author

/rfr

Comment thread cmd/transfer-pvc/transfer-pvc.go
@stillalearner
stillalearner merged commit 3e13ee3 into migtools:main Sep 4, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] transfer-pvc uses pre-existing destination PVC with wrong StorageClass

3 participants