Skip to content

Commit c5e1905

Browse files
authored
pkg/scaffold/crd*.go: support crd.Versions (#1056)
1 parent 8f831da commit c5e1905

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

pkg/scaffold/crd.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ func (s *CRD) CustomRender() ([]byte, error) {
139139
delete(dstCRD.Labels, "controller-tools.k8s.io")
140140
}
141141
addCRDSubresource(dstCRD)
142+
addCRDVersions(dstCRD)
142143
return getCRDBytes(dstCRD)
143144
}
144145

@@ -181,6 +182,39 @@ func addCRDSubresource(crd *apiextv1beta1.CustomResourceDefinition) {
181182
}
182183
}
183184

185+
func addCRDVersions(crd *apiextv1beta1.CustomResourceDefinition) {
186+
// crd.Version is deprecated, use crd.Versions instead.
187+
var crdVersions []apiextv1beta1.CustomResourceDefinitionVersion
188+
if crd.Spec.Version != "" {
189+
var verExists, hasStorageVer bool
190+
for _, ver := range crd.Spec.Versions {
191+
if crd.Spec.Version == ver.Name {
192+
verExists = true
193+
}
194+
// There must be exactly one version flagged as a storage version.
195+
if ver.Storage {
196+
hasStorageVer = true
197+
}
198+
}
199+
if !verExists {
200+
crdVersions = []apiextv1beta1.CustomResourceDefinitionVersion{
201+
{Name: crd.Spec.Version, Served: true, Storage: !hasStorageVer},
202+
}
203+
}
204+
} else {
205+
crdVersions = []apiextv1beta1.CustomResourceDefinitionVersion{
206+
{Name: "v1alpha1", Served: true, Storage: true},
207+
}
208+
}
209+
210+
if len(crd.Spec.Versions) > 0 {
211+
// crd.Version should always be the first element in crd.Versions.
212+
crd.Spec.Versions = append(crdVersions, crd.Spec.Versions...)
213+
} else {
214+
crd.Spec.Versions = crdVersions
215+
}
216+
}
217+
184218
func getCRDBytes(crd *apiextv1beta1.CustomResourceDefinition) ([]byte, error) {
185219
// Remove the "status" field from yaml data, which causes a
186220
// resource creation error.

pkg/scaffold/crd_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ spec:
100100
- nodes
101101
type: object
102102
version: v1alpha1
103+
versions:
104+
- name: v1alpha1
105+
served: true
106+
storage: true
103107
`
104108

105109
func TestCRDNonGoProject(t *testing.T) {
@@ -135,4 +139,8 @@ spec:
135139
subresources:
136140
status: {}
137141
version: v1alpha1
142+
versions:
143+
- name: v1alpha1
144+
served: true
145+
storage: true
138146
`

0 commit comments

Comments
 (0)