@@ -94,7 +94,9 @@ func (c *Controller) enqueueUpdateSubnet(old, new interface{}) {
94
94
oldSubnet .Spec .IPv6RAConfigs != newSubnet .Spec .IPv6RAConfigs ||
95
95
oldSubnet .Spec .Protocol != newSubnet .Spec .Protocol ||
96
96
! reflect .DeepEqual (oldSubnet .Spec .Acls , newSubnet .Spec .Acls ) ||
97
- oldSubnet .Spec .U2OInterconnection != newSubnet .Spec .U2OInterconnection {
97
+ oldSubnet .Spec .U2OInterconnection != newSubnet .Spec .U2OInterconnection ||
98
+ (newSubnet .Spec .U2OInterconnection && newSubnet .Spec .U2OInterconnectionIP != "" &&
99
+ oldSubnet .Spec .U2OInterconnectionIP != newSubnet .Spec .U2OInterconnectionIP ) {
98
100
klog .V (3 ).Infof ("enqueue update subnet %s" , key )
99
101
c .addOrUpdateSubnetQueue .Add (key )
100
102
}
@@ -312,6 +314,11 @@ func formatSubnet(subnet *kubeovnv1.Subnet, c *Controller) error {
312
314
}
313
315
}
314
316
}
317
+ if subnet .Spec .U2OInterconnectionIP != "" && ! subnet .Spec .U2OInterconnection {
318
+ subnet .Spec .U2OInterconnectionIP = ""
319
+ changed = true
320
+ }
321
+
315
322
klog .Infof ("format subnet %v, changed %v" , subnet .Name , changed )
316
323
if changed {
317
324
_ , err = c .config .KubeOvnClient .KubeovnV1 ().Subnets ().Update (context .Background (), subnet , metav1.UpdateOptions {})
@@ -1530,14 +1537,29 @@ func (c *Controller) reconcileU2OInterconnectionIP(subnet *kubeovnv1.Subnet) err
1530
1537
klog .Infof ("reconcile underlay subnet %s to overlay interconnection with U2OInterconnection %v U2OInterconnectionIP %s " ,
1531
1538
subnet .Name , subnet .Spec .U2OInterconnection , subnet .Status .U2OInterconnectionIP )
1532
1539
if subnet .Spec .U2OInterconnection {
1533
- if subnet .Status .U2OInterconnectionIP == "" {
1534
- u2oInterconnName := fmt .Sprintf (util .U2OInterconnName , subnet .Spec .Vpc , subnet .Name )
1535
- u2oInterconnLrpName := fmt .Sprintf ("%s-%s" , subnet .Spec .Vpc , subnet .Name )
1536
- v4ip , v6ip , _ , err := c .acquireIpAddress (subnet .Name , u2oInterconnName , u2oInterconnLrpName )
1540
+ u2oInterconnName := fmt .Sprintf (util .U2OInterconnName , subnet .Spec .Vpc , subnet .Name )
1541
+ u2oInterconnLrpName := fmt .Sprintf ("%s-%s" , subnet .Spec .Vpc , subnet .Name )
1542
+ var v4ip , v6ip string
1543
+ var err error
1544
+ if subnet .Spec .U2OInterconnectionIP == "" && subnet .Status .U2OInterconnectionIP == "" {
1545
+ v4ip , v6ip , _ , err = c .acquireIpAddress (subnet .Name , u2oInterconnName , u2oInterconnLrpName )
1537
1546
if err != nil {
1538
1547
klog .Errorf ("failed to acquire underlay to overlay interconnection ip address for subnet %s, %v" , subnet .Name , err )
1539
1548
return err
1540
1549
}
1550
+ } else if subnet .Spec .U2OInterconnectionIP != "" && subnet .Status .U2OInterconnectionIP != subnet .Spec .U2OInterconnectionIP {
1551
+ if subnet .Status .U2OInterconnectionIP != "" {
1552
+ c .ipam .ReleaseAddressByPod (u2oInterconnName )
1553
+ }
1554
+
1555
+ v4ip , v6ip , _ , err = c .acquireStaticIpAddress (subnet .Name , u2oInterconnName , u2oInterconnLrpName , subnet .Spec .U2OInterconnectionIP )
1556
+ if err != nil {
1557
+ klog .Errorf ("failed to acquire static underlay to overlay interconnection ip address for subnet %s, %v" , subnet .Name , err )
1558
+ return err
1559
+ }
1560
+ }
1561
+
1562
+ if v4ip != "" || v6ip != "" {
1541
1563
switch subnet .Spec .Protocol {
1542
1564
case kubeovnv1 .ProtocolIPv4 :
1543
1565
subnet .Status .U2OInterconnectionIP = v4ip
0 commit comments