Skip to content

Commit a0236b2

Browse files
committed
add extra manifests
1 parent f7696b9 commit a0236b2

File tree

3 files changed

+79
-13
lines changed

3 files changed

+79
-13
lines changed

cmd/manageDeploymentRepo.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,8 @@ import (
1010
)
1111

1212
const (
13-
FlagGitConfig = "git-config"
14-
FlagOcmConfig = "ocm-config"
15-
FlagClusterProvider = "cluster-provider"
16-
FlagServiceProvider = "service-provider"
17-
FlagPlatformService = "platform-service"
18-
FlagImagePullSecret = "image-pull-secret"
13+
FlagGitConfig = "git-config"
14+
FlagOcmConfig = "ocm-config"
1915
)
2016

2117
type LogWriter struct{}

internal/deployment-repo/config.go

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ type Providers struct {
4242
type OpenMCPOperator struct {
4343
Config json.RawMessage `json:"config"`
4444
ConfigParsed map[string]interface{}
45+
46+
Manifests []Manifest `json:"manifests"`
47+
}
48+
49+
type Manifest struct {
50+
Name string `json:"name"`
51+
Manifest json.RawMessage `json:"manifest"`
52+
ManifestParsed map[string]interface{}
4553
}
4654

4755
func (c *DeploymentRepoConfig) ReadFromFile(path string) error {
@@ -67,33 +75,54 @@ func (c *DeploymentRepoConfig) Validate() error {
6775
errs := field.ErrorList{}
6876

6977
if len(c.Environment) == 0 {
70-
errs = append(errs, field.Required(field.NewPath("environment"), "environment is required (environment)"))
78+
errs = append(errs, field.Required(field.NewPath("environment"), "environment is required"))
7179
}
7280

7381
if len(c.Component.OpenMCPComponentLocation) == 0 {
74-
errs = append(errs, field.Required(field.NewPath("component.location"), "component location is required (component.location)"))
82+
errs = append(errs, field.Required(field.NewPath("component.location"), "component location is required"))
7583
}
7684

7785
if len(c.DeploymentRepository.RepoURL) == 0 {
78-
errs = append(errs, field.Required(field.NewPath("repository.url"), "repository url is required (repository.url)"))
86+
errs = append(errs, field.Required(field.NewPath("repository.url"), "repository url is required"))
7987
}
8088

8189
if len(c.DeploymentRepository.RepoBranch) == 0 {
82-
errs = append(errs, field.Required(field.NewPath("repository.branch"), "repository branch is required (repository.branch)"))
90+
errs = append(errs, field.Required(field.NewPath("repository.branch"), "repository branch is required"))
8391
}
8492

8593
if len(c.TargetCluster.KubeconfigPath) == 0 {
86-
errs = append(errs, field.Required(field.NewPath("targetCluster.kubeconfigPath"), "kubeconfig path is required (targetCluster.kubeconfigPath)"))
94+
errs = append(errs, field.Required(field.NewPath("targetCluster.kubeconfigPath"), "kubeconfig path is required"))
8795
}
8896

8997
if len(c.OpenMCPOperator.Config) == 0 {
90-
errs = append(errs, field.Required(field.NewPath("openmcpOperator.config"), "openmcp operator config is required (openmcpOperator.config)"))
98+
errs = append(errs, field.Required(field.NewPath("openmcpOperator.config"), "openmcp operator config is required"))
9199
}
92100

93101
err := yaml.Unmarshal(c.OpenMCPOperator.Config, &c.OpenMCPOperator.ConfigParsed)
94102
if err != nil {
95103
errs = append(errs, field.Invalid(field.NewPath("openmcpOperator.config"), string(c.OpenMCPOperator.Config), "openmcp operator config is not valid yaml"))
96104
}
97105

106+
if len(c.OpenMCPOperator.Manifests) > 0 {
107+
for i, manifest := range c.OpenMCPOperator.Manifests {
108+
if len(manifest.Name) == 0 {
109+
errs = append(errs, field.Required(field.NewPath("openmcpOperator.manifests").Index(i).Child("name"), "manifest name is required"))
110+
}
111+
112+
if len(manifest.Manifest) == 0 {
113+
errs = append(errs, field.Required(field.NewPath("openmcpOperator.manifests").Index(i).Child("manifest"), "manifest content is required"))
114+
continue
115+
}
116+
117+
var parsed map[string]interface{}
118+
err = yaml.Unmarshal(manifest.Manifest, &parsed)
119+
if err != nil {
120+
errs = append(errs, field.Invalid(field.NewPath("openmcpOperator.manifests").Index(i), string(manifest.Manifest), "openmcp operator manifest is not valid yaml"))
121+
} else {
122+
c.OpenMCPOperator.Manifests[i].ManifestParsed = parsed
123+
}
124+
}
125+
}
126+
98127
return errs.ToAggregate()
99128
}

internal/deployment-repo/deploymentRepoManager.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/openmcp-project/controller-utils/pkg/clusters"
1313
"k8s.io/apimachinery/pkg/runtime"
1414
controllerruntime "sigs.k8s.io/controller-runtime"
15+
"sigs.k8s.io/yaml"
1516

1617
"sigs.k8s.io/kustomize/api/krusty"
1718
"sigs.k8s.io/kustomize/kyaml/filesys"
@@ -258,6 +259,37 @@ func (m *DeploymentRepoManager) ApplyTemplates(ctx context.Context) error {
258259
return fmt.Errorf("failed to apply templates from directory %s: %w", m.templatesDir, err)
259260
}
260261

262+
workTree, err := m.gitRepo.Worktree()
263+
if err != nil {
264+
return fmt.Errorf("failed to get worktree: %w", err)
265+
}
266+
267+
workTreePath := filepath.Join(ResourcesDirectoryName, OpenMCPDirectoryName, "extra")
268+
269+
for _, manifest := range m.Config.OpenMCPOperator.Manifests {
270+
workTreeFile := filepath.Join(workTreePath, manifest.Name+".yaml")
271+
logger.Infof("Applying openmcp-operator manifest %s to deployment repository", manifest.Name)
272+
273+
manifestRaw, err := yaml.Marshal(manifest.ManifestParsed)
274+
if err != nil {
275+
return fmt.Errorf("failed to marshal openmcp-operator manifest %s: %w", manifest.Name, err)
276+
}
277+
278+
err = os.MkdirAll(filepath.Join(m.gitRepoDir, workTreePath), 0755)
279+
if err != nil {
280+
return fmt.Errorf("failed to create directory %s in deployment repository: %w", workTreePath, err)
281+
}
282+
283+
err = os.WriteFile(filepath.Join(m.gitRepoDir, workTreeFile), manifestRaw, 0o644)
284+
if err != nil {
285+
return fmt.Errorf("failed to write openmcp-operator manifest %s to deployment repository: %w", manifest.Name, err)
286+
}
287+
_, err = workTree.Add(workTreePath)
288+
if err != nil {
289+
return fmt.Errorf("failed to add openmcp-operator manifest %s to git index: %w", manifest.Name, err)
290+
}
291+
}
292+
261293
return nil
262294
}
263295

@@ -362,7 +394,12 @@ func (m *DeploymentRepoManager) ApplyCustomResourceDefinitions(ctx context.Conte
362394

363395
func (m *DeploymentRepoManager) UpdateResourcesKustomization() error {
364396
logger := log.GetLogger()
365-
files := make([]string, 0, len(m.Config.Providers.ClusterProviders)+len(m.Config.Providers.ServiceProviders)+len(m.Config.Providers.PlatformServices)+len(m.crdFiles))
397+
files := make([]string, 0,
398+
len(m.Config.Providers.ClusterProviders)+
399+
len(m.Config.Providers.ServiceProviders)+
400+
len(m.Config.Providers.PlatformServices)+
401+
len(m.crdFiles)+
402+
len(m.Config.OpenMCPOperator.Manifests))
366403

367404
for _, crdFile := range m.crdFiles {
368405
files = append(files, filepath.Join(CRDsDirectoryName, filepath.Base(crdFile)))
@@ -380,6 +417,10 @@ func (m *DeploymentRepoManager) UpdateResourcesKustomization() error {
380417
files = append(files, filepath.Join("platform-services", platformService+".yaml"))
381418
}
382419

420+
for _, manifest := range m.Config.OpenMCPOperator.Manifests {
421+
files = append(files, filepath.Join("extra", manifest.Name+".yaml"))
422+
}
423+
383424
// open resources root customization
384425
resourcesRootKustomizationPath := filepath.Join(ResourcesDirectoryName, OpenMCPDirectoryName, "kustomization.yaml")
385426

0 commit comments

Comments
 (0)