Skip to content

Commit 69be834

Browse files
committed
override min/max markers when generating crds to avoid kubebuilder bug
1 parent 7db25e0 commit 69be834

14 files changed

+115
-0
lines changed

config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/experimental/gateway.networking.k8s.io_gateways.yaml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/experimental/gateway.networking.x-k8s.io_xbackendtrafficpolicies.yaml

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/experimental/gateway.networking.x-k8s.io_xlistenersets.yaml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/standard/gateway.networking.k8s.io_gateways.yaml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/standard/gateway.networking.k8s.io_httproutes.yaml

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/generator/main.go

+2
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ func main() {
6969
log.Fatalf("failed to register markers: %s", err)
7070
}
7171

72+
registerMarkerOverrides(parser.Collector.Registry)
73+
7274
crd.AddKnownTypes(parser)
7375
for _, r := range roots {
7476
parser.NeedPackage(r)

pkg/generator/markers.go

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package main
2+
3+
import (
4+
apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
5+
"sigs.k8s.io/controller-tools/pkg/markers"
6+
)
7+
8+
type Minimum float64
9+
10+
func (m Minimum) Value() float64 {
11+
return float64(m)
12+
}
13+
func (m Minimum) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
14+
val := m.Value()
15+
schema.Minimum = &val
16+
return nil
17+
}
18+
19+
type Maximum float64
20+
21+
func (m Maximum) Value() float64 {
22+
return float64(m)
23+
}
24+
func (m Maximum) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
25+
val := m.Value()
26+
schema.Maximum = &val
27+
return nil
28+
}
29+
30+
// kubebuilder Min Max markers are broken with type aliases
31+
func registerMarkerOverrides(into *markers.Registry) {
32+
min, _ := markers.MakeDefinition(
33+
"kubebuilder:validation:Minimum",
34+
markers.DescribesField,
35+
Minimum(0),
36+
)
37+
38+
max, _ := markers.MakeDefinition(
39+
"kubebuilder:validation:Maximum",
40+
markers.DescribesField,
41+
Maximum(0),
42+
)
43+
into.Register(min)
44+
into.Register(max)
45+
}

0 commit comments

Comments
 (0)