Skip to content

Commit 762db3c

Browse files
wip
1 parent 41db032 commit 762db3c

File tree

3 files changed

+31
-11
lines changed

3 files changed

+31
-11
lines changed

internal/manifest/img/layer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ type (
4343

4444
type Layers []Layer
4545

46-
func (l Layer) ConvertToImageSpec(repo string) (*v1beta2.ImageSpec, error) {
46+
func (l Layer) ConvertToImageSpec(ociRepo string) (*v1beta2.ImageSpec, error) {
4747
ociImage, ok := l.LayerRepresentation.(*OCI)
4848
if !ok {
4949
return nil, fmt.Errorf("%w: not an OCIImage", ErrLayerParsing)
5050
}
5151

5252
return &v1beta2.ImageSpec{
53-
Repo: repo, //Note: this value will be used to fetch the layer from the OCI registry
53+
Repo: ociRepo, //Note: this value will be used to fetch the layer from the OCI registry
5454
Name: ociImage.Name,
5555
Ref: ociImage.Ref,
5656
Type: v1beta2.RefTypeMetadata(ociImage.Type),

internal/manifest/img/parse.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func parseLayersByName(repo *genericocireg.RepositorySpec, descriptor *compdesc.
5858
layers := Layers{}
5959
for _, resource := range descriptor.Resources {
6060
access := resource.Access
61-
var layerRepresentation LayerRepresentation
61+
var ociRef *OCI
6262
spec, err := ocm.DefaultContext().AccessSpecForSpec(access)
6363
if err != nil {
6464
return nil, fmt.Errorf("failed to create spec for acccess: %w", err)
@@ -75,11 +75,10 @@ func parseLayersByName(repo *genericocireg.RepositorySpec, descriptor *compdesc.
7575
if !ok {
7676
return nil, common.ErrTypeAssert
7777
}
78-
layerRef, err := getOCIRef(repo, descriptor, accessSpec)
78+
ociRef, err = getOCIRef(repo, descriptor, accessSpec)
7979
if err != nil {
8080
return nil, fmt.Errorf("building the digest url: %w", err)
8181
}
82-
layerRepresentation = layerRef
8382
// this resource type is not relevant for module rendering but for security scanning only
8483
case ociartifact.Type:
8584
fallthrough
@@ -99,7 +98,7 @@ func parseLayersByName(repo *genericocireg.RepositorySpec, descriptor *compdesc.
9998
layers = append(
10099
layers, Layer{
101100
LayerName: v1beta2.LayerName(resource.Name),
102-
LayerRepresentation: layerRepresentation,
101+
LayerRepresentation: ociRef,
103102
},
104103
)
105104
}

internal/manifest/parser/template_to_module.go

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2831
type 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

Comments
 (0)