Skip to content

Commit 890636a

Browse files
committed
server: distribute nfc to clients
Signed-off-by: Rewant Soni <[email protected]>
1 parent 631f671 commit 890636a

File tree

16 files changed

+2078
-2
lines changed

16 files changed

+2078
-2
lines changed

config/rbac/provider_server_cr.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,10 @@ rules:
2525
verbs:
2626
- get
2727
- list
28+
- apiGroups:
29+
- csiaddons.openshift.io
30+
resources:
31+
- networkfenceclasses
32+
verbs:
33+
- get
34+
- list

controllers/util/networkfenceclasses.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package util
22

33
import (
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

712
type 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+
}

deploy/csv-templates/ocs-operator.csv.yaml.in

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ metadata:
7979
"spec": null
8080
}
8181
]
82-
createdAt: "2025-09-10T07:51:15Z"
82+
createdAt: "2025-09-10T08:22:22Z"
8383
description: Red Hat OpenShift Container Storage provides hyperconverged storage
8484
for applications within an OpenShift cluster.
8585
operators.operatorframework.io/builder: operator-sdk-v1.30.0
@@ -564,6 +564,13 @@ spec:
564564
verbs:
565565
- get
566566
- list
567+
- apiGroups:
568+
- csiaddons.openshift.io
569+
resources:
570+
- networkfenceclasses
571+
verbs:
572+
- get
573+
- list
567574
serviceAccountName: ocs-provider-server
568575
- rules:
569576
- apiGroups:

deploy/ocs-operator/manifests/ocs-operator.clusterserviceversion.yaml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ metadata:
5656
capabilities: Deep Insights
5757
categories: Storage
5858
containerImage: quay.io/ocs-dev/ocs-operator:latest
59-
createdAt: "2025-09-10T07:51:15Z"
59+
createdAt: "2025-09-10T08:22:22Z"
6060
description: Red Hat OpenShift Container Storage provides hyperconverged storage
6161
for applications within an OpenShift cluster.
6262
external.features.ocs.openshift.io/supported-platforms: '["BareMetal", "None",
@@ -583,6 +583,13 @@ spec:
583583
verbs:
584584
- get
585585
- list
586+
- apiGroups:
587+
- csiaddons.openshift.io
588+
resources:
589+
- networkfenceclasses
590+
verbs:
591+
- get
592+
- list
586593
serviceAccountName: ocs-provider-server
587594
- rules:
588595
- apiGroups:

metrics/vendor/github.com/csi-addons/kubernetes-csi-addons/api/csiaddons/v1alpha1/csiaddonsnode_types.go

Lines changed: 129 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)