Skip to content

Commit c09ebc9

Browse files
committed
feat: add more OCM template functions
1 parent 3d47185 commit c09ebc9

File tree

4 files changed

+68
-3
lines changed

4 files changed

+68
-3
lines changed

internal/deployment-repo/testdata/01/component-constructor.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ components:
131131
name: openmcp-project
132132

133133
resources:
134-
- name: service-provider-test-image
134+
- name: platform-service-test-image
135135
type: ociImage
136136
version: v0.3.0
137137
access:

internal/deployment-repo/testdata/01/expected-repo/resources/openmcp/extra/test-configmap.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@ data:
1212
key2: value2
1313
key: "value"
1414
repository: "{{OCM_REPO_URL}}"
15+
rootComponent: "github.com/openmcp-project/openmcp"
1516
crossplaneComponentName: "github.com/openmcp-project/openmcp/releasechannel/crossplane"
1617
crossplaneComponentVersion: "v0.0.1"
1718
crossplaneImage: "ghcr.io/openmcp-project/releasechannel/crossplane"
1819
crossplaneVersions: |
1920
- v0.0.1
20-
- v0.0.2
21+
- v0.0.2
22+
platformService: |
23+
image: "ghcr.io/openmcp-project/images/platform-service-test"
24+
version: "v0.3.0"

internal/deployment-repo/testdata/01/extra-manifests/test-configmap.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ data:
88
{{ toYaml .Values.user | indent 4 }}
99
key: "value"
1010
repository: "{{ getOCMRepository }}"
11+
rootComponent: "{{ dig "component" "name" "none" (componentVersionAsMap (getRootComponentVersion)) }}"
1112
{{- $releaseChannelCv := getComponentVersionByReference "releasechannel" }}
1213
{{- $crossplaneCv := getComponentVersionByReference $releaseChannelCv "crossplane" }}
1314
{{- $crossplaneImageResource := getResourceFromComponentVersion $crossplaneCv "image-crossplane" }}
@@ -19,4 +20,11 @@ data:
1920
crossplaneImage: "{{ dig "image" "none" $parsedImage }}"
2021
crossplaneVersions: |
2122
{{- $crossplaneVersions := listComponentVersions $crossplaneCv }}
22-
{{ toYaml (sortAlpha $crossplaneVersions) | indent 4 }}
23+
{{ toYaml (sortAlpha $crossplaneVersions) | indent 4 }}
24+
platformService: |
25+
{{- $platformServiceCv := getComponentVersionForResource "platform-service-test-image" }}
26+
{{- $platformServiceImageResource := getResourceFromComponentVersion $platformServiceCv "platform-service-test-image" }}
27+
{{- $platformServiceImageReference := dig "access" "imageReference" "none" $platformServiceImageResource }}
28+
{{- $platformServiceParsedImage := parseImage $platformServiceImageReference }}
29+
image: "{{ dig "image" "none" $platformServiceParsedImage }}"
30+
version: "{{ $platformServiceImageResource.version }}"

internal/template/template.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ func fromYAML(input string) (any, error) {
3030
return output, err
3131
}
3232

33+
func getRootComponentVersion(compGetter *ocmcli.ComponentGetter) *ocmcli.ComponentVersion {
34+
if compGetter == nil {
35+
panic("ComponentGetter must not be nil")
36+
}
37+
38+
return compGetter.RootComponentVersion()
39+
}
40+
3341
func getComponentVersionByReference(ctx context.Context, compGetter *ocmcli.ComponentGetter, args ...interface{}) *ocmcli.ComponentVersion {
3442
logger := log.GetLogger()
3543

@@ -62,6 +70,37 @@ func getComponentVersionByReference(ctx context.Context, compGetter *ocmcli.Comp
6270
return cv
6371
}
6472

73+
func getComponentVersionForResource(ctx context.Context, compGetter *ocmcli.ComponentGetter, args ...interface{}) *ocmcli.ComponentVersion {
74+
logger := log.GetLogger()
75+
76+
if compGetter == nil {
77+
panic("ComponentGetter must not be nil")
78+
}
79+
80+
if len(args) < 1 {
81+
panic("at least 1 argument is expected")
82+
}
83+
84+
var err error
85+
parentCv := compGetter.RootComponentVersion()
86+
referenceName := args[len(args)-1].(string)
87+
88+
if len(args) == 2 {
89+
parentCv = args[0].(*ocmcli.ComponentVersion)
90+
}
91+
92+
logger.Tracef("Template_Func: getComponentVersionForResource called with parent component version: %s and reference name: %s", parentCv.Component.Name, referenceName)
93+
94+
cv, err := compGetter.GetComponentVersionForResourceRecursive(ctx, parentCv, referenceName)
95+
if err != nil || cv == nil {
96+
if err != nil {
97+
logger.Errorf("Template_Func: getComponentVersionForResource error getting component version for resource %s from parent component version %s: %v", referenceName, parentCv.Component.Name, err)
98+
}
99+
return nil
100+
}
101+
return cv
102+
}
103+
65104
func componentVersionAsMap(cv *ocmcli.ComponentVersion) map[string]interface{} {
66105
if cv == nil {
67106
return nil
@@ -212,6 +251,10 @@ func (t *TemplateExecution) WithOCMComponentGetter(ctx context.Context, compGett
212251
"getOCMRepository": func() string {
213252
return getOCMRepository(compGetter)
214253
},
254+
// getRootComponentVersion returns the root ComponentVersion from the ComponentGetter.
255+
"getRootComponentVersion": func() *ocmcli.ComponentVersion {
256+
return getRootComponentVersion(compGetter)
257+
},
215258
// getComponentVersionByReference returns a ComponentVersion based on the provided reference name.
216259
// It can take either one or two arguments:
217260
// - One argument: the reference name (string). The search starts from the root component version.
@@ -222,6 +265,16 @@ func (t *TemplateExecution) WithOCMComponentGetter(ctx context.Context, compGett
222265
"getComponentVersionByReference": func(args ...interface{}) *ocmcli.ComponentVersion {
223266
return getComponentVersionByReference(ctx, compGetter, args...)
224267
},
268+
// getComponentVersionForResource returns a ComponentVersion that contains the specified resource.
269+
// It can take either one or two arguments:
270+
// - One argument: the resource name (string). The search starts from the root component version.
271+
// - Two arguments: the first argument is a ComponentVersion to start the search from, and the second argument is the resource name (string).
272+
// If the ComponentVersion is not found, it returns nil.
273+
// If the ComponentGetter is nil, it panics.
274+
// If the number of arguments is less than 1, it panics.
275+
"getComponentVersionForResource": func(args ...interface{}) *ocmcli.ComponentVersion {
276+
return getComponentVersionForResource(ctx, compGetter, args...)
277+
},
225278
// componentVersionAsMap converts a ComponentVersion to a map[string]interface{}.
226279
// If the ComponentVersion is nil, it returns nil.
227280
"componentVersionAsMap": func(cv *ocmcli.ComponentVersion) map[string]interface{} {

0 commit comments

Comments
 (0)