Skip to content

Commit

Permalink
Merge pull request #761 from red-hat-storage/sync_us--master
Browse files Browse the repository at this point in the history
Syncing latest changes from upstream master for rook
  • Loading branch information
subhamkrai authored Oct 23, 2024
2 parents bc53568 + f8a8206 commit f9d05a6
Show file tree
Hide file tree
Showing 11 changed files with 172 additions and 266 deletions.
14 changes: 12 additions & 2 deletions .github/workflows/codegen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,18 @@ jobs:
with:
go-version: "1.22"

- name: post-process checkout - copy to github.com
run: |
# copy to the github.com path so codegen will work as expected
mkdir -p $(go env GOPATH)/src/github.com/rook/rook/
cp -R . $(go env GOPATH)/src/github.com/rook/rook/
- name: run codegen
run: GOPATH=$(go env GOPATH) make codegen
run: |
cd $(go env GOPATH)/src/github.com/rook/rook
GOPATH=$(go env GOPATH) make codegen
- name: validate codegen
run: tests/scripts/validate_modified_files.sh codegen
run: |
cd $(go env GOPATH)/src/github.com/rook/rook
tests/scripts/validate_modified_files.sh codegen
Original file line number Diff line number Diff line change
Expand Up @@ -23,97 +23,12 @@ In short, as the documentation describes it:
Created by cluster administrators to describe how volume group snapshots
should be created. including the driver information, the deletion policy, etc.

## RBD Volume Group Snapshots

### RBD VolumeGroupSnapshotClass

In [VolumeGroupSnapshotClass](https://github.com/rook/rook/tree/master/deploy/examples/csi/rbd/groupsnapshotclass.yaml),
the `csi.storage.k8s.io/group-snapshotter-secret-name` parameter references the
name of the secret created for the rbd-plugin and `pool` to reflect the Ceph pool name.

In the `VolumeGroupSnapshotClass`, update the value of the `clusterID` field to match the namespace
that Rook is running in. When Ceph CSI is deployed by Rook, the operator will automatically
maintain a configmap whose contents will match this key. By default this is
"rook-ceph".

```console
kubectl create -f deploy/examples/csi/rbd/groupsnapshotclass.yaml
```

### RBD VolumeGroupSnapshot

In [VolumeGroupSnapshot](https://github.com/rook/rook/tree/master/deploy/examples/csi/rbd/groupsnapshot.yaml),
`volumeGroupSnapshotClassName` is the name of the `VolumeGroupSnapshotClass`
previously created. The labels inside `matchLabels` must be present on the
PVCs that are already created by the RBD CSI driver.

```console
kubectl create -f deploy/examples/csi/rbd/groupsnapshot.yaml
```

### Verify RBD GroupSnapshot Creation

```console
$ kubectl get volumegroupsnapshotclass
NAME DRIVER DELETIONPOLICY AGE
csi-rbdplugin-groupsnapclass rook-ceph.rbd.csi.ceph.com Delete 21m
```

```console
$ kubectl get volumegroupsnapshot
NAME READYTOUSE VOLUMEGROUPSNAPSHOTCLASS VOLUMEGROUPSNAPSHOTCONTENT CREATIONTIME AGE
rbd-groupsnapshot true csi-rbdplugin-groupsnapclass groupsnapcontent-d13f4d95-8822-4729-9586-4f222a3f788e 5m37s 5m39s
```

The snapshot will be ready to restore to a new PVC when `READYTOUSE` field of the
`volumegroupsnapshot` is set to true.

### Restore the RBD volume group snapshot to a new PVC

Find the name of the snapshots created by the `VolumeGroupSnapshot` first by running:

```console
$ kubectl get volumegroupsnapshot/rbd-groupsnapshot -o=jsonpath='{range .status.pvcVolumeSnapshotRefList[*]}PVC: {.persistentVolumeClaimRef.name}, Snapshot: {.volumeSnapshotRef.name}{"\n"}{end}'
PVC: rbd-pvc, Snapshot: snapshot-9d21b143904c10f49ddc92664a7e8fe93c23387d0a88549c14337484ebaf1011-2024-09-12-3.49.13
```

It will list the PVC's name followed by its snapshot name.

In
[pvc-restore](https://github.com/rook/rook/tree/master/deploy/examples/csi/rbd/pvc-restore.yaml),
`dataSource` is one of the `Snapshot` that we just
found. The `dataSource` kind must be the `VolumeSnapshot`.

Create a new PVC from the snapshot

```console
kubectl create -f deploy/examples/csi/rbd/pvc-restore.yaml
```

### Verify RBD Restore PVC Creation

```console
$ kubectl get pvc
rbd-pvc Bound pvc-9ae60bf9-4931-4f9a-9de1-7f45f31fe4da 1Gi RWO rook-cephfs <unset> 171m
rbd-pvc-restore Bound pvc-b4b73cbb-5061-48c7-9ac8-e1202508cf97 1Gi RWO rook-cephfs <unset> 46s
```

### RBD volume group snapshot resource Cleanup

To clean the resources created by this example, run the following:

```console
kubectl delete -f deploy/examples/csi/rbd/pvc-restore.yaml
kubectl delete -f deploy/examples/csi/rbd/groupsnapshot.yaml
kubectl delete -f deploy/examples/csi/rbd/groupsnapshotclass.yaml
```

## CephFS Volume Group Snapshots
## Volume Group Snapshots

### CephFS VolumeGroupSnapshotClass

In [VolumeGroupSnapshotClass](https://github.com/rook/rook/tree/master/deploy/examples/csi/cephfs/groupsnapshotclass.yaml),
the `csi.storage.k8s.io/group-snapshotter-secret-name` parameter references the
the `csi.storage.k8s.io/group-snapshotter-secret-name` parameter should reference the
name of the secret created for the cephfs-plugin.

In the `VolumeGroupSnapshotClass`, update the value of the `clusterID` field to match the namespace
Expand All @@ -128,8 +43,8 @@ kubectl create -f deploy/examples/csi/cephfs/groupsnapshotclass.yaml
### CephFS VolumeGroupSnapshot

In [VolumeGroupSnapshot](https://github.com/rook/rook/tree/master/deploy/examples/csi/cephfs/groupsnapshot.yaml),
`volumeGroupSnapshotClassName` is the name of the `VolumeGroupSnapshotClass`
previously created. The labels inside `matchLabels` must be present on the
`volumeGroupSnapshotClassName` should be the name of the `VolumeGroupSnapshotClass`
previously created. The labels inside `matchLabels` should be present on the
PVCs that are already created by the CephFS CSI driver.

```console
Expand Down Expand Up @@ -166,8 +81,8 @@ It will list the PVC's name followed by its snapshot name.

In
[pvc-restore](https://github.com/rook/rook/tree/master/deploy/examples/csi/cephfs/pvc-restore.yaml),
`dataSource` is one of the `Snapshot` that we just
found. The `dataSource` kind must be the `VolumeSnapshot`.
`dataSource` should be one of the `Snapshot` that we just
found. The `dataSource` kind should be the `VolumeSnapshot`.

Create a new PVC from the snapshot

Expand All @@ -183,7 +98,7 @@ cephfs-pvc Bound pvc-9ae60bf9-4931-4f9a-9de1-7f45f31fe4da 1Gi
cephfs-pvc-restore Bound pvc-b4b73cbb-5061-48c7-9ac8-e1202508cf97 1Gi RWO rook-cephfs <unset> 46s
```

### CephFS volume group snapshot resource Cleanup
## CephFS volume group snapshot resource Cleanup

To clean the resources created by this example, run the following:

Expand Down
2 changes: 0 additions & 2 deletions deploy/examples/csi/cephfs/pvc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cephfs-pvc
# Use this with the example `groupsnapshotclass.yaml`.
# Not needed if the volume group snapshots are not required.
labels:
group: snapshot-test
spec:
Expand Down
13 changes: 0 additions & 13 deletions deploy/examples/csi/rbd/groupsnapshot.yaml

This file was deleted.

15 changes: 0 additions & 15 deletions deploy/examples/csi/rbd/groupsnapshotclass.yaml

This file was deleted.

4 changes: 0 additions & 4 deletions deploy/examples/csi/rbd/pvc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@ apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
# Use this with the example `groupsnapshotclass.yaml`.
# Not needed if the volume group snapshots are not required.
labels:
group: snapshot-test
spec:
accessModes:
- ReadWriteOnce
Expand Down
15 changes: 7 additions & 8 deletions pkg/operator/ceph/object/json_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,9 @@ func getObjProperty[T string | map[string]interface{} | []interface{}](obj map[s
return res, fmt.Errorf("json property %q not found", strings.Join(path, "."))
}

// setObjProperty - helper function to manipulate JSON Objects.
// sets value to json object nested field and returns previous value if presented.
// Example:
//
// obj = {"a":{"b":"foo"}}
// // will replace "foo" with "bar" and return "foo"
// setObjProperty(obj,"bar","a","b")
func setObjProperty[T string | []string | map[string]interface{} | []interface{}](obj map[string]interface{}, val T, path ...string) (T, error) {
// updateObjProperty - helper function to manipulate JSON Objects.
// sets new value to json object nested field only if it is already exists in json and returns previous value.
func updateObjProperty[T string | []string | map[string]interface{} | []interface{}](obj map[string]interface{}, val T, path ...string) (T, error) {
var prev T
if len(path) == 0 {
return prev, fmt.Errorf("json property path is empty")
Expand All @@ -60,6 +55,10 @@ func setObjProperty[T string | []string | map[string]interface{} | []interface{}
if last {
// last path segment: set result and return prev value
prevVal, ok := obj[p]
if !ok {
// not exists:
return prev, fmt.Errorf("json property %q not exists", strings.Join(path, "."))
}
if ok {
prevRes, ok := prevVal.(T)
if ok {
Expand Down
Loading

0 comments on commit f9d05a6

Please sign in to comment.