|
1 | 1 | package registry
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "encoding/json" |
5 | 4 | "fmt"
|
6 | 5 | "strings"
|
7 | 6 |
|
8 |
| - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" |
9 | 7 | "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
10 | 8 | "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
11 | 9 | "k8s.io/apimachinery/pkg/runtime"
|
@@ -35,7 +33,7 @@ type Bundle struct {
|
35 | 33 | Package string
|
36 | 34 | Channel string
|
37 | 35 | csv *ClusterServiceVersion
|
38 |
| - crds []*apiextensions.CustomResourceDefinition |
| 36 | + crds []*v1beta1.CustomResourceDefinition |
39 | 37 | cacheStale bool
|
40 | 38 | }
|
41 | 39 |
|
@@ -76,7 +74,7 @@ func (b *Bundle) ClusterServiceVersion() (*ClusterServiceVersion, error) {
|
76 | 74 | return b.csv, nil
|
77 | 75 | }
|
78 | 76 |
|
79 |
| -func (b *Bundle) CustomResourceDefinitions() ([]*apiextensions.CustomResourceDefinition, error) { |
| 77 | +func (b *Bundle) CustomResourceDefinitions() ([]*v1beta1.CustomResourceDefinition, error) { |
80 | 78 | if err := b.cache(); err != nil {
|
81 | 79 | return nil, err
|
82 | 80 | }
|
@@ -104,6 +102,9 @@ func (b *Bundle) ProvidedAPIs() (map[APIKey]struct{}, error) {
|
104 | 102 | }
|
105 | 103 |
|
106 | 104 | ownedAPIs, _, err := csv.GetApiServiceDefinitions()
|
| 105 | + if err != nil { |
| 106 | + return nil, err |
| 107 | + } |
107 | 108 | for _, api := range ownedAPIs {
|
108 | 109 | provided[APIKey{Group: api.Group, Version: api.Version, Kind: api.Kind, Plural: api.Name}] = struct{}{}
|
109 | 110 | }
|
@@ -210,19 +211,21 @@ func (b *Bundle) cache() error {
|
210 | 211 | }
|
211 | 212 |
|
212 | 213 | if b.crds == nil {
|
213 |
| - b.crds = []*apiextensions.CustomResourceDefinition{} |
| 214 | + b.crds = []*v1beta1.CustomResourceDefinition{} |
214 | 215 | }
|
215 | 216 | for _, o := range b.Objects {
|
216 | 217 | if o.GetObjectKind().GroupVersionKind().Kind == "CustomResourceDefinition" {
|
217 |
| - crd := &apiextensions.CustomResourceDefinition{} |
218 |
| - // Marshal Unstructured and Unmarshal as CustomResourceDefinition. FromUnstructured has issues |
| 218 | + // Marshal Unstructured and Decode as CustomResourceDefinition. FromUnstructured has issues |
219 | 219 | // converting JSON numbers to float64 for CRD minimum/maximum validation.
|
220 |
| - bytes, err := o.MarshalJSON() |
| 220 | + cb, err := o.MarshalJSON() |
221 | 221 | if err != nil {
|
222 | 222 | return err
|
223 | 223 | }
|
224 |
| - if err := json.Unmarshal(bytes, &crd); err != nil { |
225 |
| - return err |
| 224 | + crd := &v1beta1.CustomResourceDefinition{} |
| 225 | + dec := serializer.NewCodecFactory(Scheme).UniversalDeserializer() |
| 226 | + _, _, err = dec.Decode(cb, nil, crd) |
| 227 | + if err != nil { |
| 228 | + return fmt.Errorf("error decoding CRD from manifest: %v", err) |
226 | 229 | }
|
227 | 230 | b.crds = append(b.crds, crd)
|
228 | 231 | }
|
|
0 commit comments