Skip to content

Commit d7da35c

Browse files
committed
update
1 parent 75d816e commit d7da35c

File tree

7 files changed

+64
-25
lines changed

7 files changed

+64
-25
lines changed

cmd/manageDeploymentRepo.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,31 @@ openmcp-bootstrapper manageDeploymentRepo <componentLocation> <templateResourceL
139139

140140
logger.Infof("Applying templates from %s to deployment repository", templateResourceLocation)
141141

142-
err = deploymentrepo.TemplateDir(templateDir, repo)
142+
imagePullSecrets, err := cmd.Flags().GetStringArray(FlagImagePullSecret)
143143
if err != nil {
144-
return fmt.Errorf("failed to apply templates from directory %s: %w", templateDir, err)
144+
return fmt.Errorf("failed to get image pull secrets flag: %w", err)
145145
}
146146

147-
imagePullSecrets, err := cmd.Flags().GetStringArray(FlagImagePullSecret)
147+
templateInput := make(map[string]interface{})
148+
openMCPOperatorCV, err := ocmGetter.GetReferencedComponentVersion(cmd.Context(), "openmcp-operator")
149+
if err == nil {
150+
logger.Infof("Found openmcp-operator component version: %s:%s", openMCPOperatorCV.Component.Name, openMCPOperatorCV.Component.Version)
151+
152+
imageResources := openMCPOperatorCV.GetResourcesByType(ocmcli.OCIImageResourceType)
153+
if len(imageResources) == 0 || imageResources[0].Access.ImageReference == nil {
154+
return fmt.Errorf("no image resource found for openmcp-operator component version %s:%s", openMCPOperatorCV.Component.Name, openMCPOperatorCV.Component.Version)
155+
}
156+
157+
templateInput["openmcpOperator"] = map[string]interface{}{
158+
"version": openMCPOperatorCV.Component.Version,
159+
"image": *imageResources[0].Access.ImageReference,
160+
"imagePullSecrets": imagePullSecrets,
161+
}
162+
}
163+
164+
err = deploymentrepo.TemplateDir(templateDir, templateInput, repo)
148165
if err != nil {
149-
return fmt.Errorf("failed to get image pull secrets flag: %w", err)
166+
return fmt.Errorf("failed to apply templates from directory %s: %w", templateDir, err)
150167
}
151168

152169
clusterProviders, err := cmd.Flags().GetStringArray(FlagClusterProvider)

internal/deployment-repo/repo.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func CommitChanges(repo *git.Repository, message, name, email string) error {
8787
return fmt.Errorf("failed to get worktree: %w", err)
8888
}
8989

90-
_, err = workTree.Commit(message, &git.CommitOptions{
90+
hash, err := workTree.Commit(message, &git.CommitOptions{
9191
Author: &object.Signature{
9292
Name: name,
9393
Email: email,
@@ -102,6 +102,10 @@ func CommitChanges(repo *git.Repository, message, name, email string) error {
102102
}
103103
}
104104

105+
if !hash.IsZero() {
106+
logger.Infof("Created commit: %s", hash.String())
107+
}
108+
105109
return nil
106110
}
107111

internal/deployment-repo/templater.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
// TemplateDir processes the template files in the specified directory and writes
1818
// the rendered content to the corresponding files in the Git repository's worktree.
1919
// It uses the provided template directory and Git repository to perform the operations.
20-
func TemplateDir(templateDirectory string, repo *git.Repository) error {
20+
func TemplateDir(templateDirectory string, templateInput map[string]interface{}, repo *git.Repository) error {
2121
logger := log.GetLogger()
2222

2323
workTree, err := repo.Worktree()
@@ -36,7 +36,6 @@ func TemplateDir(templateDirectory string, repo *git.Repository) error {
3636
}()
3737

3838
te := template.NewTemplateExecution()
39-
templateInput := make(map[string]interface{})
4039

4140
// Recursively walk through all files in the template directory
4241
err = filepath.WalkDir(templateDirectory, func(path string, d os.DirEntry, walkError error) error {
@@ -63,14 +62,18 @@ func TemplateDir(templateDirectory string, repo *git.Repository) error {
6362
return fmt.Errorf("failed to read template file %s: %w", relativePath, err)
6463
}
6564

66-
templateResult, errInWalk = te.Execute(path, string(templateFromFile), templateInput)
67-
if err != nil {
68-
return fmt.Errorf("failed to execute template %s: %w", relativePath, err)
65+
wrappedTemplateInput := map[string]interface{}{
66+
"values": templateInput,
67+
}
68+
69+
templateResult, errInWalk = te.Execute(path, string(templateFromFile), wrappedTemplateInput)
70+
if errInWalk != nil {
71+
return fmt.Errorf("failed to execute template %s: %w", relativePath, errInWalk)
6972
}
7073

7174
fileInWorkTree, errInWalk = workTree.Filesystem.OpenFile(relativePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
7275
if errInWalk != nil {
73-
return fmt.Errorf("failed to open file in worktree %s: %w", relativePath, err)
76+
return fmt.Errorf("failed to open file in worktree %s: %w", relativePath, errInWalk)
7477
}
7578
defer func(pathInRepo billy.File) {
7679
err := pathInRepo.Close()
@@ -81,12 +84,12 @@ func TemplateDir(templateDirectory string, repo *git.Repository) error {
8184

8285
_, errInWalk = fileInWorkTree.Write(templateResult)
8386
if errInWalk != nil {
84-
return fmt.Errorf("failed to write to file in worktree %s: %w", relativePath, err)
87+
return fmt.Errorf("failed to write to file in worktree %s: %w", relativePath, errInWalk)
8588
}
8689

8790
// Add the file to the git index
8891
if _, errInWalk = workTree.Add(relativePath); errInWalk != nil {
89-
return fmt.Errorf("failed to add file to git index: %w", err)
92+
return fmt.Errorf("failed to add file to git index: %w", errInWalk)
9093
}
9194
}
9295
return nil
@@ -188,11 +191,12 @@ func TemplateProviders(ctx context.Context, clusterProviders, serviceProviders,
188191
}
189192

190193
func getImageResource(cv *ocmcli.ComponentVersion) (*ocmcli.Resource, error) {
191-
for _, resource := range cv.Component.Resources {
192-
if resource.Type == "ociImage" {
193-
return &resource, nil
194-
}
194+
resources := cv.GetResourcesByType(ocmcli.OCIImageResourceType)
195+
196+
if len(resources) > 0 {
197+
return &resources[0], nil
195198
}
199+
196200
return nil, fmt.Errorf("image resource not found for component %s", cv.Component.Name)
197201
}
198202

@@ -219,8 +223,8 @@ func templateProvider(options *ProviderOptions, templateSource, dir string, repo
219223
"values": map[string]interface{}{
220224
"name": options.Name,
221225
"image": map[string]interface{}{
222-
"location": options.Image,
223-
"pullSecrets": options.ImagePullSecrets,
226+
"location": options.Image,
227+
"imagePullSecrets": options.ImagePullSecrets,
224228
},
225229
},
226230
}

internal/deployment-repo/templates/clusterProvider.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ metadata:
44
name: "{{ .values.name }}"
55
spec:
66
image: "{{ .values.image.location }}"
7-
{{- if dig "image" "pullSecrets" "" .values }}
8-
{{- range $index, $value := .values.image.pullSecrets }}
7+
{{- if dig "image" "imagePullSecrets" "" .values }}
98
imagePullSecrets:
9+
{{- range $index, $value := .values.image.imagePullSecrets }}
1010
- name: "{{ $value }}"
1111
{{- end }}
1212
{{- end }}

internal/deployment-repo/templates/platformService.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ metadata:
44
name: "{{ .values.name }}"
55
spec:
66
image: "{{ .values.image.location }}"
7-
{{- if dig "image" "pullSecrets" "" .values }}
8-
{{- range $index, $value := .values.image.pullSecrets }}
7+
{{- if dig "image" "imagePullSecrets" "" .values }}
98
imagePullSecrets:
9+
{{- range $index, $value := .values.image.imagePullSecrets }}
1010
- name: "{{ $value }}"
1111
{{- end }}
1212
{{- end }}

internal/deployment-repo/templates/serviceProvider.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ metadata:
44
name: "{{ .values.name }}"
55
spec:
66
image: "{{ .values.image.location }}"
7-
{{- if dig "image" "pullSecrets" "" .values }}
8-
{{- range $index, $value := .values.image.pullSecrets }}
7+
{{- if dig "image" "imagePullSecrets" "" .values }}
98
imagePullSecrets:
9+
{{- range $index, $value := .values.image.imagePullSecrets }}
1010
- name: "{{ $value }}"
1111
{{- end }}
1212
{{- end }}

internal/ocm-cli/ocm.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ type Access struct {
102102
MediaType *string `json:"mediaType"`
103103
}
104104

105+
var (
106+
OCIImageResourceType = "ociImage"
107+
)
108+
105109
// GetResource retrieves a resource by its name from the component version.
106110
func (cv *ComponentVersion) GetResource(name string) (*Resource, error) {
107111
for _, resource := range cv.Component.Resources {
@@ -112,6 +116,16 @@ func (cv *ComponentVersion) GetResource(name string) (*Resource, error) {
112116
return nil, fmt.Errorf("resource %s not found in component version %s", name, cv.Component.Name)
113117
}
114118

119+
func (cv *ComponentVersion) GetResourcesByType(resourceType string) []Resource {
120+
var resources []Resource
121+
for _, resource := range cv.Component.Resources {
122+
if resource.Type == resourceType {
123+
resources = append(resources, resource)
124+
}
125+
}
126+
return resources
127+
}
128+
115129
// GetComponentReference retrieves a component reference by its name from the component version.
116130
func (cv *ComponentVersion) GetComponentReference(name string) (*ComponentReference, error) {
117131
for _, ref := range cv.Component.ComponentReferences {

0 commit comments

Comments
 (0)