1
1
package restore
2
2
3
3
import (
4
+ "fmt"
5
+ "strings"
6
+
4
7
"github.com/red-hat-storage/odf-cli/cmd/odf/root"
5
8
"github.com/rook/kubectl-rook-ceph/pkg/k8sutil"
9
+ "github.com/rook/kubectl-rook-ceph/pkg/logging"
6
10
pkgrestore "github.com/rook/kubectl-rook-ceph/pkg/restore"
7
11
"github.com/spf13/cobra"
8
12
)
9
13
14
+ // groupVersions defines the supported CRD groups and their corresponding API versions.
15
+ var groupVersions = map [string ]string {
16
+ "ocs.openshift.io" : "v1" ,
17
+ "ceph.rook.io" : "v1" ,
18
+ "csi.ceph.io" : "v1beta1" ,
19
+ "odf.openshift.io" : "v1alpha1" ,
20
+ "noobaa.io" : "v1alpha1" ,
21
+ "csiaddons.openshift.io" : "v1alpha1" ,
22
+ }
23
+
24
+ // keys returns the keys of a string map. It is used to print out supported group names.
25
+ func keys (m map [string ]string ) []string {
26
+ out := make ([]string , 0 , len (m ))
27
+ for k := range m {
28
+ out = append (out , k )
29
+ }
30
+ return out
31
+ }
32
+
33
+ // parseFullyQualifiedCRD takes a fully qualified CRD type of the form "resource.group"
34
+ // (for example, "cephclusters.ceph.rook.io") and returns the resource name, group name, and
35
+ // the API version associated with that group. It returns an error if the format is invalid
36
+ // or the group is not recognized.
37
+ func parseFullyQualifiedCRD (fqcrd string ) (resourceName , groupName , version string , err error ) {
38
+ parts := strings .SplitN (fqcrd , "." , 2 )
39
+ if len (parts ) != 2 {
40
+ return "" , "" , "" , fmt .Errorf ("invalid CRD format %q; expected format <resource>.<group>" , fqcrd )
41
+ }
42
+ resourceName = parts [0 ]
43
+ groupName = parts [1 ]
44
+
45
+ ver , ok := groupVersions [groupName ]
46
+ if ! ok {
47
+ return "" , "" , "" , fmt .Errorf ("unsupported group %q; supported groups are: %v" , groupName , keys (groupVersions ))
48
+ }
49
+ return resourceName , groupName , ver , nil
50
+ }
51
+
10
52
// deletedCmd represents the deleted command
11
53
var deletedCmd = & cobra.Command {
12
54
Use : "deleted" ,
@@ -20,8 +62,18 @@ var deletedCmd = &cobra.Command{
20
62
},
21
63
Run : func (cmd * cobra.Command , args []string ) {
22
64
k8sutil .SetDeploymentScale (cmd .Context (), root .ClientSets .Kube , root .OperatorNamespace , "ocs-operator" , 0 )
23
- pkgrestore .RestoreCrd (cmd .Context (), root .ClientSets , root .OperatorNamespace , root .StorageClusterNamespace , args )
65
+ // Parse the fully qualified CRD (e.g. "cephclusters.ceph.rook.io").
66
+ resourceName , groupName , version , err := parseFullyQualifiedCRD (args [0 ])
67
+ if err != nil {
68
+ logging .Fatal (fmt .Errorf ("Error parsing CRD type: %v\n " , err ))
69
+ }
70
+ // Construct a new args slice with the resource name as the first argument.
71
+ newArgs := make ([]string , len (args ))
72
+ newArgs [0 ] = resourceName
73
+ if len (args ) > 1 {
74
+ newArgs [1 ] = args [1 ]
75
+ }
76
+ pkgrestore .RestoreCrd (cmd .Context (), root .ClientSets , root .OperatorNamespace , root .StorageClusterNamespace , groupName , version , newArgs )
24
77
k8sutil .SetDeploymentScale (cmd .Context (), root .ClientSets .Kube , root .OperatorNamespace , "ocs-operator" , 1 )
25
-
26
78
},
27
79
}
0 commit comments