Skip to content

Commit 2b7c5a1

Browse files
author
Artem Ivanov
committed
generate policies using go generate
1 parent a382a1c commit 2b7c5a1

File tree

4 files changed

+135
-14
lines changed

4 files changed

+135
-14
lines changed

apis/v1alpha1/policy_methods.go

Lines changed: 3 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package main
2+
3+
import (
4+
"log"
5+
"os"
6+
"text/template"
7+
)
8+
9+
//go:generate go run gen_policies.go
10+
11+
// Define policy types
12+
var policies = []struct {
13+
Name string
14+
HasSingleRef bool // true if it uses a single TargetRef, false if it uses TargetRefs
15+
}{
16+
{"ClientSettingsPolicy", true},
17+
{"ObservabilityPolicy", false},
18+
{"UpstreamSettingsPolicy", false},
19+
}
20+
21+
// Template for generating policy methods
22+
const tmpl = `// Code generated by gen_policies.go; DO NOT EDIT.
23+
24+
package v1alpha1
25+
26+
import "sigs.k8s.io/gateway-api/apis/v1alpha2"
27+
28+
{{- range . }}
29+
30+
func (p *{{ .Name }}) GetTargetRefs() []v1alpha2.LocalPolicyTargetReference {
31+
{{- if .HasSingleRef }}
32+
return []v1alpha2.LocalPolicyTargetReference{p.Spec.TargetRef}
33+
{{- else }}
34+
return p.Spec.TargetRefs
35+
{{- end }}
36+
}
37+
38+
func (p *{{ .Name }}) GetPolicyStatus() v1alpha2.PolicyStatus {
39+
return p.Status
40+
}
41+
42+
func (p *{{ .Name }}) SetPolicyStatus(status v1alpha2.PolicyStatus) {
43+
p.Status = status
44+
}
45+
46+
{{- end }}
47+
`
48+
49+
func main() {
50+
// Ensure the output directory exists
51+
outputDir := "../apis/v1alpha1"
52+
if err := os.MkdirAll(outputDir, os.ModePerm); err != nil {
53+
log.Fatalf("failed to create directory: %v", err)
54+
}
55+
56+
// Open the output file
57+
file, err := os.Create("../policy_methods.go")
58+
if err != nil {
59+
log.Fatalf("failed to create file: %v", err)
60+
}
61+
defer file.Close()
62+
63+
// Create a template and execute it with the policy list
64+
t := template.Must(template.New("policy").Parse(tmpl))
65+
if err := t.Execute(file, policies); err != nil {
66+
log.Fatalf("failed to execute template: %v", err)
67+
}
68+
69+
log.Printf("Writing PolicyMethods to %s... Done\n", "policy_methods.go")
70+
}

apis/v1alpha2/policy_methods.go

Lines changed: 3 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package main
2+
3+
import (
4+
"log"
5+
"os"
6+
"text/template"
7+
)
8+
9+
//go:generate go run gen_policies.go
10+
11+
// Define policy types
12+
var policies = []string{
13+
"ObservabilityPolicy",
14+
}
15+
16+
// Template for generating policy methods
17+
const tmpl = `// Code generated by gen_policies.go; DO NOT EDIT.
18+
19+
package v1alpha2
20+
21+
import "sigs.k8s.io/gateway-api/apis/v1alpha2"
22+
23+
{{ range . }}
24+
func (p *{{ . }}) GetTargetRefs() []v1alpha2.LocalPolicyTargetReference {
25+
return p.Spec.TargetRefs
26+
}
27+
28+
func (p *{{ . }}) GetPolicyStatus() v1alpha2.PolicyStatus {
29+
return p.Status
30+
}
31+
32+
func (p *{{ . }}) SetPolicyStatus(status v1alpha2.PolicyStatus) {
33+
p.Status = status
34+
}
35+
{{ end }}
36+
`
37+
38+
func main() {
39+
// Ensure the output directory exists
40+
outputDir := "../apis/v1alpha2"
41+
if err := os.MkdirAll(outputDir, os.ModePerm); err != nil {
42+
log.Fatalf("failed to create directory: %v", err)
43+
}
44+
45+
// Open the output file
46+
file, err := os.Create("../policy_methods.go")
47+
if err != nil {
48+
log.Fatalf("failed to create file: %v", err)
49+
}
50+
defer file.Close()
51+
52+
// Create a template and execute it with the policy list
53+
t := template.Must(template.New("policy").Parse(tmpl))
54+
if err := t.Execute(file, policies); err != nil {
55+
log.Fatalf("failed to execute template: %v", err)
56+
}
57+
58+
log.Printf("Writing PolicyMethods to %s... Done\n", "policy_methods.go")
59+
}

0 commit comments

Comments
 (0)