Skip to content

Commit 9f428d3

Browse files
committed
feat: template input
1 parent bdac644 commit 9f428d3

File tree

4 files changed

+60
-55
lines changed

4 files changed

+60
-55
lines changed

internal/common/constants.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package common
2+
3+
const (
4+
EnvsDirectoryName = "envs"
5+
FluxCDDirectoryName = "fluxcd"
6+
ResourcesDirectoryName = "resources"
7+
TemplatesDirectoryName = "templates"
8+
OverlaysDirectoryName = "overlays"
9+
10+
FluxCDSourceControllerResourceName = "fluxcd-source-controller"
11+
FluxCDKustomizationControllerResourceName = "fluxcd-kustomize-controller"
12+
FluxCDHelmControllerResourceName = "fluxcd-helm-controller"
13+
)
Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package template
1+
package common
22

33
import (
44
"fmt"
@@ -8,11 +8,39 @@ import (
88
"github.com/openmcp-project/bootstrapper/internal/util"
99
)
1010

11+
type TemplateInput map[string]any
12+
1113
func NewTemplateInput() TemplateInput {
1214
return make(TemplateInput)
1315
}
1416

15-
type TemplateInput map[string]any
17+
func NewTemplateInputFromConfig(c *config.BootstrapperConfig) TemplateInput {
18+
t := TemplateInput{
19+
"fluxCDEnvPath": "./" + EnvsDirectoryName + "/" + c.Environment + "/" + FluxCDDirectoryName,
20+
"fluxCDResourcesPath": "../../../" + ResourcesDirectoryName + "/" + FluxCDDirectoryName,
21+
22+
"git": map[string]interface{}{
23+
"repoUrl": c.DeploymentRepository.RepoURL,
24+
"mainBranch": c.DeploymentRepository.RepoBranch,
25+
},
26+
"gitRepoEnvBranch": c.DeploymentRepository.RepoBranch,
27+
28+
"imagePullSecrets": func() []map[string]string {
29+
if len(c.ImagePullSecrets) == 0 {
30+
return nil
31+
}
32+
secrets := make([]map[string]string, 0, len(c.ImagePullSecrets))
33+
for _, secret := range c.ImagePullSecrets {
34+
secrets = append(secrets, map[string]string{
35+
"name": secret,
36+
})
37+
}
38+
return secrets
39+
}(),
40+
}
41+
42+
return t
43+
}
1644

1745
func (t TemplateInput) AddImageResource(cv *ocmcli.ComponentVersion, resourceName, key string) error {
1846
resource, err := cv.GetResource(resourceName)
@@ -36,22 +64,8 @@ func (t TemplateInput) AddImageResource(cv *ocmcli.ComponentVersion, resourceNam
3664
return nil
3765
}
3866

39-
func (t TemplateInput) SetImagePullSecrets(imagePullSecrets []string) {
40-
if len(imagePullSecrets) == 0 {
41-
return
42-
}
43-
44-
t["imagePullSecrets"] = make([]map[string]string, 0, len(imagePullSecrets))
45-
for _, secret := range imagePullSecrets {
46-
t["imagePullSecrets"] = append(t["imagePullSecrets"].([]map[string]string), map[string]string{
47-
"name": secret,
48-
})
49-
}
50-
}
51-
52-
func (t TemplateInput) SetGitRepo(repo config.DeploymentRepository) {
53-
t["git"] = map[string]interface{}{
54-
"repoUrl": repo.RepoURL,
55-
"mainBranch": repo.RepoBranch,
67+
func (t TemplateInput) ValuesWrapper() map[string]any {
68+
return map[string]any{
69+
"Values": t,
5670
}
5771
}

internal/flux_deployer/deployer.go

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,13 @@ import (
1212
"sigs.k8s.io/kustomize/api/krusty"
1313
"sigs.k8s.io/kustomize/kyaml/filesys"
1414

15+
"github.com/openmcp-project/bootstrapper/internal/common"
1516
cfg "github.com/openmcp-project/bootstrapper/internal/config"
1617
ocmcli "github.com/openmcp-project/bootstrapper/internal/ocm-cli"
1718
"github.com/openmcp-project/bootstrapper/internal/template"
1819
"github.com/openmcp-project/bootstrapper/internal/util"
1920
)
2021

21-
const (
22-
EnvsDirectoryName = "envs"
23-
FluxCDDirectoryName = "fluxcd"
24-
ResourcesDirectoryName = "resources"
25-
TemplatesDirectoryName = "templates"
26-
OverlaysDirectoryName = "overlays"
27-
28-
FluxCDSourceControllerResourceName = "fluxcd-source-controller"
29-
FluxCDKustomizationControllerResourceName = "fluxcd-kustomize-controller"
30-
FluxCDHelmControllerResourceName = "fluxcd-helm-controller"
31-
)
32-
3322
type FluxDeployer struct {
3423
Config *cfg.BootstrapperConfig
3524

@@ -115,7 +104,7 @@ func (d *FluxDeployer) Deploy(ctx context.Context) (err error) {
115104
return err
116105
}
117106

118-
d.fluxcdCV, err = componentGetter.GetComponentVersionForResourceRecursive(ctx, componentGetter.RootComponentVersion(), FluxCDSourceControllerResourceName)
107+
d.fluxcdCV, err = componentGetter.GetComponentVersionForResourceRecursive(ctx, componentGetter.RootComponentVersion(), common.FluxCDSourceControllerResourceName)
119108
if err != nil {
120109
return fmt.Errorf("failed to get fluxcd source controller component version: %w", err)
121110
}
@@ -137,7 +126,7 @@ func (d *FluxDeployer) Deploy(ctx context.Context) (err error) {
137126
}
138127

139128
// Kustomize <workdir>/repo/envs/<envName>/fluxcd
140-
fluxCDEnvDir := filepath.Join(d.repoDir, EnvsDirectoryName, d.Config.Environment, FluxCDDirectoryName)
129+
fluxCDEnvDir := filepath.Join(d.repoDir, common.EnvsDirectoryName, d.Config.Environment, common.FluxCDDirectoryName)
141130
manifests, err := d.Kustomize(fluxCDEnvDir)
142131
if err != nil {
143132
return fmt.Errorf("error kustomizing templated files: %w", err)
@@ -157,14 +146,14 @@ func (d *FluxDeployer) ArrangeTemplates() (err error) {
157146
d.log.Info("Arranging template files")
158147

159148
// Create directory <templatesDir>/envs/<envName>/fluxcd
160-
fluxCDEnvDir := filepath.Join(d.templatesDir, EnvsDirectoryName, d.Config.Environment, FluxCDDirectoryName)
149+
fluxCDEnvDir := filepath.Join(d.templatesDir, common.EnvsDirectoryName, d.Config.Environment, common.FluxCDDirectoryName)
161150
err = os.MkdirAll(fluxCDEnvDir, 0755)
162151
if err != nil {
163152
return fmt.Errorf("failed to create fluxcd environment directory: %w", err)
164153
}
165154

166155
// Create directory <templatesDir>/resources/fluxcd
167-
fluxCDResourcesDir := filepath.Join(d.templatesDir, ResourcesDirectoryName, FluxCDDirectoryName)
156+
fluxCDResourcesDir := filepath.Join(d.templatesDir, common.ResourcesDirectoryName, common.FluxCDDirectoryName)
168157
err = os.MkdirAll(fluxCDResourcesDir, 0755)
169158
if err != nil {
170159
return fmt.Errorf("failed to create fluxcd resources directory: %w", err)
@@ -173,13 +162,13 @@ func (d *FluxDeployer) ArrangeTemplates() (err error) {
173162
d.log.Debug("Copying template files to target directories")
174163

175164
// copy all files from <downloadDir>/templates/overlays to <templatesDir>/envs/<envName>/fluxcd
176-
err = util.CopyDir(filepath.Join(d.downloadDir, TemplatesDirectoryName, OverlaysDirectoryName), fluxCDEnvDir)
165+
err = util.CopyDir(filepath.Join(d.downloadDir, common.TemplatesDirectoryName, common.OverlaysDirectoryName), fluxCDEnvDir)
177166
if err != nil {
178167
return fmt.Errorf("failed to copy fluxcd overlays: %w", err)
179168
}
180169

181170
// copy all files from <downloadDir>/templates/resources to <templatesDir>/resources/fluxcd
182-
err = util.CopyDir(filepath.Join(d.downloadDir, TemplatesDirectoryName, ResourcesDirectoryName), fluxCDResourcesDir)
171+
err = util.CopyDir(filepath.Join(d.downloadDir, common.TemplatesDirectoryName, common.ResourcesDirectoryName), fluxCDResourcesDir)
183172
if err != nil {
184173
return fmt.Errorf("failed to copy fluxcd resources: %w", err)
185174
}
@@ -192,23 +181,15 @@ func (d *FluxDeployer) ArrangeTemplates() (err error) {
192181
// The resulting files are written to the repo directory.
193182
func (d *FluxDeployer) Template() (err error) {
194183
d.log.Infof("Applying templates from %s to deployment repository", d.Config.Component.FluxcdTemplateResourcePath)
195-
templateInput := template.NewTemplateInput()
196-
197-
templateInput.SetImagePullSecrets(d.Config.ImagePullSecrets)
198-
199-
templateInput["fluxCDEnvPath"] = "./" + EnvsDirectoryName + "/" + d.Config.Environment + "/" + FluxCDDirectoryName
200-
templateInput["gitRepoEnvBranch"] = d.Config.DeploymentRepository.RepoBranch
201-
templateInput["fluxCDResourcesPath"] = "../../../" + ResourcesDirectoryName + "/" + FluxCDDirectoryName
202-
203-
templateInput.SetGitRepo(d.Config.DeploymentRepository)
184+
templateInput := common.NewTemplateInputFromConfig(d.Config)
204185

205-
if err = templateInput.AddImageResource(d.fluxcdCV, FluxCDSourceControllerResourceName, "sourceController"); err != nil {
186+
if err = templateInput.AddImageResource(d.fluxcdCV, common.FluxCDSourceControllerResourceName, "sourceController"); err != nil {
206187
return fmt.Errorf("failed to apply fluxcd source controller template input: %w", err)
207188
}
208-
if err = templateInput.AddImageResource(d.fluxcdCV, FluxCDKustomizationControllerResourceName, "kustomizeController"); err != nil {
189+
if err = templateInput.AddImageResource(d.fluxcdCV, common.FluxCDKustomizationControllerResourceName, "kustomizeController"); err != nil {
209190
return fmt.Errorf("failed to apply fluxcd kustomize controller template input: %w", err)
210191
}
211-
if err = templateInput.AddImageResource(d.fluxcdCV, FluxCDHelmControllerResourceName, "helmController"); err != nil {
192+
if err = templateInput.AddImageResource(d.fluxcdCV, common.FluxCDHelmControllerResourceName, "helmController"); err != nil {
212193
return fmt.Errorf("failed to apply fluxcd helm controller template input: %w", err)
213194
}
214195

internal/flux_deployer/templating.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import (
77

88
"github.com/sirupsen/logrus"
99

10+
"github.com/openmcp-project/bootstrapper/internal/common"
1011
"github.com/openmcp-project/bootstrapper/internal/template"
1112
)
1213

1314
// TemplateDirectory processes the template files in the specified directory and writes
1415
// the rendered content to the corresponding files in the Git repository's worktree.
1516
// It uses the provided template directory and Git repository to perform the operations.
16-
func TemplateDirectory(templateDirectory string, templateInput template.TemplateInput, repo string, logger *logrus.Logger) error {
17+
func TemplateDirectory(templateDirectory string, templateInput common.TemplateInput, repo string, logger *logrus.Logger) error {
1718

1819
templateDir, err := os.Open(templateDirectory)
1920
if err != nil {
@@ -62,11 +63,7 @@ func TemplateDirectory(templateDirectory string, templateInput template.Template
6263
return fmt.Errorf("failed to read template file %s: %w", relativePath, err)
6364
}
6465

65-
wrappedTemplateInput := map[string]interface{}{
66-
"Values": templateInput,
67-
}
68-
69-
templateResult, errInWalk = te.Execute(path, string(templateFromFile), wrappedTemplateInput)
66+
templateResult, errInWalk = te.Execute(path, string(templateFromFile), templateInput.ValuesWrapper())
7067
if errInWalk != nil {
7168
return fmt.Errorf("failed to execute template %s: %w", relativePath, errInWalk)
7269
}

0 commit comments

Comments
 (0)