@@ -19,17 +19,21 @@ package loadbalancer
19
19
import (
20
20
"errors"
21
21
"fmt"
22
- "github.com/go-logr/logr"
23
22
"time"
24
23
24
+ "github.com/go-logr/logr"
25
+ "k8s.io/apimachinery/pkg/util/wait"
26
+
25
27
"github.com/gophercloud/gophercloud"
26
28
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/listeners"
27
29
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/loadbalancers"
28
30
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/monitors"
29
31
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/pools"
30
32
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips"
31
- "k8s.io/apimachinery/pkg/util/wait"
33
+ "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
34
+ "github.com/gophercloud/gophercloud/openstack/networking/v2/ports"
32
35
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha3"
36
+ "sigs.k8s.io/cluster-api-provider-openstack/pkg/cloud/services/networking"
33
37
"sigs.k8s.io/cluster-api-provider-openstack/pkg/record"
34
38
clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
35
39
"sigs.k8s.io/cluster-api/util"
@@ -61,6 +65,13 @@ func (s *Service) ReconcileLoadBalancer(clusterName string, openStackCluster *in
61
65
return err
62
66
}
63
67
68
+ if ! openStackCluster .Spec .UseOctavia {
69
+ err := s .assignNeutronLbaasAPISecGroup (clusterName , lb )
70
+ if err != nil {
71
+ return err
72
+ }
73
+ }
74
+
64
75
fp , err := getOrCreateFloatingIP (s .networkingClient , openStackCluster , openStackCluster .Spec .ControlPlaneEndpoint .Host )
65
76
if err != nil {
66
77
return err
@@ -166,6 +177,36 @@ func (s *Service) ReconcileLoadBalancer(clusterName string, openStackCluster *in
166
177
return nil
167
178
}
168
179
180
+ func (s * Service ) assignNeutronLbaasAPISecGroup (clusterName string , lb * loadbalancers.LoadBalancer ) error {
181
+ neutronLbaasSecGroupName := networking .GetNeutronLBaasSecGroupName (clusterName )
182
+ listOpts := groups.ListOpts {
183
+ Name : neutronLbaasSecGroupName ,
184
+ }
185
+ allPages , err := groups .List (s .networkingClient , listOpts ).AllPages ()
186
+ if err != nil {
187
+ return err
188
+ }
189
+
190
+ neutronLbaasGroups , err := groups .ExtractGroups (allPages )
191
+ if err != nil {
192
+ return err
193
+ }
194
+
195
+ if len (neutronLbaasGroups ) != 1 {
196
+ return fmt .Errorf ("error found %v securitygroups with name %v" , len (neutronLbaasGroups ), neutronLbaasSecGroupName )
197
+ }
198
+
199
+ updateOpts := ports.UpdateOpts {
200
+ SecurityGroups : & []string {neutronLbaasGroups [0 ].ID },
201
+ }
202
+
203
+ _ , err = ports .Update (s .networkingClient , lb .VipPortID , updateOpts ).Extract ()
204
+ if err != nil {
205
+ return err
206
+ }
207
+ return nil
208
+ }
209
+
169
210
func (s * Service ) ReconcileLoadBalancerMember (clusterName string , machine * clusterv1.Machine , openStackMachine * infrav1.OpenStackMachine , openStackCluster * infrav1.OpenStackCluster , ip string ) error {
170
211
if ! util .IsControlPlaneMachine (machine ) {
171
212
return nil
@@ -186,7 +227,6 @@ func (s *Service) ReconcileLoadBalancerMember(clusterName string, machine *clust
186
227
187
228
lbID := openStackCluster .Status .Network .APIServerLoadBalancer .ID
188
229
subnetID := openStackCluster .Status .Network .Subnet .ID
189
-
190
230
portList := []int {int (openStackCluster .Spec .ControlPlaneEndpoint .Port )}
191
231
portList = append (portList , openStackCluster .Spec .APIServerLoadBalancerAdditionalPorts ... )
192
232
for _ , port := range portList {
0 commit comments