Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v0.3.0-dev
v0.4.0
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ components:
name: openmcp-project

resources:
- name: service-provider-test-image
- name: platform-service-test-image
type: ociImage
version: v0.3.0
access:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,13 @@ data:
key2: value2
key: "value"
repository: "{{OCM_REPO_URL}}"
rootComponent: "github.com/openmcp-project/openmcp"
crossplaneComponentName: "github.com/openmcp-project/openmcp/releasechannel/crossplane"
crossplaneComponentVersion: "v0.0.1"
crossplaneImage: "ghcr.io/openmcp-project/releasechannel/crossplane"
crossplaneVersions: |
- v0.0.1
- v0.0.2
- v0.0.2
platformService: |
image: "ghcr.io/openmcp-project/images/platform-service-test"
version: "v0.3.0"
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ data:
{{ toYaml .Values.user | indent 4 }}
key: "value"
repository: "{{ getOCMRepository }}"
rootComponent: "{{ dig "component" "name" "none" (componentVersionAsMap (getRootComponentVersion)) }}"
{{- $releaseChannelCv := getComponentVersionByReference "releasechannel" }}
{{- $crossplaneCv := getComponentVersionByReference $releaseChannelCv "crossplane" }}
{{- $crossplaneImageResource := getResourceFromComponentVersion $crossplaneCv "image-crossplane" }}
Expand All @@ -19,4 +20,11 @@ data:
crossplaneImage: "{{ dig "image" "none" $parsedImage }}"
crossplaneVersions: |
{{- $crossplaneVersions := listComponentVersions $crossplaneCv }}
{{ toYaml (sortAlpha $crossplaneVersions) | indent 4 }}
{{ toYaml (sortAlpha $crossplaneVersions) | indent 4 }}
platformService: |
{{- $platformServiceCv := getComponentVersionForResource "platform-service-test-image" }}
{{- $platformServiceImageResource := getResourceFromComponentVersion $platformServiceCv "platform-service-test-image" }}
{{- $platformServiceImageReference := dig "access" "imageReference" "none" $platformServiceImageResource }}
{{- $platformServiceParsedImage := parseImage $platformServiceImageReference }}
image: "{{ dig "image" "none" $platformServiceParsedImage }}"
version: "{{ $platformServiceImageResource.version }}"
53 changes: 53 additions & 0 deletions internal/template/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ func fromYAML(input string) (any, error) {
return output, err
}

func getRootComponentVersion(compGetter *ocmcli.ComponentGetter) *ocmcli.ComponentVersion {
if compGetter == nil {
panic("ComponentGetter must not be nil")
}

return compGetter.RootComponentVersion()
}

func getComponentVersionByReference(ctx context.Context, compGetter *ocmcli.ComponentGetter, args ...interface{}) *ocmcli.ComponentVersion {
logger := log.GetLogger()

Expand Down Expand Up @@ -62,6 +70,37 @@ func getComponentVersionByReference(ctx context.Context, compGetter *ocmcli.Comp
return cv
}

func getComponentVersionForResource(ctx context.Context, compGetter *ocmcli.ComponentGetter, args ...interface{}) *ocmcli.ComponentVersion {
logger := log.GetLogger()

if compGetter == nil {
panic("ComponentGetter must not be nil")
}

if len(args) < 1 {
panic("at least 1 argument is expected")
}

var err error
parentCv := compGetter.RootComponentVersion()
referenceName := args[len(args)-1].(string)

if len(args) == 2 {
parentCv = args[0].(*ocmcli.ComponentVersion)
}

logger.Tracef("Template_Func: getComponentVersionForResource called with parent component version: %s and reference name: %s", parentCv.Component.Name, referenceName)

cv, err := compGetter.GetComponentVersionForResourceRecursive(ctx, parentCv, referenceName)
if err != nil || cv == nil {
if err != nil {
logger.Errorf("Template_Func: getComponentVersionForResource error getting component version for resource %s from parent component version %s: %v", referenceName, parentCv.Component.Name, err)
}
return nil
}
return cv
}

func componentVersionAsMap(cv *ocmcli.ComponentVersion) map[string]interface{} {
if cv == nil {
return nil
Expand Down Expand Up @@ -212,6 +251,10 @@ func (t *TemplateExecution) WithOCMComponentGetter(ctx context.Context, compGett
"getOCMRepository": func() string {
return getOCMRepository(compGetter)
},
// getRootComponentVersion returns the root ComponentVersion from the ComponentGetter.
"getRootComponentVersion": func() *ocmcli.ComponentVersion {
return getRootComponentVersion(compGetter)
},
// getComponentVersionByReference returns a ComponentVersion based on the provided reference name.
// It can take either one or two arguments:
// - One argument: the reference name (string). The search starts from the root component version.
Expand All @@ -222,6 +265,16 @@ func (t *TemplateExecution) WithOCMComponentGetter(ctx context.Context, compGett
"getComponentVersionByReference": func(args ...interface{}) *ocmcli.ComponentVersion {
return getComponentVersionByReference(ctx, compGetter, args...)
},
// getComponentVersionForResource returns a ComponentVersion that contains the specified resource.
// It can take either one or two arguments:
// - One argument: the resource name (string). The search starts from the root component version.
// - Two arguments: the first argument is a ComponentVersion to start the search from, and the second argument is the resource name (string).
// If the ComponentVersion is not found, it returns nil.
// If the ComponentGetter is nil, it panics.
// If the number of arguments is less than 1, it panics.
"getComponentVersionForResource": func(args ...interface{}) *ocmcli.ComponentVersion {
return getComponentVersionForResource(ctx, compGetter, args...)
},
// componentVersionAsMap converts a ComponentVersion to a map[string]interface{}.
// If the ComponentVersion is nil, it returns nil.
"componentVersionAsMap": func(cv *ocmcli.ComponentVersion) map[string]interface{} {
Expand Down