@@ -23,7 +23,10 @@ import (
2323 "github.com/kyma-project/lifecycle-manager/pkg/templatelookup"
2424)
2525
26- var ErrConvertingToOCIAccessSpec = errors .New ("failed converting resource.AccessSpec to *ociartifact.AccessSpec" )
26+ var (
27+ ErrConvertingToOCIAccessSpec = errors .New ("failed converting resource.AccessSpec to *ociartifact.AccessSpec" )
28+ ErrConvertingToImgOCI = errors .New ("failed converting layerRepresentation to *img.OCI" )
29+ )
2730
2831type Parser struct {
2932 client.Client
@@ -41,6 +44,7 @@ func NewParser(clnt client.Client,
4144 Client : clnt ,
4245 descriptorProvider : descriptorProvider ,
4346 remoteSyncNamespace : remoteSyncNamespace ,
47+ ociRepo : ociRepo ,
4448 }
4549}
4650
@@ -174,7 +178,6 @@ func newManifestFromTemplate(
174178 return nil , fmt .Errorf ("could not parse descriptor: %w" , err )
175179 }
176180
177- //repo := "http://k3d-kcp-registry.localhost:5000/component-descriptors" //TODO: Get from configuration
178181 if err := translateLayersAndMergeIntoManifest (manifest , layers , repo ); err != nil {
179182 return nil , fmt .Errorf ("could not translate layers and merge them: %w" , err )
180183 }
@@ -241,23 +244,41 @@ func translateLayersAndMergeIntoManifest(manifest *v1beta2.Manifest, layers img.
241244 return nil
242245}
243246
244- func insertLayerIntoManifest (manifest * v1beta2.Manifest , layer img.Layer , repo string ) error {
247+ func insertLayerIntoManifest (manifest * v1beta2.Manifest , layer img.Layer , ociRepoFromConfig string ) error {
245248 switch layer .LayerName {
246249 case v1beta2 .DefaultCRLayer :
247250 // default CR layer is not relevant for the manifest
248251 case v1beta2 .ConfigLayer :
249- imageSpec , err := layer .ConvertToImageSpec (repo )
252+ imageSpec , err := layer .ConvertToImageSpec (ociRepoFromConfig )
250253 if err != nil {
251254 return fmt .Errorf ("error while parsing config layer: %w" , err )
252255 }
253256 manifest .Spec .Config = imageSpec
254257 case v1beta2 .RawManifestLayer :
255- installRaw , err := layer .ToInstallRaw ()
258+ ociImage , ok := layer .LayerRepresentation .(* img.OCI )
259+ if ! ok {
260+ return fmt .Errorf ("%w: actual type: %T" , ErrConvertingToImgOCI , layer .LayerRepresentation )
261+ }
262+
263+ //Use the repo from global config to fetch the layer from the OCI registry
264+ //instead of the one from the layer (the same as in the ComponentDescriptor).
265+ //These two repos may be different and the configured one is safer to use,
266+ //as it is known to be reachable.
267+ //After all, we've been able to read the ComponentDescriptor with it.
268+ ociImageCopy := img.OCI {
269+ Repo : ociRepoFromConfig ,
270+ Name : ociImage .Name ,
271+ Ref : ociImage .Ref ,
272+ Type : ociImage .Type ,
273+ }
274+
275+ installRaw , err := ociImageCopy .ToInstallRaw ()
256276 if err != nil {
257277 return fmt .Errorf ("error while merging the generic install representation: %w" , err )
258278 }
259279 fmt .Println (strings .Repeat ("-" , 80 ))
260280 fmt .Printf ("Inserting installRaw from layer of type %T\n " , layer )
281+ fmt .Printf ("Inserting installRaw from layerRepresentation of type %T\n " , layer .LayerRepresentation )
261282 fmt .Printf ("%s\n " , string (installRaw ))
262283 fmt .Println (strings .Repeat ("-" , 80 ))
263284 manifest .Spec .Install = v1beta2.InstallInfo {
0 commit comments