Skip to content
This repository was archived by the owner on Feb 7, 2024. It is now read-only.

Commit f8eda73

Browse files
Repo extra identity (#2)
* repo extra identity * Test repo extra identity * change doc * integrate review Co-authored-by: Robert Graeff <robert.graeff@sap.com>
1 parent b7a9193 commit f8eda73

File tree

6 files changed

+92
-4
lines changed

6 files changed

+92
-4
lines changed

docs/imagevector_cd_overwrite.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ componentReferences:
6969

7070
Generic images are images that do not directly result in a resource.
7171
They will be matched with another component descriptor that actually defines the images.
72-
The other component descriptor MUST have the "imagevector.gardener.cloud/name" label in order to be matched.
72+
The other component descriptor MUST have the extraIdentity "imagevector-gardener-cloud+repository" in order to be matched.
7373

7474
<pre>
7575
meta:
@@ -94,9 +94,8 @@ component:
9494
type: ociImage
9595
extraIdentity:
9696
"imagevector-gardener-cloud+tag": "v1.19.4"
97+
"imagevector-gardener-cloud+repository": "k8s.gcr.io/hyperkube"
9798
labels:
98-
- name: imagevector.gardener.cloud/name
99-
value: hyperkube
10099
- name: imagevector.gardener.cloud/repository
101100
value: k8s.gcr.io/hyperkube
102101
access:

pkg/overwrite.go

+8
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,14 @@ func (io *imageOverwrite) findGenericImageResource(ctx context.Context, image Im
448448

449449
func resourceMatchesGenericImage(ctx context.Context, image ImageEntry, res cdv2.Resource) (bool, error) {
450450
log := logr.FromContextOrDiscard(ctx)
451+
452+
// this check should become the only check in the future
453+
// all subsequent checks are only intermediate fallbacks
454+
extraIdentityRepo, ok := res.GetIdentity()[RepositoryExtraIdentity]
455+
if ok && extraIdentityRepo == image.Repository {
456+
return true, nil
457+
}
458+
451459
var imageName string
452460
_, err := getLabel(res.GetLabels(), NameLabel, &imageName)
453461
if err != nil {

pkg/overwrite_test.go

+34
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,40 @@ var _ = Describe("GenerateOverwrite", func() {
265265
})))
266266
})
267267

268+
It("should generate image sources from generic images based on extra identity", func() {
269+
ivReader, err := os.Open("./testdata/resources/31-generic.yaml")
270+
Expect(err).ToNot(HaveOccurred())
271+
defer func() {
272+
Expect(ivReader.Close()).ToNot(HaveOccurred())
273+
}()
274+
275+
cd := readComponentDescriptor("./testdata/00-component/component-descriptor.yaml")
276+
err = pkg.ParseImageVector(context.TODO(), nil, cd, ivReader, &pkg.ParseImageOptions{
277+
GenericDependencies: []string{"hyperkube"},
278+
})
279+
Expect(err).ToNot(HaveOccurred())
280+
281+
list := readComponentDescriptors("./testdata/04-generic-images/component-descriptor2.yaml")
282+
imageVector, err := pkg.GenerateImageOverwrite(context.TODO(), nil, cd, pkg.GenerateImageOverwriteOptions{
283+
Components: list,
284+
})
285+
Expect(err).ToNot(HaveOccurred())
286+
287+
Expect(imageVector.Images).To(HaveLen(2))
288+
Expect(imageVector.Images).To(ContainElement(MatchFields(IgnoreExtras, Fields{
289+
"Name": Equal("kube-apiserver"),
290+
"Repository": Equal("eu.gcr.io/gardener-project/hyperkube"),
291+
"Tag": PointTo(Equal("v1.16.15-mod1")),
292+
"TargetVersion": PointTo(Equal("1.16.15")),
293+
})))
294+
Expect(imageVector.Images).To(ContainElement(MatchFields(IgnoreExtras, Fields{
295+
"Name": Equal("kube-apiserver"),
296+
"Repository": Equal("eu.gcr.io/gardener-project/hyperkube"),
297+
"Tag": PointTo(Equal("v1.15.12-mod1")),
298+
"TargetVersion": PointTo(Equal("1.15.12")),
299+
})))
300+
})
301+
268302
It("should generate a simple image with digest from a component descriptor", func() {
269303
imageVector, err := pkg.GenerateImageOverwrite(context.TODO(),
270304
nil,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
meta:
2+
schemaVersion: 'v2'
3+
4+
component:
5+
name: 'github.com/gardener/kubernetes-versions'
6+
version: 'v0.100.0'
7+
8+
repositoryContexts:
9+
- type: 'ociRegistry'
10+
baseUrl: 'eu.gcr.io/gardener-project/components/dev'
11+
12+
provider: 'internal'
13+
14+
sources: []
15+
16+
componentReferences: []
17+
18+
resources:
19+
- access:
20+
imageReference: eu.gcr.io/gardener-project/hyperkube:v1.16.15-mod1
21+
type: ociRegistry
22+
extraIdentity:
23+
imagevector-gardener-cloud+tag: v1.16.15
24+
imagevector-gardener-cloud+repository: k8s.gcr.io/hyperkube
25+
name: hyperkube
26+
relation: external
27+
type: ociImage
28+
version: 1.16.15
29+
30+
- access:
31+
imageReference: eu.gcr.io/gardener-project/hyperkube:v1.15.12-mod1
32+
type: ociRegistry
33+
extraIdentity:
34+
imagevector-gardener-cloud+tag: v1.15.12
35+
imagevector-gardener-cloud+repository: k8s.gcr.io/hyperkube
36+
name: hyperkube
37+
relation: external
38+
type: ociImage
39+
version: 1.15.12
40+
41+
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
images:
2+
- name: kube-apiserver
3+
repository: k8s.gcr.io/hyperkube
4+
sourceRepository: github.com/kubernetes/kubernetes
5+
targetVersion: < 1.17

pkg/types.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ var (
4141
RuntimeVersionLabel = Label("runtime-version")
4242
ImagesLabel = Label("images")
4343

44-
TagExtraIdentity = ExtraIdentityKey("tag")
44+
TagExtraIdentity = ExtraIdentityKey("tag")
45+
RepositoryExtraIdentity = ExtraIdentityKey("repository")
4546
)
4647

4748
// GardenerCIOriginalRefLabel describes the lable of the gardener ci that is used to identify the original ref of a resource.

0 commit comments

Comments
 (0)