100 lines
3.2 KiB
Go
100 lines
3.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
crdv1alpha1 "github.com/kubernetes-csi/external-snapshotter/client/v7/apis/volumegroupsnapshot/v1alpha1"
|
|
|
|
crdv1 "github.com/kubernetes-csi/external-snapshotter/client/v7/apis/volumesnapshot/v1"
|
|
clientset "github.com/kubernetes-csi/external-snapshotter/client/v7/clientset/versioned"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/types"
|
|
)
|
|
|
|
// PatchOp represents a json patch operation
|
|
type PatchOp struct {
|
|
Op string `json:"op"`
|
|
Path string `json:"path"`
|
|
Value interface{} `json:"value,omitempty"`
|
|
}
|
|
|
|
// PatchVolumeSnapshotContent patches a volume snapshot content object
|
|
func PatchVolumeSnapshotContent(
|
|
existingSnapshotContent *crdv1.VolumeSnapshotContent,
|
|
patch []PatchOp,
|
|
client clientset.Interface,
|
|
subresources ...string,
|
|
) (*crdv1.VolumeSnapshotContent, error) {
|
|
data, err := json.Marshal(patch)
|
|
if nil != err {
|
|
return existingSnapshotContent, err
|
|
}
|
|
|
|
newSnapshotContent, err := client.SnapshotV1().VolumeSnapshotContents().Patch(context.TODO(), existingSnapshotContent.Name, types.JSONPatchType, data, metav1.PatchOptions{}, subresources...)
|
|
if err != nil {
|
|
return existingSnapshotContent, err
|
|
}
|
|
|
|
return newSnapshotContent, nil
|
|
}
|
|
|
|
// PatchVolumeSnapshot patches a volume snapshot object
|
|
func PatchVolumeSnapshot(
|
|
existingSnapshot *crdv1.VolumeSnapshot,
|
|
patch []PatchOp,
|
|
client clientset.Interface,
|
|
subresources ...string,
|
|
) (*crdv1.VolumeSnapshot, error) {
|
|
data, err := json.Marshal(patch)
|
|
if nil != err {
|
|
return existingSnapshot, err
|
|
}
|
|
|
|
newSnapshot, err := client.SnapshotV1().VolumeSnapshots(existingSnapshot.Namespace).Patch(context.TODO(), existingSnapshot.Name, types.JSONPatchType, data, metav1.PatchOptions{}, subresources...)
|
|
if err != nil {
|
|
return existingSnapshot, err
|
|
}
|
|
|
|
return newSnapshot, nil
|
|
}
|
|
|
|
// PatchVolumeGroupSnapshot patches a volume group snapshot object
|
|
func PatchVolumeGroupSnapshot(
|
|
existingGroupSnapshot *crdv1alpha1.VolumeGroupSnapshot,
|
|
patch []PatchOp,
|
|
client clientset.Interface,
|
|
subresources ...string,
|
|
) (*crdv1alpha1.VolumeGroupSnapshot, error) {
|
|
data, err := json.Marshal(patch)
|
|
if nil != err {
|
|
return existingGroupSnapshot, err
|
|
}
|
|
|
|
newGroupSnapshot, err := client.GroupsnapshotV1alpha1().VolumeGroupSnapshots(existingGroupSnapshot.Namespace).Patch(context.TODO(), existingGroupSnapshot.Name, types.JSONPatchType, data, metav1.PatchOptions{}, subresources...)
|
|
if err != nil {
|
|
return existingGroupSnapshot, err
|
|
}
|
|
|
|
return newGroupSnapshot, nil
|
|
}
|
|
|
|
// PatchVolumeGroupSnapshotContent patches a volume group snapshot content object
|
|
func PatchVolumeGroupSnapshotContent(
|
|
existingGroupSnapshotContent *crdv1alpha1.VolumeGroupSnapshotContent,
|
|
patch []PatchOp,
|
|
client clientset.Interface,
|
|
subresources ...string,
|
|
) (*crdv1alpha1.VolumeGroupSnapshotContent, error) {
|
|
data, err := json.Marshal(patch)
|
|
if nil != err {
|
|
return existingGroupSnapshotContent, err
|
|
}
|
|
|
|
newGroupSnapshotContent, err := client.GroupsnapshotV1alpha1().VolumeGroupSnapshotContents().Patch(context.TODO(), existingGroupSnapshotContent.Name, types.JSONPatchType, data, metav1.PatchOptions{}, subresources...)
|
|
if err != nil {
|
|
return existingGroupSnapshotContent, err
|
|
}
|
|
|
|
return newGroupSnapshotContent, nil
|
|
}
|