Skip to content

Commit 839a43f

Browse files
committed
Fix PROJECT config unmarshaling and ServiceMonitor template formatting
- Change ProjectConfig tags from json to yaml for correct unmarshaling - Unmarshal directly into ProjectConfig struct instead of config.Config interface - Fix fmt.Sprintf template to pass domain twice for both Service and ServiceMonitor labels - Remove unused config import - Tested plugin successfully generates correct Prometheus monitoring files
1 parent edc4046 commit 839a43f

File tree

2 files changed

+20
-18
lines changed
  • docs/book/src/simple-external-plugin-tutorial/testdata/sampleexternalplugin/v1/scaffolds

2 files changed

+20
-18
lines changed

docs/book/src/simple-external-plugin-tutorial/testdata/sampleexternalplugin/v1/scaffolds/edit.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222

2323
"v1/scaffolds/internal/templates/prometheus"
2424

25-
"sigs.k8s.io/kubebuilder/v4/pkg/config"
2625
"sigs.k8s.io/kubebuilder/v4/pkg/plugin"
2726
"sigs.k8s.io/kubebuilder/v4/pkg/plugin/external"
2827
yamlv3 "sigs.k8s.io/yaml"
@@ -78,9 +77,9 @@ func EditCmd(pr *external.PluginRequest) external.PluginResponse {
7877

7978
// ProjectConfig represents the minimal PROJECT file structure we need
8079
type ProjectConfig struct {
81-
Domain string `json:"domain"`
82-
ProjectName string `json:"projectName"`
83-
Repo string `json:"repo"`
80+
Domain string `yaml:"domain"`
81+
ProjectName string `yaml:"projectName"`
82+
Repo string `yaml:"repo"`
8483
}
8584

8685
// loadProjectConfig reads the PROJECT file and extracts necessary information
@@ -101,22 +100,25 @@ func loadProjectConfig() (*ProjectConfig, error) {
101100
return nil, fmt.Errorf("failed to read PROJECT file: %w", err)
102101
}
103102

104-
var cfg config.Config
103+
var cfg ProjectConfig
105104
if err := yamlv3.Unmarshal(data, &cfg); err != nil {
106105
return nil, fmt.Errorf("failed to unmarshal PROJECT file: %w", err)
107106
}
108107

109-
projectName := "project"
110-
if cfg.GetProjectName() != "" {
111-
projectName = cfg.GetProjectName()
112-
} else if cfg.GetRepository() != "" {
113-
// Extract project name from repo path
114-
projectName = filepath.Base(cfg.GetRepository())
108+
// Set defaults if fields are empty
109+
if cfg.Domain == "" {
110+
cfg.Domain = "example.com"
111+
}
112+
if cfg.ProjectName == "" {
113+
cfg.ProjectName = "project"
114+
if cfg.Repo != "" {
115+
// Extract project name from repo path
116+
cfg.ProjectName = filepath.Base(cfg.Repo)
117+
}
118+
}
119+
if cfg.Repo == "" {
120+
cfg.Repo = cfg.Domain + "/" + cfg.ProjectName
115121
}
116122

117-
return &ProjectConfig{
118-
Domain: cfg.GetDomain(),
119-
ProjectName: projectName,
120-
Repo: cfg.GetRepository(),
121-
}, nil
123+
return &cfg, nil
122124
}

docs/book/src/simple-external-plugin-tutorial/testdata/sampleexternalplugin/v1/scaffolds/internal/templates/prometheus/servicemonitor.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type ServiceMonitorOptions func(*ServiceMonitor)
2929
// WithDomain sets the domain for the ServiceMonitor
3030
func WithDomain(domain string) ServiceMonitorOptions {
3131
return func(sm *ServiceMonitor) {
32-
sm.Content = fmt.Sprintf(serviceMonitorTemplate, domain)
32+
sm.Content = fmt.Sprintf(serviceMonitorTemplate, domain, domain)
3333
}
3434
}
3535

@@ -53,7 +53,7 @@ func NewServiceMonitor(opts ...ServiceMonitorOptions) *ServiceMonitor {
5353

5454
// Set default content if not set by options
5555
if sm.Content == "" {
56-
sm.Content = fmt.Sprintf(serviceMonitorTemplate, "example.com")
56+
sm.Content = fmt.Sprintf(serviceMonitorTemplate, "example.com", "example.com")
5757
}
5858

5959
return sm

0 commit comments

Comments
 (0)