44 "context"
55 "encoding/json"
66 "fmt"
7+ "maps"
78 "net"
89 "reflect"
910 "slices"
@@ -278,7 +279,8 @@ func (c *Controller) handleAddOrUpdateVpc(key string) error {
278279 klog .Errorf ("failed to format vpc %s: %v" , key , err )
279280 return err
280281 }
281- if err = c .createVpcRouter (key ); err != nil {
282+ if err = c .createVpcRouter (key , vpc .Spec .EnableExternal ); err != nil {
283+ klog .Errorf ("failed to create vpc router for vpc %s: %v" , key , err )
282284 return err
283285 }
284286
@@ -1049,7 +1051,7 @@ func (c *Controller) getVpcSubnets(vpc *kubeovnv1.Vpc) (subnets []string, defaul
10491051}
10501052
10511053// createVpcRouter create router to connect logical switches in vpc
1052- func (c * Controller ) createVpcRouter (lr string ) error {
1054+ func (c * Controller ) createVpcRouter (lr string , enableExternal bool ) error {
10531055 if err := c .OVNNbClient .CreateLogicalRouter (lr ); err != nil {
10541056 klog .Errorf ("create logical router %s failed: %v" , lr , err )
10551057 return err
@@ -1061,12 +1063,21 @@ func (c *Controller) createVpcRouter(lr string) error {
10611063 return err
10621064 }
10631065
1064- vpcRouter .Options = map [string ]string {"always_learn_from_arp_request" : "false" , "dynamic_neigh_routers" : "true" , "mac_binding_age_threshold" : "300" }
1065- err = c .OVNNbClient .UpdateLogicalRouter (vpcRouter , & vpcRouter .Options )
1066- if err != nil {
1067- klog .Errorf ("update logical router %s failed: %v" , lr , err )
1068- return err
1066+ lrOptions := map [string ]string {
1067+ "mac_binding_age_threshold" : "300" ,
1068+ "dynamic_neigh_routers" : "true" ,
10691069 }
1070+ if ! enableExternal {
1071+ lrOptions ["always_learn_from_arp_request" ] = "false"
1072+ }
1073+ if ! maps .Equal (vpcRouter .Options , lrOptions ) {
1074+ vpcRouter .Options = lrOptions
1075+ if err = c .OVNNbClient .UpdateLogicalRouter (vpcRouter , & vpcRouter .Options ); err != nil {
1076+ klog .Errorf ("failed to update options of logical router %s: %v" , lr , err )
1077+ return err
1078+ }
1079+ }
1080+
10701081 return nil
10711082}
10721083
0 commit comments