Skip to content

Commit 50d1721

Browse files
authored
Merge pull request #1177 from shiftstack/floatingip-events
🐛 Fix event target of floating ip operations
2 parents 27817ed + 93ac9cb commit 50d1721

File tree

5 files changed

+24
-22
lines changed

5 files changed

+24
-22
lines changed

controllers/openstackcluster_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ func reconcileBastion(log logr.Logger, osProviderClient *gophercloud.ProviderCli
331331
return err
332332
}
333333
clusterName := fmt.Sprintf("%s-%s", cluster.Namespace, cluster.Name)
334-
fp, err := networkingService.GetOrCreateFloatingIP(openStackCluster, clusterName, openStackCluster.Spec.Bastion.Instance.FloatingIP)
334+
fp, err := networkingService.GetOrCreateFloatingIP(openStackCluster, openStackCluster, clusterName, openStackCluster.Spec.Bastion.Instance.FloatingIP)
335335
if err != nil {
336336
handleUpdateOSCError(openStackCluster, errors.Errorf("failed to get or create floating IP for bastion: %v", err))
337337
return errors.Errorf("failed to get or create floating IP for bastion: %v", err)
@@ -474,7 +474,7 @@ func reconcileNetworkComponents(log logr.Logger, osProviderClient *gophercloud.P
474474
}
475475
case !openStackCluster.Spec.DisableAPIServerFloatingIP:
476476
// If floating IPs are not disabled, get one to use as the VIP for the control plane
477-
fp, err := networkingService.GetOrCreateFloatingIP(openStackCluster, clusterName, openStackCluster.Spec.APIServerFloatingIP)
477+
fp, err := networkingService.GetOrCreateFloatingIP(openStackCluster, openStackCluster, clusterName, openStackCluster.Spec.APIServerFloatingIP)
478478
if err != nil {
479479
handleUpdateOSCError(openStackCluster, errors.Errorf("Floating IP cannot be got or created: %v", err))
480480
return errors.Errorf("Floating IP cannot be got or created: %v", err)

controllers/openstackmachine_controller.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ func (r *OpenStackMachineReconciler) reconcileDelete(ctx context.Context, logger
233233
addresses := instanceNS.Addresses()
234234
for _, address := range addresses {
235235
if address.Type == corev1.NodeExternalIP {
236-
if err = networkingService.DeleteFloatingIP(openStackCluster, address.Address); err != nil {
236+
if err = networkingService.DeleteFloatingIP(openStackMachine, address.Address); err != nil {
237237
handleUpdateMachineError(logger, openStackMachine, errors.Errorf("error deleting Openstack floating IP: %v", err))
238238
return ctrl.Result{}, nil
239239
}
@@ -361,7 +361,7 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, logger
361361
if openStackCluster.Spec.APIServerFloatingIP != "" {
362362
floatingIPAddress = openStackCluster.Spec.APIServerFloatingIP
363363
}
364-
fp, err := networkingService.GetOrCreateFloatingIP(openStackCluster, clusterName, floatingIPAddress)
364+
fp, err := networkingService.GetOrCreateFloatingIP(openStackMachine, openStackCluster, clusterName, floatingIPAddress)
365365
if err != nil {
366366
handleUpdateMachineError(logger, openStackMachine, errors.Errorf("Floating IP cannot be got or created: %v", err))
367367
return ctrl.Result{}, nil
@@ -372,7 +372,7 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, logger
372372
handleUpdateMachineError(logger, openStackMachine, err)
373373
return ctrl.Result{}, nil
374374
}
375-
err = networkingService.AssociateFloatingIP(openStackCluster, fp, port.ID)
375+
err = networkingService.AssociateFloatingIP(openStackMachine, fp, port.ID)
376376
if err != nil {
377377
handleUpdateMachineError(logger, openStackMachine, errors.Errorf("Floating IP cannot be associated: %v", err))
378378
return ctrl.Result{}, nil

pkg/cloud/services/loadbalancer/loadbalancer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func (s *Service) ReconcileLoadBalancer(openStackCluster *infrav1.OpenStackClust
7171
case openStackCluster.Spec.ControlPlaneEndpoint.IsValid():
7272
floatingIPAddress = openStackCluster.Spec.ControlPlaneEndpoint.Host
7373
}
74-
fp, err := s.networkingService.GetOrCreateFloatingIP(openStackCluster, clusterName, floatingIPAddress)
74+
fp, err := s.networkingService.GetOrCreateFloatingIP(openStackCluster, openStackCluster, clusterName, floatingIPAddress)
7575
if err != nil {
7676
return err
7777
}

pkg/cloud/services/networking/floatingip.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/attributestags"
2323
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips"
24+
"k8s.io/apimachinery/pkg/runtime"
2425
"k8s.io/apimachinery/pkg/util/wait"
2526

2627
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1"
@@ -29,7 +30,7 @@ import (
2930
"sigs.k8s.io/cluster-api-provider-openstack/pkg/utils/names"
3031
)
3132

32-
func (s *Service) GetOrCreateFloatingIP(openStackCluster *infrav1.OpenStackCluster, clusterName, ip string) (*floatingips.FloatingIP, error) {
33+
func (s *Service) GetOrCreateFloatingIP(eventObject runtime.Object, openStackCluster *infrav1.OpenStackCluster, clusterName, ip string) (*floatingips.FloatingIP, error) {
3334
var fp *floatingips.FloatingIP
3435
var err error
3536
var fpCreateOpts floatingips.CreateOpts
@@ -51,7 +52,7 @@ func (s *Service) GetOrCreateFloatingIP(openStackCluster *infrav1.OpenStackClust
5152

5253
fp, err = s.client.CreateFloatingIP(fpCreateOpts)
5354
if err != nil {
54-
record.Warnf(openStackCluster, "FailedCreateFloatingIP", "Failed to create floating IP %s: %v", ip, err)
55+
record.Warnf(eventObject, "FailedCreateFloatingIP", "Failed to create floating IP %s: %v", ip, err)
5556
return nil, err
5657
}
5758

@@ -65,7 +66,7 @@ func (s *Service) GetOrCreateFloatingIP(openStackCluster *infrav1.OpenStackClust
6566
}
6667
}
6768

68-
record.Eventf(openStackCluster, "SuccessfulCreateFloatingIP", "Created floating IP %s with id %s", fp.FloatingIP, fp.ID)
69+
record.Eventf(eventObject, "SuccessfulCreateFloatingIP", "Created floating IP %s with id %s", fp.FloatingIP, fp.ID)
6970
return fp, nil
7071
}
7172

@@ -91,7 +92,7 @@ func (s *Service) GetFloatingIPByPortID(portID string) (*floatingips.FloatingIP,
9192
return &fpList[0], nil
9293
}
9394

94-
func (s *Service) DeleteFloatingIP(openStackCluster *infrav1.OpenStackCluster, ip string) error {
95+
func (s *Service) DeleteFloatingIP(eventObject runtime.Object, ip string) error {
9596
fip, err := s.checkIfFloatingIPExists(ip)
9697
if err != nil {
9798
return err
@@ -103,11 +104,11 @@ func (s *Service) DeleteFloatingIP(openStackCluster *infrav1.OpenStackCluster, i
103104

104105
err = s.client.DeleteFloatingIP(fip.ID)
105106
if err != nil {
106-
record.Warnf(openStackCluster, "FailedDeleteFloatingIP", "Failed to delete floating IP %s: %v", ip, err)
107+
record.Warnf(eventObject, "FailedDeleteFloatingIP", "Failed to delete floating IP %s: %v", ip, err)
107108
return err
108109
}
109110

110-
record.Eventf(openStackCluster, "SuccessfulDeleteFloatingIP", "Deleted floating IP %s", ip)
111+
record.Eventf(eventObject, "SuccessfulDeleteFloatingIP", "Deleted floating IP %s", ip)
111112
return nil
112113
}
113114

@@ -118,11 +119,11 @@ var backoff = wait.Backoff{
118119
Jitter: 0.1,
119120
}
120121

121-
func (s *Service) AssociateFloatingIP(openStackCluster *infrav1.OpenStackCluster, fp *floatingips.FloatingIP, portID string) error {
122+
func (s *Service) AssociateFloatingIP(eventObject runtime.Object, fp *floatingips.FloatingIP, portID string) error {
122123
s.logger.Info("Associating floating IP", "id", fp.ID, "ip", fp.FloatingIP)
123124

124125
if fp.PortID == portID {
125-
record.Eventf(openStackCluster, "SuccessfulAssociateFloatingIP", "Floating IP %s already associated with port %s", fp.FloatingIP, portID)
126+
record.Eventf(eventObject, "SuccessfulAssociateFloatingIP", "Floating IP %s already associated with port %s", fp.FloatingIP, portID)
126127
return nil
127128
}
128129

@@ -132,20 +133,20 @@ func (s *Service) AssociateFloatingIP(openStackCluster *infrav1.OpenStackCluster
132133

133134
_, err := s.client.UpdateFloatingIP(fp.ID, fpUpdateOpts)
134135
if err != nil {
135-
record.Warnf(openStackCluster, "FailedAssociateFloatingIP", "Failed to associate floating IP %s with port %s: %v", fp.FloatingIP, portID, err)
136+
record.Warnf(eventObject, "FailedAssociateFloatingIP", "Failed to associate floating IP %s with port %s: %v", fp.FloatingIP, portID, err)
136137
return err
137138
}
138139

139140
if err = s.waitForFloatingIP(fp.ID, "ACTIVE"); err != nil {
140-
record.Warnf(openStackCluster, "FailedAssociateFloatingIP", "Failed to associate floating IP %s with port %s: wait for floating IP ACTIVE: %v", fp.FloatingIP, portID, err)
141+
record.Warnf(eventObject, "FailedAssociateFloatingIP", "Failed to associate floating IP %s with port %s: wait for floating IP ACTIVE: %v", fp.FloatingIP, portID, err)
141142
return err
142143
}
143144

144-
record.Eventf(openStackCluster, "SuccessfulAssociateFloatingIP", "Associated floating IP %s with port %s", fp.FloatingIP, portID)
145+
record.Eventf(eventObject, "SuccessfulAssociateFloatingIP", "Associated floating IP %s with port %s", fp.FloatingIP, portID)
145146
return nil
146147
}
147148

148-
func (s *Service) DisassociateFloatingIP(openStackCluster *infrav1.OpenStackCluster, ip string) error {
149+
func (s *Service) DisassociateFloatingIP(eventObject runtime.Object, ip string) error {
149150
fip, err := s.checkIfFloatingIPExists(ip)
150151
if err != nil {
151152
return err
@@ -163,16 +164,16 @@ func (s *Service) DisassociateFloatingIP(openStackCluster *infrav1.OpenStackClus
163164

164165
_, err = s.client.UpdateFloatingIP(fip.ID, fpUpdateOpts)
165166
if err != nil {
166-
record.Warnf(openStackCluster, "FailedDisassociateFloatingIP", "Failed to disassociate floating IP %s: %v", fip.FloatingIP, err)
167+
record.Warnf(eventObject, "FailedDisassociateFloatingIP", "Failed to disassociate floating IP %s: %v", fip.FloatingIP, err)
167168
return err
168169
}
169170

170171
if err = s.waitForFloatingIP(fip.ID, "DOWN"); err != nil {
171-
record.Warnf(openStackCluster, "FailedDisassociateFloatingIP", "Failed to disassociate floating IP: wait for floating IP DOWN: %v", fip.FloatingIP, err)
172+
record.Warnf(eventObject, "FailedDisassociateFloatingIP", "Failed to disassociate floating IP: wait for floating IP DOWN: %v", fip.FloatingIP, err)
172173
return err
173174
}
174175

175-
record.Eventf(openStackCluster, "SuccessfulDisassociateFloatingIP", "Disassociated floating IP %s", fip.FloatingIP)
176+
record.Eventf(eventObject, "SuccessfulDisassociateFloatingIP", "Disassociated floating IP %s", fip.FloatingIP)
176177
return nil
177178
}
178179

pkg/cloud/services/networking/floatingip_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ func Test_GetOrCreateFloatingIP(t *testing.T) {
7777
s := Service{
7878
client: mockClient,
7979
}
80-
got, err := s.GetOrCreateFloatingIP(openStackCluster, "test-cluster", tt.ip)
80+
eventObject := infrav1.OpenStackMachine{}
81+
got, err := s.GetOrCreateFloatingIP(&eventObject, openStackCluster, "test-cluster", tt.ip)
8182
g.Expect(err).ShouldNot(HaveOccurred())
8283
g.Expect(got).To(Equal(tt.want))
8384
})

0 commit comments

Comments
 (0)