@@ -21,8 +21,10 @@ import (
21
21
"fmt"
22
22
23
23
"github.com/go-logr/logr"
24
+ "github.com/gophercloud/gophercloud"
24
25
"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
25
26
"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
27
+ "github.com/gophercloud/utils/openstack/clientconfig"
26
28
"github.com/pkg/errors"
27
29
apierrors "k8s.io/apimachinery/pkg/api/errors"
28
30
"k8s.io/client-go/tools/record"
@@ -189,8 +191,6 @@ func contains(arr []string, target string) bool {
189
191
func (r * OpenStackClusterReconciler ) reconcileNormal (ctx context.Context , log logr.Logger , patchHelper * patch.Helper , cluster * clusterv1.Cluster , openStackCluster * infrav1.OpenStackCluster ) (ctrl.Result , error ) {
190
192
log .Info ("Reconciling Cluster" )
191
193
192
- clusterName := fmt .Sprintf ("%s-%s" , cluster .Namespace , cluster .Name )
193
-
194
194
// If the OpenStackCluster doesn't have our finalizer, add it.
195
195
controllerutil .AddFinalizer (openStackCluster , infrav1 .ClusterFinalizer )
196
196
// Register the finalizer immediately to avoid orphaning OpenStack resources on delete
@@ -208,73 +208,11 @@ func (r *OpenStackClusterReconciler) reconcileNormal(ctx context.Context, log lo
208
208
return reconcile.Result {}, err
209
209
}
210
210
211
- networkingService , err := networking .NewService (osProviderClient , clientOpts , log )
212
- if err != nil {
213
- return reconcile.Result {}, err
214
- }
215
-
216
- loadBalancerService , err := loadbalancer .NewService (osProviderClient , clientOpts , log , openStackCluster .Spec .UseOctavia )
211
+ err = r .reconcileNetworkComponents (log , osProviderClient , clientOpts , cluster , openStackCluster )
217
212
if err != nil {
218
213
return reconcile.Result {}, err
219
214
}
220
215
221
- log .Info ("Reconciling network components" )
222
- if openStackCluster .Spec .NodeCIDR == "" {
223
- log .V (4 ).Info ("No need to reconcile network, searching network and subnet instead" )
224
-
225
- netOpts := networks .ListOpts (openStackCluster .Spec .Network )
226
- networkList , err := networkingService .GetNetworksByFilter (& netOpts )
227
- if err != nil && len (networkList ) == 0 {
228
- return reconcile.Result {}, errors .Errorf ("failed to find network: %v" , err )
229
- }
230
- if len (networkList ) > 1 {
231
- return reconcile.Result {}, errors .Errorf ("failed to find only one network (result: %v): %v" , networkList , err )
232
- }
233
- openStackCluster .Status .Network = & infrav1.Network {
234
- ID : networkList [0 ].ID ,
235
- Name : networkList [0 ].Name ,
236
- }
237
-
238
- subnetOpts := subnets .ListOpts (openStackCluster .Spec .Subnet )
239
- subnetOpts .NetworkID = networkList [0 ].ID
240
- subnetList , err := networkingService .GetSubnetsByFilter (& subnetOpts )
241
- if err != nil || len (subnetList ) == 0 {
242
- return reconcile.Result {}, errors .Errorf ("failed to find subnet: %v" , err )
243
- }
244
- if len (subnetList ) > 1 {
245
- return reconcile.Result {}, errors .Errorf ("failed to find only one subnet (result: %v): %v" , subnetList , err )
246
- }
247
- openStackCluster .Status .Network .Subnet = & infrav1.Subnet {
248
- ID : subnetList [0 ].ID ,
249
- Name : subnetList [0 ].Name ,
250
- CIDR : subnetList [0 ].CIDR ,
251
- }
252
- } else {
253
- err := networkingService .ReconcileNetwork (clusterName , openStackCluster )
254
- if err != nil {
255
- return reconcile.Result {}, errors .Errorf ("failed to reconcile network: %v" , err )
256
- }
257
- err = networkingService .ReconcileSubnet (clusterName , openStackCluster )
258
- if err != nil {
259
- return reconcile.Result {}, errors .Errorf ("failed to reconcile subnets: %v" , err )
260
- }
261
- err = networkingService .ReconcileRouter (clusterName , openStackCluster )
262
- if err != nil {
263
- return reconcile.Result {}, errors .Errorf ("failed to reconcile router: %v" , err )
264
- }
265
- if openStackCluster .Spec .ManagedAPIServerLoadBalancer {
266
- err = loadBalancerService .ReconcileLoadBalancer (clusterName , openStackCluster )
267
- if err != nil {
268
- return reconcile.Result {}, errors .Errorf ("failed to reconcile load balancer: %v" , err )
269
- }
270
- }
271
- }
272
-
273
- err = networkingService .ReconcileSecurityGroups (clusterName , openStackCluster )
274
- if err != nil {
275
- return reconcile.Result {}, errors .Errorf ("failed to reconcile security groups: %v" , err )
276
- }
277
-
278
216
// Set APIEndpoints so the Cluster API Cluster Controller can pull them
279
217
if openStackCluster .Spec .ManagedAPIServerLoadBalancer {
280
218
openStackCluster .Spec .ControlPlaneEndpoint = clusterv1.APIEndpoint {
@@ -339,6 +277,79 @@ func (r *OpenStackClusterReconciler) reconcileNormal(ctx context.Context, log lo
339
277
return ctrl.Result {}, nil
340
278
}
341
279
280
+ func (r * OpenStackClusterReconciler ) reconcileNetworkComponents (log logr.Logger , osProviderClient * gophercloud.ProviderClient , clientOpts * clientconfig.ClientOpts , cluster * clusterv1.Cluster , openStackCluster * infrav1.OpenStackCluster ) error {
281
+ clusterName := fmt .Sprintf ("%s-%s" , cluster .Namespace , cluster .Name )
282
+
283
+ networkingService , err := networking .NewService (osProviderClient , clientOpts , log )
284
+ if err != nil {
285
+ return err
286
+ }
287
+
288
+ loadBalancerService , err := loadbalancer .NewService (osProviderClient , clientOpts , log , openStackCluster .Spec .UseOctavia )
289
+ if err != nil {
290
+ return err
291
+ }
292
+
293
+ log .Info ("Reconciling network components" )
294
+ if openStackCluster .Spec .NodeCIDR == "" {
295
+ log .V (4 ).Info ("No need to reconcile network, searching network and subnet instead" )
296
+
297
+ netOpts := networks .ListOpts (openStackCluster .Spec .Network )
298
+ networkList , err := networkingService .GetNetworksByFilter (& netOpts )
299
+ if err != nil && len (networkList ) == 0 {
300
+ return errors .Errorf ("failed to find network: %v" , err )
301
+ }
302
+ if len (networkList ) > 1 {
303
+ return errors .Errorf ("failed to find only one network (result: %v): %v" , networkList , err )
304
+ }
305
+ openStackCluster .Status .Network = & infrav1.Network {
306
+ ID : networkList [0 ].ID ,
307
+ Name : networkList [0 ].Name ,
308
+ }
309
+
310
+ subnetOpts := subnets .ListOpts (openStackCluster .Spec .Subnet )
311
+ subnetOpts .NetworkID = networkList [0 ].ID
312
+ subnetList , err := networkingService .GetSubnetsByFilter (& subnetOpts )
313
+ if err != nil || len (subnetList ) == 0 {
314
+ return errors .Errorf ("failed to find subnet: %v" , err )
315
+ }
316
+ if len (subnetList ) > 1 {
317
+ return errors .Errorf ("failed to find only one subnet (result: %v): %v" , subnetList , err )
318
+ }
319
+ openStackCluster .Status .Network .Subnet = & infrav1.Subnet {
320
+ ID : subnetList [0 ].ID ,
321
+ Name : subnetList [0 ].Name ,
322
+ CIDR : subnetList [0 ].CIDR ,
323
+ }
324
+ } else {
325
+ err := networkingService .ReconcileNetwork (clusterName , openStackCluster )
326
+ if err != nil {
327
+ return errors .Errorf ("failed to reconcile network: %v" , err )
328
+ }
329
+ err = networkingService .ReconcileSubnet (clusterName , openStackCluster )
330
+ if err != nil {
331
+ return errors .Errorf ("failed to reconcile subnets: %v" , err )
332
+ }
333
+ err = networkingService .ReconcileRouter (clusterName , openStackCluster )
334
+ if err != nil {
335
+ return errors .Errorf ("failed to reconcile router: %v" , err )
336
+ }
337
+ if openStackCluster .Spec .ManagedAPIServerLoadBalancer {
338
+ err = loadBalancerService .ReconcileLoadBalancer (clusterName , openStackCluster )
339
+ if err != nil {
340
+ return errors .Errorf ("failed to reconcile load balancer: %v" , err )
341
+ }
342
+ }
343
+ }
344
+
345
+ err = networkingService .ReconcileSecurityGroups (clusterName , openStackCluster )
346
+ if err != nil {
347
+ return errors .Errorf ("failed to reconcile security groups: %v" , err )
348
+ }
349
+
350
+ return nil
351
+ }
352
+
342
353
func (r * OpenStackClusterReconciler ) SetupWithManager (mgr ctrl.Manager , options controller.Options ) error {
343
354
return ctrl .NewControllerManagedBy (mgr ).
344
355
WithOptions (options ).
0 commit comments