diff --git a/cmd/csi-snapshotter/create_crd.go b/cmd/csi-snapshotter/create_crd.go index 656e1bd2..29c3a79d 100644 --- a/cmd/csi-snapshotter/create_crd.go +++ b/cmd/csi-snapshotter/create_crd.go @@ -38,13 +38,24 @@ func CreateCRD(clientset apiextensionsclient.Interface) error { Plural: crdv1.VolumeSnapshotClassResourcePlural, Kind: reflect.TypeOf(crdv1.VolumeSnapshotClass{}).Name(), }, + Subresources: &apiextensionsv1beta1.CustomResourceSubresources{ + Status: &apiextensionsv1beta1.CustomResourceSubresourceStatus{}, + }, }, } - res, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Create(crd) - if err != nil && !apierrors.IsAlreadyExists(err) { - klog.Fatalf("failed to create VolumeSnapshotResource: %#v, err: %#v", - res, err) + _, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Get(crd.Name, metav1.GetOptions{}) + if err == nil { + if res, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Update(crd); err != nil { + klog.Fatalf("failed to update VolumeSnapshotResource: %#v, err: %#v", + res, err) + } + } else { + res, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Create(crd) + if err != nil && !apierrors.IsAlreadyExists(err) { + klog.Fatalf("failed to create VolumeSnapshotResource: %#v, err: %#v", + res, err) + } } crd = &apiextensionsv1beta1.CustomResourceDefinition{ @@ -61,7 +72,7 @@ func CreateCRD(clientset apiextensionsclient.Interface) error { }, }, } - res, err = clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Create(crd) + res, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Create(crd) if err != nil && !apierrors.IsAlreadyExists(err) { klog.Fatalf("failed to create VolumeSnapshotContentResource: %#v, err: %#v", diff --git a/deploy/kubernetes/rbac.yaml b/deploy/kubernetes/rbac.yaml index 3cda5487..6a7c56a0 100644 --- a/deploy/kubernetes/rbac.yaml +++ b/deploy/kubernetes/rbac.yaml @@ -44,9 +44,12 @@ rules: - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshots"] verbs: ["get", "list", "watch", "update"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots/status"] + verbs: ["update"] - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] - verbs: ["create", "list", "watch", "delete"] + verbs: ["create", "list", "watch", "delete", "get", "update"] --- kind: ClusterRoleBinding diff --git a/pkg/controller/snapshot_controller.go b/pkg/controller/snapshot_controller.go index 3d30844a..561a3798 100644 --- a/pkg/controller/snapshot_controller.go +++ b/pkg/controller/snapshot_controller.go @@ -415,9 +415,9 @@ func (ctrl *csiSnapshotController) updateSnapshotErrorStatusWithEvent(snapshot * Message: message, } snapshotClone.Status.Error = statusError - snapshotClone.Status.ReadyToUse = false - newSnapshot, err := ctrl.clientset.VolumesnapshotV1alpha1().VolumeSnapshots(snapshotClone.Namespace).Update(snapshotClone) + newSnapshot, err := ctrl.clientset.VolumesnapshotV1alpha1().VolumeSnapshots(snapshotClone.Namespace).UpdateStatus(snapshotClone) + if err != nil { klog.V(4).Infof("updating VolumeSnapshot[%s] error status failed %v", snapshotKey(snapshot), err) return err @@ -831,7 +831,7 @@ func (ctrl *csiSnapshotController) updateSnapshotStatus(snapshot *crdv1.VolumeSn status.RestoreSize = resource.NewQuantity(size, resource.BinarySI) } snapshotClone.Status = status - newSnapshotObj, err := ctrl.clientset.VolumesnapshotV1alpha1().VolumeSnapshots(snapshotClone.Namespace).Update(snapshotClone) + newSnapshotObj, err := ctrl.clientset.VolumesnapshotV1alpha1().VolumeSnapshots(snapshotClone.Namespace).UpdateStatus(snapshotClone) if err != nil { return nil, newControllerUpdateError(snapshotKey(snapshot), err.Error()) }