@@ -2,13 +2,13 @@ package manifests
2
2
3
3
import (
4
4
"fmt"
5
- "io/ioutil"
5
+ apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
6
+ "k8s.io/apimachinery/pkg/runtime"
6
7
"os"
7
8
"path/filepath"
8
9
"strings"
9
10
10
11
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
11
- apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
12
12
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
13
13
utilerrors "k8s.io/apimachinery/pkg/util/errors"
14
14
"k8s.io/apimachinery/pkg/util/yaml"
@@ -180,11 +180,22 @@ func (b *bundleLoader) LoadBundleWalkFunc(path string, f os.FileInfo, err error)
180
180
// loadBundle takes the directory that a CSV is in and assumes the rest of the objects in that directory
181
181
// are part of the bundle.
182
182
func loadBundle (csvName string , dir string ) (* Bundle , error ) {
183
- files , err := ioutil .ReadDir (dir )
183
+ files , err := os .ReadDir (dir )
184
184
if err != nil {
185
185
return nil , err
186
186
}
187
187
188
+ scheme := runtime .NewScheme ()
189
+ if err := apiextensionsv1beta1 .AddToScheme (scheme ); err != nil {
190
+ return nil , fmt .Errorf ("error loading api extensions v1beta1 scheme: %s" , err )
191
+ }
192
+ if err := apiextensionsv1 .AddToScheme (scheme ); err != nil {
193
+ return nil , fmt .Errorf ("error loading api extensions v1 scheme: %s" , err )
194
+ }
195
+ if err := operatorsv1alpha1 .AddToScheme (scheme ); err != nil {
196
+ return nil , fmt .Errorf ("error loading operators v1alpha1 scheme: %s" , err )
197
+ }
198
+
188
199
var errs []error
189
200
bundle := & Bundle {
190
201
Name : csvName ,
@@ -218,39 +229,30 @@ func loadBundle(csvName string, dir string) (*Bundle, error) {
218
229
219
230
bundle .Objects = append (bundle .Objects , obj )
220
231
221
- // Reset the reader so we can decode it into a typed object.
222
- if err = resetFile (fileReader ); err != nil {
223
- errs = append (errs , err )
224
- continue
225
- }
226
-
227
232
switch kind := obj .GetKind (); kind {
228
233
case "ClusterServiceVersion" :
229
234
if bundle .CSV != nil {
230
235
return nil , fmt .Errorf ("invalid bundle: contains multiple CSVs" )
231
236
}
232
- csv := operatorsv1alpha1.ClusterServiceVersion {}
233
- err := decoder .Decode (& csv )
234
- if err != nil {
235
- return nil , fmt .Errorf ("unable to parse CSV %s: %s" , f .Name (), err .Error ())
237
+ csv := & operatorsv1alpha1.ClusterServiceVersion {}
238
+ if err := scheme .Convert (obj , csv , nil ); err != nil {
239
+ return nil , fmt .Errorf ("unable to convert custom resource definition to CRD %s: %v" , f .Name (), err )
236
240
}
237
- bundle .CSV = & csv
241
+ bundle .CSV = csv
238
242
case "CustomResourceDefinition" :
239
243
version := obj .GetAPIVersion ()
240
244
if version == apiextensionsv1beta1 .SchemeGroupVersion .String () {
241
- crd := apiextensionsv1beta1.CustomResourceDefinition {}
242
- err := decoder .Decode (& crd )
243
- if err != nil {
244
- return nil , fmt .Errorf ("unable to parse CRD %s: %s" , f .Name (), err .Error ())
245
+ crd := & apiextensionsv1beta1.CustomResourceDefinition {}
246
+ if err := scheme .Convert (obj , crd , nil ); err != nil {
247
+ return nil , fmt .Errorf ("unable to convert custom resource definition to CRD %s: %v" , f .Name (), err )
245
248
}
246
- bundle .V1beta1CRDs = append (bundle .V1beta1CRDs , & crd )
249
+ bundle .V1beta1CRDs = append (bundle .V1beta1CRDs , crd )
247
250
} else if version == apiextensionsv1 .SchemeGroupVersion .String () {
248
- crd := apiextensionsv1.CustomResourceDefinition {}
249
- err := decoder .Decode (& crd )
250
- if err != nil {
251
- return nil , fmt .Errorf ("unable to parse CRD %s: %s" , f .Name (), err .Error ())
251
+ crd := & apiextensionsv1.CustomResourceDefinition {}
252
+ if err := scheme .Convert (obj , crd , nil ); err != nil {
253
+ return nil , fmt .Errorf ("unable to convert custom resource definition to CRD %s: %v" , f .Name (), err )
252
254
}
253
- bundle .V1CRDs = append (bundle .V1CRDs , & crd )
255
+ bundle .V1CRDs = append (bundle .V1CRDs , crd )
254
256
} else {
255
257
return nil , fmt .Errorf ("unsupported CRD version %s for %s" , version , f .Name ())
256
258
}
0 commit comments