11package util
22
33import (
4+ "context"
45 "fmt"
6+ csiaddonsv1alpha1 "github.com/csi-addons/kubernetes-csi-addons/api/csiaddons/v1alpha1"
7+ ocsv1a1 "github.com/red-hat-storage/ocs-operator/api/v4/v1alpha1"
8+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+ "sigs.k8s.io/controller-runtime/pkg/client"
510)
611
712type NetworkFenceClassType string
@@ -17,3 +22,92 @@ func GenerateNameForNetworkFenceClass(storageClusterName string, networkFenceCla
1722 }
1823 return fmt .Sprintf ("%s-%s-networkfenceclass" , storageClusterName , networkFenceClassType )
1924}
25+
26+ func NewDefaultRbdNetworkFenceClass (
27+ provisionerSecret ,
28+ namespace ,
29+ storageId string ,
30+ ) * csiaddonsv1alpha1.NetworkFenceClass {
31+
32+ nfc := & csiaddonsv1alpha1.NetworkFenceClass {
33+ ObjectMeta : metav1.ObjectMeta {
34+ Annotations : map [string ]string {},
35+ Labels : map [string ]string {},
36+ },
37+ Spec : csiaddonsv1alpha1.NetworkFenceClassSpec {
38+ Provisioner : RbdDriverName ,
39+ Parameters : map [string ]string {
40+ "csiaddons.openshift.io/networkfence-secret-name" : provisionerSecret ,
41+ "csiaddons.openshift.io/networkfence-secret-namespace" : namespace ,
42+ },
43+ },
44+ }
45+ if storageId != "" {
46+ AddAnnotation (nfc , storageIdLabelKey , storageId )
47+ }
48+ return nfc
49+ }
50+
51+ func NewDefaultCephFsNetworkFenceClass (
52+ provisionerSecret ,
53+ namespace ,
54+ storageId string ,
55+ ) * csiaddonsv1alpha1.NetworkFenceClass {
56+
57+ nfc := & csiaddonsv1alpha1.NetworkFenceClass {
58+ ObjectMeta : metav1.ObjectMeta {
59+ Annotations : map [string ]string {},
60+ Labels : map [string ]string {},
61+ },
62+ Spec : csiaddonsv1alpha1.NetworkFenceClassSpec {
63+ Provisioner : CephFSDriverName ,
64+ Parameters : map [string ]string {
65+ "csiaddons.openshift.io/networkfence-secret-name" : provisionerSecret ,
66+ "csiaddons.openshift.io/networkfence-secret-namespace" : namespace ,
67+ },
68+ },
69+ }
70+ if storageId != "" {
71+ AddAnnotation (nfc , storageIdLabelKey , storageId )
72+ }
73+ return nfc
74+ }
75+
76+ func NetworkFenceClassFromExisting (
77+ ctx context.Context ,
78+ kubeClient client.Client ,
79+ networkFenceClassName string ,
80+ consumer * ocsv1a1.StorageConsumer ,
81+ consumerConfig StorageConsumerResources ,
82+ rbdStorageId ,
83+ cephFsStorageId string ,
84+ ) (* csiaddonsv1alpha1.NetworkFenceClass , error ) {
85+ nfc := & csiaddonsv1alpha1.NetworkFenceClass {}
86+ nfc .Name = networkFenceClassName
87+ if err := kubeClient .Get (ctx , client .ObjectKeyFromObject (nfc ), nfc ); err != nil {
88+ return nil , err
89+ }
90+ provisionerSecretName := ""
91+ storageId := ""
92+ operatorNamespace := consumer .Status .Client .OperatorNamespace
93+ switch nfc .Spec .Provisioner {
94+ case RbdDriverName :
95+ provisionerSecretName = consumerConfig .GetCsiRbdProvisionerCephUserName ()
96+ storageId = rbdStorageId
97+ case CephFSDriverName :
98+ provisionerSecretName = consumerConfig .GetCsiCephFsProvisionerCephUserName ()
99+ storageId = cephFsStorageId
100+ default :
101+ return nil , UnsupportedProvisioner
102+ }
103+
104+ params := nfc .Spec .Parameters
105+ if params == nil {
106+ params = map [string ]string {}
107+ nfc .Spec .Parameters = params
108+ }
109+ params ["csiaddons.openshift.io/networkfence-secret-name" ] = provisionerSecretName
110+ params ["csiaddons.openshift.io/networkfence-secret-namespace" ] = operatorNamespace
111+ AddAnnotation (nfc , storageIdLabelKey , storageId )
112+ return nfc , nil
113+ }
0 commit comments