Skip to content

Commit

Permalink
Record event when EgressIP remains unassigned
Browse files Browse the repository at this point in the history
Modified the code to record an event for case, when an egressIP is
unassigned from a node and is not assigned to any other node.

Signed-off-by: Pulkit Jain <jainpu@vmware.com>
  • Loading branch information
Pulkit Jain committed Mar 18, 2024
1 parent bc54253 commit 13c4377
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
12 changes: 8 additions & 4 deletions pkg/agent/controller/egress/egress_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -1002,7 +1002,7 @@ func (c *EgressController) syncEgress(egressName string) error {
if !exist {
return nil
}
if err := c.uninstallEgress(egressName, eState); err != nil {
if err := c.uninstallEgress(egressName, eState, egress); err != nil {
return err
}
return nil
Expand Down Expand Up @@ -1030,7 +1030,7 @@ func (c *EgressController) syncEgress(egressName string) error {
eState, exist := c.getEgressState(egressName)
// If the EgressIP changes, uninstalls this Egress first.
if exist && eState.egressIP != desiredEgressIP {
if err := c.uninstallEgress(egressName, eState); err != nil {
if err := c.uninstallEgress(egressName, eState, egress); err != nil {
return err
}
exist = false
Expand Down Expand Up @@ -1153,7 +1153,7 @@ func (c *EgressController) syncEgress(egressName string) error {
return nil
}

func (c *EgressController) uninstallEgress(egressName string, eState *egressState) error {
func (c *EgressController) uninstallEgress(egressName string, eState *egressState, egress *crdv1b1.Egress) error {
// Uninstall all of its Pod flows.
if err := c.uninstallPodFlows(egressName, eState, eState.ofPorts, eState.pods); err != nil {
return err
Expand All @@ -1169,9 +1169,13 @@ func (c *EgressController) uninstallEgress(egressName string, eState *egressStat
}
}
// Unassign the Egress IP from the local Node if it was assigned by the agent.
if _, err := c.ipAssigner.UnassignIP(eState.egressIP); err != nil {
unassigned, err := c.ipAssigner.UnassignIP(eState.egressIP)
if err != nil {
return err
}
if unassigned && egress != nil {
c.record.Eventf(egress, corev1.EventTypeNormal, "IPUnassigned", "Unassigned Egress %s with IP %s from Node %s", egressName, eState.egressIP, c.nodeName)
}
// Remove the Egress's state.
c.deleteEgressState(egressName)
return nil
Expand Down
12 changes: 12 additions & 0 deletions test/e2e/egress_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,18 @@ func testEgressUpdateEgressIP(t *testing.T, data *TestData) {
return err
})
require.NoError(t, err, "Failed to update Egress")
// Testing the events recorded during creation of an Egress resource.
expectedMessage := fmt.Sprintf("Unassigned Egress %s with IP %s from Node %v", egress.Name, tt.originalEgressIP, egress.Status.EgressNode)
assert.EventuallyWithT(t, func(c *assert.CollectT) {
events, err := data.clientset.CoreV1().Events("").Search(scheme.Scheme, egress)
assert.NoError(c, err)
recordedMessages := []string{}
for _, items := range events.Items {
recordedMessages = append(recordedMessages, items.Message)
}

assert.Contains(c, recordedMessages, expectedMessage)
}, 2*time.Second, 200*time.Millisecond)

_, err = data.checkEgressState(egress.Name, tt.newEgressIP, tt.newNode, "", time.Second)
require.NoError(t, err)
Expand Down

0 comments on commit 13c4377

Please sign in to comment.