Skip to content

Commit 9c991b5

Browse files
authored
Fix flapping IPs in NetworkInterface status (#1163)
* fix flapping IPs in NetworkInterface status * incorporating review comments * incorporating review comments
1 parent 3cb61f2 commit 9c991b5

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

poollet/machinepoollet/controllers/controllers_suite_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ var (
5454
const (
5555
eventuallyTimeout = 3 * time.Second
5656
pollingInterval = 50 * time.Millisecond
57-
consistentlyDuration = 1 * time.Second
57+
consistentlyDuration = 3 * time.Second
5858
apiServiceTimeout = 5 * time.Minute
5959

6060
controllerManagerService = "controller-manager"

poollet/machinepoollet/controllers/machine_controller.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"context"
88
"errors"
99
"fmt"
10+
"slices"
1011
"strconv"
1112
"time"
1213

@@ -542,17 +543,20 @@ func (r *MachineReconciler) updateNetworkInterfaceStatusFromIRIStatus(
542543
return nil // nothing to do
543544
}
544545

545-
nicBase := nic.DeepCopy()
546-
nic.Status.IPs = commonv1alpha1.MustParseIPs(iriNicStatus.Ips...)
547-
nic.Status.LastStateTransitionTime = &metav1.Time{Time: time.Now()}
548546
nicState, ok := iriNetworkInterfaceStateToNetworkInterfaceState[iriNicStatus.State]
549547
if !ok {
550548
return fmt.Errorf("encountered unknown network interface state %s", iriNicStatus.State)
551549
}
552-
nic.Status.State = nicState
553550

554-
if err := r.Status().Patch(ctx, nic, client.MergeFrom(nicBase)); err != nil {
555-
return fmt.Errorf("failed to patch network interface status: %w", err)
551+
nicBase := nic.DeepCopy()
552+
if nicBase.Status.State != nicState || !slices.Equal(nic.Status.IPs, commonv1alpha1.MustParseIPs(iriNicStatus.Ips...)) {
553+
nic.Status.LastStateTransitionTime = &metav1.Time{Time: time.Now()}
554+
nic.Status.IPs = commonv1alpha1.MustParseIPs(iriNicStatus.Ips...)
555+
nic.Status.State = nicState
556+
557+
if err := r.Status().Patch(ctx, nic, client.MergeFrom(nicBase)); err != nil {
558+
return fmt.Errorf("failed to patch network interface status: %w", err)
559+
}
556560
}
557561

558562
return nil

poollet/machinepoollet/controllers/machine_controller_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,6 @@ var _ = Describe("MachineController", func() {
300300
}
301301
srv.SetMachines([]*testingmachine.FakeMachine{iriMachine})
302302

303-
By("waiting for the ironcore network interface to have a provider id set")
304303
Eventually(Object(nic)).Should(And(
305304
HaveField("Spec.ProviderID", Equal("primary-handle")),
306305
HaveField("Status", MatchFields(IgnoreExtras, Fields{
@@ -309,6 +308,13 @@ var _ = Describe("MachineController", func() {
309308
})),
310309
))
311310

311+
Consistently(Object(nic)).Should(
312+
HaveField("Status", MatchFields(IgnoreExtras, Fields{
313+
"State": Equal(networkingv1alpha1.NetworkInterfaceStateAvailable),
314+
"IPs": ContainElement(commonv1alpha1.MustParseIP("10.0.0.1")),
315+
})),
316+
)
317+
312318
By("ensuring the ironcore machine status networkInterfaces to have correct NetworkInterfaceRef")
313319
Eventually(Object(machine)).Should(HaveField("Status.NetworkInterfaces", ConsistOf(MatchFields(IgnoreExtras, Fields{
314320
"Name": Equal("primary"),

0 commit comments

Comments
 (0)