Skip to content

Commit 728af3b

Browse files
committed
Align CRD version validation with apiextensions
1 parent 165af70 commit 728af3b

File tree

2 files changed

+6
-16
lines changed

2 files changed

+6
-16
lines changed

pkg/model/resource/gvk.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,17 @@ package resource
1818

1919
import (
2020
"fmt"
21-
"regexp"
2221
"strings"
2322

2423
"sigs.k8s.io/kubebuilder/v3/pkg/internal/validation"
2524
)
2625

2726
const (
28-
versionPattern = "^v\\d+(?:alpha\\d+|beta\\d+)?$"
29-
3027
groupRequired = "group cannot be empty if the domain is empty"
3128
versionRequired = "version cannot be empty"
3229
kindRequired = "kind cannot be empty"
3330
)
3431

35-
var (
36-
versionRegex = regexp.MustCompile(versionPattern)
37-
)
38-
3932
// GVK stores the Group - Version - Kind triplet that uniquely identifies a resource.
4033
// In kubebuilder, the k8s fully qualified group is stored as Group and Domain to improve UX.
4134
type GVK struct {
@@ -60,8 +53,9 @@ func (gvk GVK) Validate() error {
6053
if gvk.Version == "" {
6154
return fmt.Errorf(versionRequired)
6255
}
63-
if !versionRegex.MatchString(gvk.Version) {
64-
return fmt.Errorf("Version must match %s (was %s)", versionPattern, gvk.Version)
56+
if err := validation.IsDNS1035Label(gvk.Version); err != nil {
57+
// NOTE: IsDNS1035Label returns a slice of strings instead of an error, so no wrapping
58+
return fmt.Errorf("invalid Version: %#v", err)
6559
}
6660

6761
// Check if kind has a valid DNS1035 label value

pkg/model/resource/gvk_test.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,9 @@ var _ = Describe("GVK", func() {
4747
Entry("Domain (non-alpha characters)", GVK{Group: group, Domain: "_*?", Version: version, Kind: kind}),
4848
Entry("Group and Domain (empty)", GVK{Group: "", Domain: "", Version: version, Kind: kind}),
4949
Entry("Version (empty)", GVK{Group: group, Domain: domain, Version: "", Kind: kind}),
50-
Entry("Version (no v prefix)", GVK{Group: group, Domain: domain, Version: "1", Kind: kind}),
51-
Entry("Version (wrong prefix)", GVK{Group: group, Domain: domain, Version: "a1", Kind: kind}),
52-
Entry("Version (unstable no v prefix)", GVK{Group: group, Domain: domain, Version: "1beta1", Kind: kind}),
53-
Entry("Version (unstable no alpha/beta number)",
54-
GVK{Group: group, Domain: domain, Version: "v1beta", Kind: kind}),
55-
Entry("Version (multiple unstable)",
56-
GVK{Group: group, Domain: domain, Version: "v1beta1alpha1", Kind: kind}),
50+
Entry("Version (starts with number)", GVK{Group: group, Domain: domain, Version: "1", Kind: kind}),
51+
Entry("Version (uppercase)", GVK{Group: group, Domain: domain, Version: "V1", Kind: kind}),
52+
Entry("Version (non-alpha characters)", GVK{Group: group, Domain: domain, Version: "_*?", Kind: kind}),
5753
Entry("Kind (empty)", GVK{Group: group, Domain: domain, Version: version, Kind: ""}),
5854
Entry("Kind (whitespaces)", GVK{Group: group, Domain: domain, Version: version, Kind: "Ki nd"}),
5955
Entry("Kind (lowercase)", GVK{Group: group, Domain: domain, Version: version, Kind: "kind"}),

0 commit comments

Comments
 (0)