Skip to content

Commit 7023d6c

Browse files
committed
update
1 parent 70d5858 commit 7023d6c

File tree

6 files changed

+95
-23
lines changed

6 files changed

+95
-23
lines changed

cmd/manageDeploymentRepo.go

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/go-git/go-git/v5"
77
deploymentrepo "github.com/openmcp-project/bootstrapper/internal/deployment-repo"
88
"github.com/openmcp-project/bootstrapper/internal/log"
9+
ocmcli "github.com/openmcp-project/bootstrapper/internal/ocm-cli"
910
"github.com/openmcp-project/bootstrapper/internal/util"
1011
"github.com/spf13/cobra"
1112

@@ -18,6 +19,7 @@ const (
1819
FlagClusterProvider = "cluster-provider"
1920
FlagServiceProvider = "service-provider"
2021
FlagPlatformService = "platform-service"
22+
FlagImagePullSecret = "image-pull-secret"
2123
)
2224

2325
type LogWriter struct{}
@@ -44,11 +46,16 @@ openmcp-bootstrapper manageDeploymentRepo <componentLocation> <templateDirectory
4446
},
4547
Example: ` openmcp-bootstrapper manageDeploymentRepo "ghcr.io/openmcp-project/components//github.com/openmcp-project/openmcp:${OPENMCP_VERSION}" ./templates "https://github.com/${GITHUB_USER}/deployment-repo.git" incoming-branch`,
4648
RunE: func(cmd *cobra.Command, args []string) error {
47-
//componentLocation := args[0]
49+
componentLocation := args[0]
4850
templateDirectory := args[1]
4951
deploymentRepository := args[2]
5052
deploymentRepositoryBranch := args[3]
5153

54+
cv, err := ocmcli.GetComponentVersion(cmd.Context(), componentLocation, cmd.Flag(FlagOcmConfig).Value.String())
55+
if err != nil {
56+
return fmt.Errorf("failed to get component version from %s: %w", componentLocation, err)
57+
}
58+
5259
logger := log.GetLogger()
5360
logger.Debug("parsing git config file from flag:", cmd.Flag(FlagGitConfig).Value.String())
5461

@@ -94,13 +101,46 @@ openmcp-bootstrapper manageDeploymentRepo <componentLocation> <templateDirectory
94101
return fmt.Errorf("failed to apply templates from directory %s: %w", templateDirectory, err)
95102
}
96103

104+
imagePullSecrets, err := cmd.Flags().GetStringArray(FlagImagePullSecret)
105+
if err != nil {
106+
return fmt.Errorf("failed to get image pull secrets flag: %w", err)
107+
}
108+
97109
clusterProviders, err := cmd.Flags().GetStringArray(FlagClusterProvider)
98110
if err != nil {
99111
return fmt.Errorf("failed to get cluster providers flag: %w", err)
100112
}
101113

102114
for _, provider := range clusterProviders {
103-
err = deploymentrepo.TemplateClusterProvider(provider, "foo:1.2.3", repo)
115+
cr, err := cv.GetComponentReference("cluster-provider-" + provider)
116+
if err != nil {
117+
return fmt.Errorf("failed to get component reference for cluster provider %s: %w", provider, err)
118+
}
119+
120+
providerCV, err := ocmcli.GetComponentVersion(cmd.Context(), cv.Repository+"//"+cr.ComponentName, cmd.Flag(FlagOcmConfig).Value.String())
121+
if err != nil {
122+
return fmt.Errorf("failed to get component version for cluster provider %s: %w", provider, err)
123+
}
124+
125+
var imageResource *ocmcli.Resource
126+
127+
for _, resource := range providerCV.Component.Resources {
128+
if resource.Type == "ociImage" {
129+
imageResource = &resource
130+
break
131+
}
132+
}
133+
134+
if imageResource == nil || imageResource.Access.ImageReference == nil {
135+
return fmt.Errorf("image resource not found for cluster provider %s", provider)
136+
}
137+
138+
opts := &deploymentrepo.ProviderOptions{
139+
Name: provider,
140+
Image: *imageResource.Access.ImageReference, // This should be replaced with the actual image location
141+
ImagePullSecrets: imagePullSecrets,
142+
}
143+
err = deploymentrepo.TemplateClusterProvider(opts, repo)
104144
if err != nil {
105145
return fmt.Errorf("failed to apply cluster provider %s: %w", provider, err)
106146
}
@@ -111,7 +151,12 @@ openmcp-bootstrapper manageDeploymentRepo <componentLocation> <templateDirectory
111151
return fmt.Errorf("failed to get service providers flag: %w", err)
112152
}
113153
for _, provider := range serviceProviders {
114-
err = deploymentrepo.TemplateServiceProvider(provider, "foo:1.2.3", repo)
154+
opts := &deploymentrepo.ProviderOptions{
155+
Name: provider,
156+
Image: "foo:1.2.3", // This should be replaced with the actual image location
157+
ImagePullSecrets: imagePullSecrets,
158+
}
159+
err = deploymentrepo.TemplateServiceProvider(opts, repo)
115160
if err != nil {
116161
return fmt.Errorf("failed to apply service provider %s: %w", provider, err)
117162
}
@@ -122,7 +167,12 @@ openmcp-bootstrapper manageDeploymentRepo <componentLocation> <templateDirectory
122167
return fmt.Errorf("failed to get platform services flag: %w", err)
123168
}
124169
for _, service := range platformServices {
125-
err = deploymentrepo.TemplatePlatformService(service, "foo:1.2.3", repo)
170+
opts := &deploymentrepo.ProviderOptions{
171+
Name: service,
172+
Image: "foo:1.2.3", // This should be replaced with the actual image location
173+
ImagePullSecrets: imagePullSecrets,
174+
}
175+
err = deploymentrepo.TemplatePlatformService(opts, repo)
126176
if err != nil {
127177
return fmt.Errorf("failed to apply platform service %s: %w", service, err)
128178
}
@@ -154,6 +204,9 @@ func init() {
154204
manageDeploymentRepoCmd.Flags().String(FlagOcmConfig, "", "ocm configuration file")
155205
manageDeploymentRepoCmd.Flags().String(FlagGitConfig, "", "Git configuration file")
156206

207+
manageDeploymentRepoCmd.Flags().StringArray(FlagImagePullSecret, nil,
208+
"Image pull secret to use for the deployment repository (default: openmcp-pull-secret)")
209+
157210
if err := manageDeploymentRepoCmd.MarkFlagRequired(FlagGitConfig); err != nil {
158211
panic(err)
159212
}

internal/deployment-repo/templater.go

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,30 +106,37 @@ var (
106106
platformServiceTemplate string
107107
)
108108

109-
func TemplateClusterProvider(name, image string, repo *git.Repository) error {
110-
return templateProvider(name, image, clusterProviderTemplate, "cluster-providers", repo)
109+
type ProviderOptions struct {
110+
Name string
111+
Image string
112+
ImagePullSecrets []string
111113
}
112114

113-
func TemplateServiceProvider(name, image string, repo *git.Repository) error {
114-
return templateProvider(name, image, serviceProviderTemplate, "service-providers", repo)
115+
func TemplateClusterProvider(options *ProviderOptions, repo *git.Repository) error {
116+
return templateProvider(options, clusterProviderTemplate, "cluster-providers", repo)
115117
}
116118

117-
func TemplatePlatformService(name, image string, repo *git.Repository) error {
118-
return templateProvider(name, image, platformServiceTemplate, "platform-services", repo)
119+
func TemplateServiceProvider(options *ProviderOptions, repo *git.Repository) error {
120+
return templateProvider(options, serviceProviderTemplate, "service-providers", repo)
119121
}
120122

121-
func templateProvider(name, image, templateSource, dir string, repo *git.Repository) error {
123+
func TemplatePlatformService(options *ProviderOptions, repo *git.Repository) error {
124+
return templateProvider(options, platformServiceTemplate, "platform-services", repo)
125+
}
126+
127+
func templateProvider(options *ProviderOptions, templateSource, dir string, repo *git.Repository) error {
122128
logger := log.GetLogger()
123-
providerPath := filepath.Join(dir, name+".yaml")
129+
providerPath := filepath.Join(dir, options.Name+".yaml")
124130

125-
logger.Debugf("Creating provider %s with image %s in path %s", name, image, providerPath)
131+
logger.Debugf("Creating provider %s with image %s in path %s", options.Name, options.Image, providerPath)
126132

127133
te := template.NewTemplateExecution()
128134
templateInput := map[string]interface{}{
129135
"values": map[string]interface{}{
130-
"name": name,
136+
"name": options.Name,
131137
"image": map[string]interface{}{
132-
"location": image,
138+
"location": options.Image,
139+
"pullSecrets": options.ImagePullSecrets,
133140
},
134141
},
135142
}
@@ -155,7 +162,7 @@ func templateProvider(name, image, templateSource, dir string, repo *git.Reposit
155162

156163
templateResult, err := te.Execute(providerPath, templateSource, templateInput)
157164
if err != nil {
158-
return fmt.Errorf("failed to execute templateSource for cluster provider %s: %w", name, err)
165+
return fmt.Errorf("failed to execute templateSource for cluster provider %s: %w", options.Name, err)
159166
}
160167

161168
_, err = fileInWorkTree.Write(templateResult)

internal/deployment-repo/templates/clusterProvider.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ metadata:
44
name: "{{ .values.name }}"
55
spec:
66
image: "{{ .values.image.location }}"
7-
{{- if dig "image" "pullSecret" "" .values }}
8-
imagePullSecret: "{{ .values.image.pullSecret }}"
7+
{{- if dig "image" "pullSecrets" "" .values }}
8+
{{- range $index, $value := .values.image.pullSecrets }}
9+
imagePullSecrets:
10+
- name: "{{ $value }}"
11+
{{- end }}
912
{{- end }}
1013
{{- if dig "env" "" .values }}
1114
env:

internal/deployment-repo/templates/platformService.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ metadata:
44
name: "{{ .values.name }}"
55
spec:
66
image: "{{ .values.image.location }}"
7-
{{- if dig "image" "pullSecret" "" .values }}
8-
imagePullSecret: "{{ .values.image.pullSecret }}"
7+
{{- if dig "image" "pullSecrets" "" .values }}
8+
{{- range $index, $value := .values.image.pullSecrets }}
9+
imagePullSecrets:
10+
- name: "{{ $value }}"
11+
{{- end }}
912
{{- end }}
1013
{{- if dig "env" "" .values }}
1114
env:

internal/deployment-repo/templates/serviceProvider.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ metadata:
44
name: "{{ .values.name }}"
55
spec:
66
image: "{{ .values.image.location }}"
7-
{{- if dig "image" "pullSecret" "" .values }}
8-
imagePullSecret: "{{ .values.image.pullSecret }}"
7+
{{- if dig "image" "pullSecrets" "" .values }}
8+
{{- range $index, $value := .values.image.pullSecrets }}
9+
imagePullSecrets:
10+
- name: "{{ $value }}"
11+
{{- end }}
912
{{- end }}
1013
{{- if dig "env" "" .values }}
1114
env:

internal/ocm-cli/ocm.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ func Execute(ctx context.Context, commands []string, args []string, ocmConfig st
5252
// ComponentVersion represents a version of an OCM component.
5353
type ComponentVersion struct {
5454
// Component is the OCM component associated with this version.
55-
Component Component `json:"component"`
55+
Component Component `json:"component"`
56+
Repository string `json:"repository,omitempty"`
5657
}
5758

5859
// Component represents an OCM component with its name, version, references to other components, and resources.
@@ -147,6 +148,8 @@ func GetComponentVersion(ctx context.Context, componentReference string, ocmConf
147148
return nil, fmt.Errorf("error unmarshalling component version: %w", err)
148149
}
149150

151+
cv.Repository = strings.SplitN(componentReference, "//", 2)[0]
152+
150153
return &cv, nil
151154
}
152155

0 commit comments

Comments
 (0)