Skip to content

Commit 4c819a9

Browse files
gaurav216l-technicore
authored andcommitted
FSS Support on OMK
1 parent 514c5a9 commit 4c819a9

25 files changed

+1025
-135
lines changed

pkg/cloudprovider/providers/oci/ccm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func NewCloudProvider(config *providercfg.Config) (cloudprovider.Interface, erro
116116

117117
if !config.LoadBalancer.Disabled && config.VCNID == "" {
118118
logger.Info("No VCN provided in cloud provider config. Falling back to looking up VCN via LB subnet.")
119-
subnet, err := c.Networking().GetSubnet(context.Background(), config.LoadBalancer.Subnet1)
119+
subnet, err := c.Networking(nil).GetSubnet(context.Background(), config.LoadBalancer.Subnet1)
120120
if err != nil {
121121
return nil, errors.Wrap(err, "get subnet for loadBalancer.subnet1")
122122
}

pkg/cloudprovider/providers/oci/instances_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -819,19 +819,19 @@ func (MockOCIClient) LoadBalancer(logger *zap.SugaredLogger, lbType string, tena
819819
return &MockLoadBalancerClient{}
820820
}
821821

822-
func (MockOCIClient) Networking() client.NetworkingInterface {
822+
func (MockOCIClient) Networking(ociClientConfig *client.OCIClientConfig) client.NetworkingInterface {
823823
return &MockVirtualNetworkClient{}
824824
}
825825

826826
func (MockOCIClient) BlockStorage() client.BlockStorageInterface {
827827
return &MockBlockStorageClient{}
828828
}
829829

830-
func (MockOCIClient) FSS() client.FileStorageInterface {
830+
func (MockOCIClient) FSS(ociClientConfig *client.OCIClientConfig) client.FileStorageInterface {
831831
return &MockFileStorageClient{}
832832
}
833833

834-
func (MockOCIClient) Identity() client.IdentityInterface {
834+
func (MockOCIClient) Identity(ociClientConfig *client.OCIClientConfig) client.IdentityInterface {
835835
return &MockIdentityClient{}
836836
}
837837

pkg/cloudprovider/providers/oci/load_balancer.go

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ func getSubnetsForNodes(ctx context.Context, nodes []*v1.Node, networkClient cli
275275
ip.V6 = externalIPs.V6
276276
}
277277

278-
subnet, err := networkClient.Networking().GetSubnetFromCacheByIP(ip)
278+
subnet, err := networkClient.Networking(nil).GetSubnetFromCacheByIP(ip)
279279
if err != nil {
280280
return nil, err
281281
}
@@ -317,7 +317,7 @@ func getSubnetsForNodes(ctx context.Context, nodes []*v1.Node, networkClient cli
317317
ipAddresses.V6 = vnic.Ipv6Addresses[0]
318318
}
319319
if ipAddresses != (client.IpAddresses{}) && ipSet.Has(ipAddresses) && !subnetOCIDs.Has(*vnic.SubnetId) {
320-
subnet, err := networkClient.Networking().GetSubnet(ctx, *vnic.SubnetId)
320+
subnet, err := networkClient.Networking(nil).GetSubnet(ctx, *vnic.SubnetId)
321321
if err != nil {
322322
return nil, errors.Wrapf(err, "get subnet %q for instance %q", *vnic.SubnetId, id)
323323
}
@@ -386,7 +386,7 @@ func (clb *CloudLoadBalancerProvider) createLoadBalancer(ctx context.Context, sp
386386

387387
// First update the security lists so that if it fails (due to the etag
388388
// bug or otherwise) we'll retry prior to LB creation.
389-
lbSubnets, err := getSubnets(ctx, spec.Subnets, clb.client.Networking())
389+
lbSubnets, err := getSubnets(ctx, spec.Subnets, clb.client.Networking(nil))
390390
if err != nil {
391391
return nil, "", errors.Wrap(err, "getting subnets for load balancers")
392392
}
@@ -434,7 +434,7 @@ func (clb *CloudLoadBalancerProvider) createLoadBalancer(ctx context.Context, sp
434434
}
435435

436436
if spec.LoadBalancerIP != "" {
437-
reservedIpOCID, err := getReservedIpOcidByIpAddress(ctx, spec.LoadBalancerIP, clb.client.Networking())
437+
reservedIpOCID, err := getReservedIpOcidByIpAddress(ctx, spec.LoadBalancerIP, clb.client.Networking(nil))
438438
if err != nil {
439439
return nil, "", err
440440
}
@@ -652,7 +652,7 @@ func (cp *CloudProvider) EnsureLoadBalancer(ctx context.Context, clusterName str
652652
return nil, err
653653
}
654654

655-
lbSubnets, err := getSubnets(ctx, lbSubnetIds, cp.client.Networking())
655+
lbSubnets, err := getSubnets(ctx, lbSubnetIds, cp.client.Networking(nil))
656656
if err != nil {
657657
logger.With(zap.Error(err)).Error("failed to get loadbalancer nodeSubnets")
658658
return nil, err
@@ -740,7 +740,7 @@ func (cp *CloudProvider) EnsureLoadBalancer(ctx context.Context, clusterName str
740740
if len(spec.NetworkSecurityGroupIds) >= MaxNsgPerVnic {
741741
return nil, fmt.Errorf("invalid number of Network Security Groups (Max: 5) including managed nsg")
742742
}
743-
resp, err := cp.client.Networking().CreateNetworkSecurityGroup(ctx, cp.config.CompartmentID, cp.config.VCNID, generateNsgName(service), fmt.Sprintf("%s", service.UID))
743+
resp, err := cp.client.Networking(nil).CreateNetworkSecurityGroup(ctx, cp.config.CompartmentID, cp.config.VCNID, generateNsgName(service), fmt.Sprintf("%s", service.UID))
744744
if err != nil {
745745
logger.With(zap.Error(err)).Error("Failed to create nsg")
746746
errorType = util.GetError(err)
@@ -764,7 +764,7 @@ func (cp *CloudProvider) EnsureLoadBalancer(ctx context.Context, clusterName str
764764
}
765765
if len(backendNsgs) > 0 {
766766
for _, nsg := range backendNsgs {
767-
resp, etag, err := cp.client.Networking().GetNetworkSecurityGroup(ctx, nsg)
767+
resp, etag, err := cp.client.Networking(nil).GetNetworkSecurityGroup(ctx, nsg)
768768
if err != nil {
769769
logger.With(zap.Error(err)).Error("Failed to get nsg")
770770
errorType = util.GetError(err)
@@ -777,7 +777,7 @@ func (cp *CloudProvider) EnsureLoadBalancer(ctx context.Context, clusterName str
777777
if _, ok := freeformTags["ManagedBy"]; !ok {
778778
if etag != nil {
779779
freeformTags["ManagedBy"] = "CCM"
780-
response, err := cp.client.Networking().UpdateNetworkSecurityGroup(ctx, nsg, *etag, freeformTags)
780+
response, err := cp.client.Networking(nil).UpdateNetworkSecurityGroup(ctx, nsg, *etag, freeformTags)
781781
if err != nil {
782782
logger.With(zap.Error(err)).Errorf("Failed to update nsg %s", nsg)
783783
errorType = util.GetError(err)
@@ -946,7 +946,7 @@ func (cp *CloudProvider) getOciLoadBalancerSubnets(ctx context.Context, logger *
946946

947947
if s, ok := svc.Annotations[ServiceAnnotationLoadBalancerSubnet1]; ok && len(s) != 0 {
948948
subnets[0] = s
949-
r, err := cp.client.Networking().IsRegionalSubnet(ctx, s)
949+
r, err := cp.client.Networking(nil).IsRegionalSubnet(ctx, s)
950950
if err != nil {
951951
return nil, err
952952
}
@@ -956,7 +956,7 @@ func (cp *CloudProvider) getOciLoadBalancerSubnets(ctx context.Context, logger *
956956
}
957957

958958
if s, ok := svc.Annotations[ServiceAnnotationLoadBalancerSubnet2]; ok && len(s) != 0 {
959-
r, err := cp.client.Networking().IsRegionalSubnet(ctx, s)
959+
r, err := cp.client.Networking(nil).IsRegionalSubnet(ctx, s)
960960
if err != nil {
961961
return nil, err
962962
}
@@ -1011,7 +1011,7 @@ func (clb *CloudLoadBalancerProvider) updateLoadBalancer(ctx context.Context, lb
10111011
break
10121012
}
10131013
}
1014-
lbSubnets, err := getSubnets(ctx, spec.Subnets, clb.client.Networking())
1014+
lbSubnets, err := getSubnets(ctx, spec.Subnets, clb.client.Networking(nil))
10151015
if err != nil {
10161016
return errors.Wrapf(err, "getting load balancer subnets")
10171017
}
@@ -1156,7 +1156,7 @@ func (clb *CloudLoadBalancerProvider) updateLoadBalancerBackends(ctx context.Con
11561156

11571157
logger := clb.logger.With("loadBalancerID", lbID, "compartmentID", clb.config.CompartmentID, "loadBalancerType", getLoadBalancerType(spec.service), "serviceName", spec.service.Name)
11581158

1159-
lbSubnets, err := getSubnets(ctx, spec.Subnets, clb.client.Networking())
1159+
lbSubnets, err := getSubnets(ctx, spec.Subnets, clb.client.Networking(nil))
11601160
if err != nil {
11611161
return errors.Wrapf(err, "getting load balancer subnets")
11621162
}
@@ -1449,7 +1449,7 @@ func (cp *CloudProvider) UpdateLoadBalancer(ctx context.Context, clusterName str
14491449
return err
14501450
}
14511451

1452-
lbSubnets, err := getSubnets(ctx, lbSubnetIds, cp.client.Networking())
1452+
lbSubnets, err := getSubnets(ctx, lbSubnetIds, cp.client.Networking(nil))
14531453
if err != nil {
14541454
logger.With(zap.Error(err)).Error("failed to get loadbalancer subnets")
14551455
return err
@@ -1732,7 +1732,7 @@ func (cp *CloudProvider) cleanupSecurityRulesForLoadBalancerDelete(lb *client.Ge
17321732
return errors.Wrap(err, "getting subnets for nodes")
17331733
}
17341734

1735-
lbSubnets, err := getSubnets(ctx, lb.SubnetIds, cp.client.Networking())
1735+
lbSubnets, err := getSubnets(ctx, lb.SubnetIds, cp.client.Networking(nil))
17361736
if err != nil {
17371737
logger.With(zap.Error(err)).Error("Failed to get subnets for load balancers")
17381738
return errors.Wrap(err, "getting subnets for load balancers")
@@ -1989,10 +1989,9 @@ func (cp *CloudProvider) checkAllBackendNodesNotReady(nodeList []*v1.Node) bool
19891989
}
19901990
return true
19911991
}
1992-
19931992
// If CCM manages the NSG for the service, CCM to delete the NSG when the LB/NLB service is deleted
19941993
func (cp *CloudProvider) deleteNsg(ctx context.Context, logger *zap.SugaredLogger, id, etag string) (bool, error) {
1995-
opcRequestId, err := cp.client.Networking().DeleteNetworkSecurityGroup(ctx, id, etag)
1994+
opcRequestId, err := cp.client.Networking(nil).DeleteNetworkSecurityGroup(ctx, id, etag)
19961995
if err != nil {
19971996
logger.Errorf("failed to delete nsg %s OpcRequestId %s", id, pointer.StringDeref(opcRequestId, ""))
19981997
return false, err
@@ -2002,7 +2001,7 @@ func (cp *CloudProvider) deleteNsg(ctx context.Context, logger *zap.SugaredLogge
20022001
}
20032002

20042003
func (cp *CloudProvider) getFrontendNsg(ctx context.Context, logger *zap.SugaredLogger, id, uid string) (frontendNsgId string, etag *string, err error) {
2005-
nsg, etag, err := cp.client.Networking().GetNetworkSecurityGroup(ctx, id)
2004+
nsg, etag, err := cp.client.Networking(nil).GetNetworkSecurityGroup(ctx, id)
20062005
if err != nil || nsg == nil || etag == nil {
20072006
logger.Errorf("failed to get nsg %s", id)
20082007
return "", nil, err
@@ -2019,7 +2018,7 @@ func (cp *CloudProvider) getFrontendNsg(ctx context.Context, logger *zap.Sugared
20192018
}
20202019

20212020
func (cp *CloudProvider) getFrontendNsgByName(ctx context.Context, logger *zap.SugaredLogger, displayName, compartmentId, vcnId, uid string) (frontendNsgId string, etag *string, err error) {
2022-
nsgs, err := cp.client.Networking().ListNetworkSecurityGroups(ctx, displayName, compartmentId, vcnId)
2021+
nsgs, err := cp.client.Networking(nil).ListNetworkSecurityGroups(ctx, displayName, compartmentId, vcnId)
20232022
for _, nsg := range nsgs {
20242023
frontendNsgId, etag, err = cp.getFrontendNsg(ctx, logger, pointer.StringDeref(nsg.Id, ""), uid)
20252024
if err != nil {

pkg/cloudprovider/providers/oci/load_balancer_network_security_group.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (s *CloudProvider) getNsg(ctx context.Context, id string) (*core.NetworkSec
212212
if id == "" {
213213
return nil, errors.New("invalid; empty nsg id provided") // should never happen
214214
}
215-
response, _, err := s.client.Networking().GetNetworkSecurityGroup(ctx, id)
215+
response, _, err := s.client.Networking(nil).GetNetworkSecurityGroup(ctx, id)
216216
if err != nil {
217217
return nil, errors.Wrapf(err, "failed to get nsg with id %s", id)
218218
}
@@ -225,7 +225,7 @@ func (s *CloudProvider) listNsgRules(ctx context.Context, id string, direction c
225225
return nil, errors.New("invalid; empty nsg id provided") // should never happen
226226
}
227227

228-
response, err := s.client.Networking().ListNetworkSecurityGroupSecurityRules(ctx, id, direction)
228+
response, err := s.client.Networking(nil).ListNetworkSecurityGroupSecurityRules(ctx, id, direction)
229229
if err != nil {
230230
return nil, errors.Wrapf(err, "failed to list Security Rules for nsg: %s", id)
231231
}
@@ -238,7 +238,7 @@ func (s *CloudProvider) addNetworkSecurityGroupSecurityRules(ctx context.Context
238238
var response *core.AddNetworkSecurityGroupSecurityRulesResponse
239239
var err error
240240
for i, _ := range rulesInBatches {
241-
response, err = s.client.Networking().AddNetworkSecurityGroupSecurityRules(ctx,
241+
response, err = s.client.Networking(nil).AddNetworkSecurityGroupSecurityRules(ctx,
242242
*nsgId,
243243
core.AddNetworkSecurityGroupSecurityRulesDetails{SecurityRules: securityRuleToAddSecurityRuleDetails(rulesInBatches[i])})
244244
if err != nil {
@@ -255,7 +255,7 @@ func (s *CloudProvider) removeNetworkSecurityGroupSecurityRules(ctx context.Cont
255255
var response *core.RemoveNetworkSecurityGroupSecurityRulesResponse
256256
var err error
257257
for i, _ := range rulesInBatches {
258-
response, err = s.client.Networking().RemoveNetworkSecurityGroupSecurityRules(ctx, *nsgId,
258+
response, err = s.client.Networking(nil).RemoveNetworkSecurityGroupSecurityRules(ctx, *nsgId,
259259
core.RemoveNetworkSecurityGroupSecurityRulesDetails{SecurityRuleIds: rulesInBatches[i]})
260260
if err != nil {
261261
return nil, errors.Wrapf(err, "failed to remove security rules for nsg: %s OpcRequestId: %s", *nsgId, pointer.StringDeref(response.OpcRequestId, ""))

pkg/cloudprovider/providers/oci/load_balancer_security_lists.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func (s *baseSecurityListManager) updateBackendRules(ctx context.Context, lbSubn
124124

125125
logger.Info("Node subnet security list changed")
126126

127-
_, err = s.client.Networking().UpdateSecurityList(ctx, *secList.Id, etag, ingressRules, secList.EgressSecurityRules)
127+
_, err = s.client.Networking(nil).UpdateSecurityList(ctx, *secList.Id, etag, ingressRules, secList.EgressSecurityRules)
128128
if err != nil {
129129
return errors.Wrapf(err, "update security list rules %q for subnet %q", *secList.Id, *subnet.Id)
130130
}
@@ -168,7 +168,7 @@ func (s *baseSecurityListManager) updateLoadBalancerRules(ctx context.Context, l
168168

169169
logger.Info("Load balancer subnet security list changed")
170170

171-
_, err = s.client.Networking().UpdateSecurityList(ctx, *secList.Id, etag, lbIngressRules, lbEgressRules)
171+
_, err = s.client.Networking(nil).UpdateSecurityList(ctx, *secList.Id, etag, lbIngressRules, lbEgressRules)
172172
if err != nil {
173173
return errors.Wrapf(err, "update lb security list rules %q for subnet %q", *secList.Id, *lbSubnet.Id)
174174
}
@@ -184,7 +184,7 @@ func (s *baseSecurityListManager) getSecurityList(ctx context.Context, subnet *c
184184

185185
// Use the security list from cloud-provider config if provided.
186186
if id, ok := s.securityLists[*subnet.Id]; ok && sets.NewString(subnet.SecurityListIds...).Has(id) {
187-
response, err := s.client.Networking().GetSecurityList(ctx, id)
187+
response, err := s.client.Networking(nil).GetSecurityList(ctx, id)
188188
if err != nil {
189189
return nil, "", err
190190
}
@@ -195,7 +195,7 @@ func (s *baseSecurityListManager) getSecurityList(ctx context.Context, subnet *c
195195
// NOTE(apryde): This is rather arbitrary but we're probably stuck with it at this point.
196196
responses := make([]core.GetSecurityListResponse, len(subnet.SecurityListIds))
197197
for i, id := range subnet.SecurityListIds {
198-
response, err := s.client.Networking().GetSecurityList(ctx, id)
198+
response, err := s.client.Networking(nil).GetSecurityList(ctx, id)
199199
if err != nil {
200200
return nil, "", err
201201
}

pkg/csi/driver/bv_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ func (d *BlockVolumeControllerDriver) CreateVolume(ctx context.Context, req *csi
406406

407407
} else {
408408
// Creating new volume
409-
ad, err := d.client.Identity().GetAvailabilityDomainByName(ctx, d.config.CompartmentID, availableDomainShortName)
409+
ad, err := d.client.Identity(nil).GetAvailabilityDomainByName(ctx, d.config.CompartmentID, availableDomainShortName)
410410
if err != nil {
411411
log.With("Compartment Id", d.config.CompartmentID, "service", "identity", "verb", "get", "resource", "AD", "statusCode", util.GetHttpStatusCode(err)).
412412
With(zap.Error(err)).Error("Failed to get available domain.")

pkg/csi/driver/bv_controller_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,19 +193,19 @@ func (MockOCIClient) LoadBalancer(logger *zap.SugaredLogger, lbType string, tena
193193
return &MockLoadBalancerClient{}
194194
}
195195

196-
func (MockOCIClient) Networking() client.NetworkingInterface {
196+
func (MockOCIClient) Networking(ociClientConfig *client.OCIClientConfig) client.NetworkingInterface {
197197
return &MockVirtualNetworkClient{}
198198
}
199199

200200
func (MockOCIClient) BlockStorage() client.BlockStorageInterface {
201201
return &MockBlockStorageClient{}
202202
}
203203

204-
func (MockOCIClient) FSS() client.FileStorageInterface {
204+
func (MockOCIClient) FSS(ociClientConfig *client.OCIClientConfig) client.FileStorageInterface {
205205
return &MockFileStorageClient{}
206206
}
207207

208-
func (MockOCIClient) Identity() client.IdentityInterface {
208+
func (MockOCIClient) Identity(ociClientConfig *client.OCIClientConfig) client.IdentityInterface {
209209
return &MockIdentityClient{}
210210
}
211211

@@ -499,7 +499,7 @@ func (c *MockVirtualNetworkClient) GetPublicIpByIpAddress(ctx context.Context, i
499499
}
500500

501501
// Networking mocks client VirtualNetwork implementation.
502-
func (p *MockProvisionerClient) Networking() client.NetworkingInterface {
502+
func (p *MockProvisionerClient) Networking(ociClientConfig *client.OCIClientConfig) client.NetworkingInterface {
503503
return &MockVirtualNetworkClient{}
504504
}
505505

@@ -791,7 +791,7 @@ func (client MockIdentityClient) GetAvailabilityDomainByName(ctx context.Context
791791
}
792792

793793
// Identity mocks client Identity implementation
794-
func (p *MockProvisionerClient) Identity() client.IdentityInterface {
794+
func (p *MockProvisionerClient) Identity(ociClientConfig *client.OCIClientConfig) client.IdentityInterface {
795795
return &MockIdentityClient{}
796796
}
797797

pkg/csi/driver/driver.go

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,25 @@ import (
2323
"path"
2424
"path/filepath"
2525
"sync"
26+
"time"
2627

2728
"github.com/container-storage-interface/spec/lib/go/csi"
2829
"github.com/kubernetes-csi/csi-lib-utils/protosanitizer"
2930

30-
"go.uber.org/zap"
31-
"google.golang.org/grpc"
32-
"k8s.io/client-go/kubernetes"
33-
3431
"github.com/oracle/oci-cloud-controller-manager/cmd/oci-csi-node-driver/nodedriveroptions"
3532
providercfg "github.com/oracle/oci-cloud-controller-manager/pkg/cloudprovider/providers/oci/config"
3633
csi_util "github.com/oracle/oci-cloud-controller-manager/pkg/csi-util"
3734
"github.com/oracle/oci-cloud-controller-manager/pkg/metrics"
3835
"github.com/oracle/oci-cloud-controller-manager/pkg/oci/client"
3936
"github.com/oracle/oci-cloud-controller-manager/pkg/oci/instance/metadata"
37+
"go.uber.org/zap"
38+
"google.golang.org/grpc"
39+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
40+
"k8s.io/apimachinery/pkg/util/wait"
41+
"k8s.io/client-go/informers"
42+
"k8s.io/client-go/kubernetes"
43+
listersv1 "k8s.io/client-go/listers/core/v1"
44+
"k8s.io/client-go/tools/cache"
4045
)
4146

4247
const (
@@ -103,6 +108,7 @@ type BlockVolumeControllerDriver struct {
103108
// FSSControllerDriver extends ControllerDriver
104109
type FSSControllerDriver struct {
105110
ControllerDriver
111+
serviceAccountLister listersv1.ServiceAccountLister
106112
}
107113

108114
// NodeDriver implements CSI Node interfaces
@@ -176,7 +182,17 @@ func GetControllerDriver(name string, kubeClientSet kubernetes.Interface, logger
176182
return &BlockVolumeControllerDriver{ControllerDriver: newControllerDriver(kubeClientSet, logger, config, c, metricPusher, clusterIpFamily)}
177183
}
178184
if name == FSSDriverName {
179-
return &FSSControllerDriver{ControllerDriver: newControllerDriver(kubeClientSet, logger, config, c, metricPusher, clusterIpFamily)}
185+
186+
factory := informers.NewSharedInformerFactory(kubeClientSet, 5*time.Minute)
187+
serviceAccountInformer := factory.Core().V1().ServiceAccounts()
188+
go serviceAccountInformer.Informer().Run(wait.NeverStop)
189+
190+
if !cache.WaitForCacheSync(wait.NeverStop, serviceAccountInformer.Informer().HasSynced) {
191+
utilruntime.HandleError(fmt.Errorf("timed out waiting for informers to sync"))
192+
}
193+
194+
return &FSSControllerDriver{ControllerDriver: newControllerDriver(kubeClientSet, logger, config, c, metricPusher, clusterIpFamily), serviceAccountLister: serviceAccountInformer.Lister()}
195+
180196
}
181197
return nil
182198
}

0 commit comments

Comments
 (0)