@@ -27,6 +27,8 @@ import (
27
27
28
28
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
29
29
"k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
30
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
31
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
30
32
"k8s.io/apimachinery/pkg/runtime/schema"
31
33
"k8s.io/apimachinery/pkg/util/sets"
32
34
"k8s.io/apimachinery/pkg/util/wait"
@@ -190,8 +192,18 @@ func CreateCRDs(config *rest.Config, crds []*apiextensionsv1beta1.CustomResource
190
192
// Create each CRD
191
193
for _ , crd := range crds {
192
194
log .V (1 ).Info ("installing CRD" , "crd" , crd .Name )
193
- if _ , err := cs .ApiextensionsV1beta1 ().CustomResourceDefinitions ().Create (crd ); err != nil {
194
- return err
195
+ var err error
196
+ if _ , err = cs .ApiextensionsV1beta1 ().CustomResourceDefinitions ().Get (crd .Name , metav1.GetOptions {}); err != nil {
197
+ if apierrors .IsNotFound (err ) {
198
+ _ , err = cs .ApiextensionsV1beta1 ().CustomResourceDefinitions ().Create (crd )
199
+ }
200
+ if apierrors .IsAlreadyExists (err ) {
201
+ log .V (1 ).Info ("CRD already exists, updating" , "crd" , crd .Name )
202
+ _ , err = cs .ApiextensionsV1beta1 ().CustomResourceDefinitions ().Update (crd )
203
+ }
204
+ if err != nil {
205
+ return err
206
+ }
195
207
}
196
208
}
197
209
return nil
0 commit comments