@@ -412,49 +412,12 @@ func (m *MutationReconcileLooper) performLocalization(
412412 refPath []ocmmetav1.Identity ,
413413 compvers ocmcore.ComponentVersionAccess ,
414414) error {
415- resourceRef := ocmmetav1 .NewNestedResourceRef (ocmmetav1 .NewIdentity (l .Resource .Name ), refPath )
416-
417- resource , _ , err := resourcerefs .ResolveResourceReference (compvers , resourceRef , compvers .Repository ())
418- if err != nil {
419- return fmt .Errorf ("failed to fetch resource from component version: %w" , err )
420- }
421415
422- accSpec , err := resource . Access ( )
416+ pRef , err := resolveReference ( l , refPath , compvers , octx )
423417 if err != nil {
424418 return err
425419 }
426420
427- var (
428- ref string
429- refErr error
430- )
431-
432- for ref == "" && refErr == nil {
433- switch x := accSpec .(type ) {
434- case * ociartifact.AccessSpec :
435- ref = x .ImageReference
436- case * ociblob.AccessSpec :
437- ref = fmt .Sprintf ("%s@%s" , x .Reference , x .Digest )
438- case * localblob.AccessSpec :
439- if x .GlobalAccess == nil {
440- refErr = errors .New ("cannot determine image digest" )
441- } else {
442- accSpec , refErr = octx .AccessSpecForSpec (x .GlobalAccess )
443- }
444- default :
445- refErr = errors .New ("cannot determine access spec type" )
446- }
447- }
448-
449- if refErr != nil {
450- return fmt .Errorf ("failed to parse access reference: %w" , refErr )
451- }
452-
453- pRef , err := name .ParseReference (ref )
454- if err != nil {
455- return fmt .Errorf ("failed to parse access reference: %w" , err )
456- }
457-
458421 if l .Registry != "" {
459422 if err := localizations .Add ("registry" , l .File , l .Registry , pRef .Context ().Registry .Name ()); err != nil {
460423 return fmt .Errorf ("failed to add registry: %w" , err )
@@ -490,6 +453,57 @@ func (m *MutationReconcileLooper) performLocalization(
490453 return nil
491454}
492455
456+ func resolveReference (
457+ l configdata.LocalizationRule ,
458+ refPath []ocmmetav1.Identity ,
459+ compvers ocmcore.ComponentVersionAccess ,
460+ octx ocmcore.Context ,
461+ ) (name.Reference , error ) {
462+ resourceRef := ocmmetav1 .NewNestedResourceRef (ocmmetav1 .NewIdentity (l .Resource .Name ), refPath )
463+
464+ resource , _ , err := resourcerefs .ResolveResourceReference (compvers , resourceRef , compvers .Repository ())
465+ if err != nil {
466+ return nil , fmt .Errorf ("failed to fetch resource from component version: %w" , err )
467+ }
468+
469+ accSpec , err := resource .Access ()
470+ if err != nil {
471+ return nil , err
472+ }
473+
474+ var (
475+ ref string
476+ refErr error
477+ )
478+
479+ for ref == "" && refErr == nil {
480+ switch x := accSpec .(type ) {
481+ case * ociartifact.AccessSpec :
482+ ref = x .ImageReference
483+ case * ociblob.AccessSpec :
484+ ref = fmt .Sprintf ("%s@%s" , x .Reference , x .Digest )
485+ case * localblob.AccessSpec :
486+ if x .GlobalAccess == nil {
487+ refErr = errors .New ("cannot determine image digest" )
488+ } else {
489+ accSpec , refErr = octx .AccessSpecForSpec (x .GlobalAccess )
490+ }
491+ default :
492+ refErr = errors .New ("cannot determine access spec type" )
493+ }
494+ }
495+
496+ if refErr != nil {
497+ return nil , fmt .Errorf ("failed to parse access reference: %w" , refErr )
498+ }
499+
500+ pRef , err := name .ParseReference (ref )
501+ if err != nil {
502+ return nil , fmt .Errorf ("failed to parse access reference: %w" , err )
503+ }
504+ return pRef , nil
505+ }
506+
493507func (m * MutationReconcileLooper ) createSubstitutionRulesForConfigurationValues (
494508 data []byte ,
495509 values * apiextensionsv1.JSON ,
0 commit comments