Skip to content

Commit 681473c

Browse files
committed
fix wrong config parsing
1 parent c89d18c commit 681473c

File tree

4 files changed

+58
-12
lines changed

4 files changed

+58
-12
lines changed

cmd/project-workspace-operator/main.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"context"
5+
"encoding/json"
56
goflag "flag"
67
"fmt"
78
"os"
@@ -349,11 +350,21 @@ func (o *Options) Complete() error {
349350
return err
350351
}
351352

353+
clog := o.Log.WithName("config")
352354
if o.ProjectWorkspaceConfigPath != "" {
355+
clog.Info("Loading project workspace config", "path", o.ProjectWorkspaceConfigPath)
353356
o.ProjectWorkspaceConfig, err = config.LoadConfig(o.ProjectWorkspaceConfigPath)
354357
if err != nil {
355358
return err
356359
}
360+
cfgJson, err := json.Marshal(o.ProjectWorkspaceConfig)
361+
if err != nil {
362+
clog.Error(err, "Unable to marshal loaded config for logging")
363+
} else {
364+
clog.Info("Successfully loaded project workspace config", "config", string(cfgJson))
365+
}
366+
} else {
367+
clog.Info("No config argument specified, skipping config loading")
357368
}
358369

359370
if o.ProjectWorkspaceConfig == nil {

internal/controller/core/config/config.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package config
22

33
import (
4-
"errors"
54
"fmt"
65
"os"
76

@@ -27,15 +26,21 @@ func LoadConfig(path string) (*pwv1alpha1.ProjectWorkspaceConfig, error) {
2726
if err != nil {
2827
return nil, fmt.Errorf("error reading config file: %w", err)
2928
}
29+
raw := map[string]any{}
30+
err = yaml.Unmarshal(data, &raw)
31+
if err != nil {
32+
return nil, fmt.Errorf("error unmarshaling config file: %w", err)
33+
}
3034
cfg := &pwv1alpha1.ProjectWorkspaceConfig{}
31-
err = yaml.Unmarshal(data, cfg)
35+
_, hasKind := raw["kind"]
36+
_, hasApiVersion := raw["apiVersion"]
37+
if hasKind && hasApiVersion {
38+
err = yaml.Unmarshal(data, cfg)
39+
} else {
40+
err = yaml.Unmarshal(data, &cfg.Spec)
41+
}
3242
if err != nil {
33-
cfgSpec := &pwv1alpha1.ProjectWorkspaceConfigSpec{}
34-
err2 := yaml.Unmarshal(data, cfgSpec)
35-
if err2 != nil {
36-
return nil, fmt.Errorf("config can neither be parsed as full config nor as spec: %w", errors.Join(err, err2))
37-
}
38-
cfg.Spec = *cfgSpec
43+
return nil, fmt.Errorf("config can neither be parsed as full config nor as spec: %w", err)
3944
}
4045
return cfg, nil
4146
}

internal/controller/core/config/config_test.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,27 @@ import (
1212
)
1313

1414
func TestLoadConfig(t *testing.T) {
15-
pwConfig, err := config.LoadConfig("./testdata/config_valid.yaml")
15+
for _, validConfig := range []string{
16+
"./testdata/config_valid.yaml",
17+
"./testdata/config_valid2.yaml",
18+
} {
19+
pwConfig, err := config.LoadConfig(validConfig)
1620

17-
if assert.NoError(t, err) {
18-
assert.NotNil(t, pwConfig)
21+
if assert.NoError(t, err) {
22+
assert.NotNil(t, pwConfig)
23+
resourcesBlockingDeletion := []metav1.GroupVersionKind{
24+
{
25+
Group: "",
26+
Version: "v1",
27+
Kind: "Secret",
28+
},
29+
}
30+
assert.ElementsMatch(t, pwConfig.Spec.Project.ResourcesBlockingDeletion, resourcesBlockingDeletion)
31+
assert.ElementsMatch(t, pwConfig.Spec.Workspace.ResourcesBlockingDeletion, resourcesBlockingDeletion)
32+
}
1933
}
2034

21-
pwConfig, err = config.LoadConfig("./testdata/config_invalid.yaml")
35+
pwConfig, err := config.LoadConfig("./testdata/config_invalid.yaml")
2236

2337
if assert.Error(t, err) {
2438
assert.Nil(t, pwConfig)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: core.openmcp.cloud/v1alpha1
2+
kind: ProjectWorkspaceConfig
3+
metadata:
4+
name: project-workspace-config
5+
spec:
6+
project:
7+
resourcesBlockingDeletion:
8+
- group: ""
9+
version: "v1"
10+
kind: "Secret"
11+
12+
workspace:
13+
resourcesBlockingDeletion:
14+
- group: ""
15+
version: "v1"
16+
kind: "Secret"

0 commit comments

Comments
 (0)