Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions apis/v1alpha1/policy_methods.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

70 changes: 70 additions & 0 deletions apis/v1alpha1/tools/gen_policies.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package main

import (
"log"
"os"
"text/template"
)

//go:generate go run gen_policies.go

// Define policy types
var policies = []struct {
Name string
HasSingleRef bool // true if it uses a single TargetRef, false if it uses TargetRefs
}{
{"ClientSettingsPolicy", true},
{"ObservabilityPolicy", false},
{"UpstreamSettingsPolicy", false},
}

// Template for generating policy methods
const tmpl = `// Code generated by gen_policies.go; DO NOT EDIT.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's deduplicate the common template and main function that we have in both v1alpha1 and v1alpha2 into a common file, maybe in apis/ top-level. Then we can just include the specific policy lists in each api version directory.

The package version at the top of the template could also be provided as a templated value.


package v1alpha1

import "sigs.k8s.io/gateway-api/apis/v1alpha2"

{{- range . }}

func (p *{{ .Name }}) GetTargetRefs() []v1alpha2.LocalPolicyTargetReference {
{{- if .HasSingleRef }}
return []v1alpha2.LocalPolicyTargetReference{p.Spec.TargetRef}
{{- else }}
return p.Spec.TargetRefs
{{- end }}
}

func (p *{{ .Name }}) GetPolicyStatus() v1alpha2.PolicyStatus {
return p.Status
}

func (p *{{ .Name }}) SetPolicyStatus(status v1alpha2.PolicyStatus) {
p.Status = status
}

{{- end }}
`

func main() {
// Ensure the output directory exists
outputDir := "../apis/v1alpha1"
if err := os.MkdirAll(outputDir, os.ModePerm); err != nil {
log.Fatalf("failed to create directory: %v", err)
}

// Open the output file
file, err := os.Create("../policy_methods.go")
if err != nil {
log.Fatalf("failed to create file: %v", err)
}
defer file.Close()

// Create a template and execute it with the policy list
t := template.Must(template.New("policy").Parse(tmpl))
if err := t.Execute(file, policies); err != nil {
log.Fatalf("failed to execute template: %v", err)
}

log.Printf("Writing PolicyMethods to %s... Done\n", "policy_methods.go")
}
10 changes: 3 additions & 7 deletions apis/v1alpha2/policy_methods.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

59 changes: 59 additions & 0 deletions apis/v1alpha2/tools/gen_policies.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package main

import (
"log"
"os"
"text/template"
)

//go:generate go run gen_policies.go

// Define policy types
var policies = []string{
"ObservabilityPolicy",
}

// Template for generating policy methods
const tmpl = `// Code generated by gen_policies.go; DO NOT EDIT.

package v1alpha2

import "sigs.k8s.io/gateway-api/apis/v1alpha2"

{{ range . }}
func (p *{{ . }}) GetTargetRefs() []v1alpha2.LocalPolicyTargetReference {
return p.Spec.TargetRefs
}

func (p *{{ . }}) GetPolicyStatus() v1alpha2.PolicyStatus {
return p.Status
}

func (p *{{ . }}) SetPolicyStatus(status v1alpha2.PolicyStatus) {
p.Status = status
}
{{ end }}
`

func main() {
// Ensure the output directory exists
outputDir := "../apis/v1alpha2"
if err := os.MkdirAll(outputDir, os.ModePerm); err != nil {
log.Fatalf("failed to create directory: %v", err)
}

// Open the output file
file, err := os.Create("../policy_methods.go")
if err != nil {
log.Fatalf("failed to create file: %v", err)
}
defer file.Close()

// Create a template and execute it with the policy list
t := template.Must(template.New("policy").Parse(tmpl))
if err := t.Execute(file, policies); err != nil {
log.Fatalf("failed to execute template: %v", err)
}

log.Printf("Writing PolicyMethods to %s... Done\n", "policy_methods.go")
}
Loading