55 "encoding/json"
66 "errors"
77 "fmt"
8+ "maps"
89 "net"
910 "reflect"
1011 "slices"
@@ -277,7 +278,7 @@ func (c *Controller) handleAddOrUpdateVpc(key string) error {
277278 klog .Errorf ("failed to format vpc %s: %v" , key , err )
278279 return err
279280 }
280- if err = c .createVpcRouter (key ); err != nil {
281+ if err = c .createVpcRouter (key , vpc . Spec . EnableExternal ); err != nil {
281282 klog .Errorf ("failed to create vpc router for vpc %s: %v" , key , err )
282283 return err
283284 }
@@ -1002,7 +1003,7 @@ func (c *Controller) getVpcSubnets(vpc *kubeovnv1.Vpc) (subnets []string, defaul
10021003}
10031004
10041005// createVpcRouter create router to connect logical switches in vpc
1005- func (c * Controller ) createVpcRouter (lr string ) error {
1006+ func (c * Controller ) createVpcRouter (lr string , enableExternal bool ) error {
10061007 if err := c .OVNNbClient .CreateLogicalRouter (lr ); err != nil {
10071008 klog .Errorf ("create logical router %s failed: %v" , lr , err )
10081009 return err
@@ -1014,12 +1015,21 @@ func (c *Controller) createVpcRouter(lr string) error {
10141015 return err
10151016 }
10161017
1017- vpcRouter .Options = map [string ]string {"always_learn_from_arp_request" : "false" , "dynamic_neigh_routers" : "true" , "mac_binding_age_threshold" : "300" }
1018- err = c .OVNNbClient .UpdateLogicalRouter (vpcRouter , & vpcRouter .Options )
1019- if err != nil {
1020- klog .Errorf ("update logical router %s failed: %v" , lr , err )
1021- return err
1018+ lrOptions := map [string ]string {
1019+ "mac_binding_age_threshold" : "300" ,
1020+ "dynamic_neigh_routers" : "true" ,
10221021 }
1022+ if ! enableExternal {
1023+ lrOptions ["always_learn_from_arp_request" ] = "false"
1024+ }
1025+ if ! maps .Equal (vpcRouter .Options , lrOptions ) {
1026+ vpcRouter .Options = lrOptions
1027+ if err = c .OVNNbClient .UpdateLogicalRouter (vpcRouter , & vpcRouter .Options ); err != nil {
1028+ klog .Errorf ("failed to update options of logical router %s: %v" , lr , err )
1029+ return err
1030+ }
1031+ }
1032+
10231033 return nil
10241034}
10251035
0 commit comments