fix: network manager keyfile static routes (#23480)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2025-10-08 13:18:34 +08:00
committed by GitHub
parent 55e586121d
commit 7fe4ac72fe
3 changed files with 36 additions and 12 deletions
+8 -4
View File
@@ -1460,17 +1460,21 @@ func (r *sRedhatLikeRootFs) deployNetworkManagerConfigurations(rootFs IDiskParti
return errors.Wrap(err, "enableBondingModule")
}
}
// nicCnt := len(allNics) - len(bondNics)
nicCnt := len(allNics) - len(bondNics)
mainNic := getMainNic(allNics)
var mainIp, mainIp6 string
var mainIp string
if mainNic != nil {
mainIp = mainNic.Ip
mainIp6 = mainNic.Ip6
}
mainNic6 := getMainNic6(allNics)
var mainIp6 string
if mainNic6 != nil {
mainIp6 = mainNic6.Ip6
}
for i := range allNics {
nicDesc := allNics[i]
profile := nicDescToNetworkManager(nicDesc, mainIp, mainIp6)
profile := nicDescToNetworkManager(nicDesc, mainIp, mainIp6, nicCnt)
var fn = fmt.Sprintf("%s/%s.nmconnection", scriptPath, nicDesc.Name)
if err := rootFs.FilePutContents(fn, profile, false, false); err != nil {
return err
+25 -7
View File
@@ -24,7 +24,7 @@ import (
"yunion.io/x/onecloud/pkg/util/stringutils2"
)
func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 string) string {
func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 string, nicCnt int) string {
var profile strings.Builder
profile.WriteString("[connection]\n")
@@ -57,12 +57,6 @@ func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 s
if len(nicDesc.Mac) > 0 && nicDesc.NicType != api.NIC_TYPE_INFINIBAND {
profile.WriteString("[ethernet]\n")
if len(nicDesc.TeamingSlaves) == 0 {
// only real physical nic can set HWADDR
// cmds.WriteString("HWADDR=")
// cmds.WriteString(nicDesc.Mac)
// cmds.WriteString("\n")
}
profile.WriteString(fmt.Sprintf("mac-address=%s\n", nicDesc.Mac))
if nicDesc.Mtu > 0 {
profile.WriteString(fmt.Sprintf("mtu=%d\n", nicDesc.Mtu))
@@ -83,6 +77,10 @@ func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 s
profile.WriteString(fmt.Sprintf("address1=%s/32\n", netutils2.PSEUDO_VIP))
profile.WriteString("\n")
} else if nicDesc.Manual {
routes4 := make([]netutils2.SRouteInfo, 0)
routes6 := make([]netutils2.SRouteInfo, 0)
routes4, routes6 = netutils2.AddNicRoutes(routes4, routes6, nicDesc, mainIp, mainIp6, nicCnt)
// manual interface
if len(nicDesc.Ip) > 0 {
profile.WriteString("[ipv4]\n")
@@ -91,10 +89,20 @@ func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 s
if len(nicDesc.Gateway) > 0 && nicDesc.Ip == mainIp {
profile.WriteString(fmt.Sprintf("gateway=%s\n", nicDesc.Gateway))
}
// dns
dnslist, _ := netutils2.GetNicDns(nicDesc)
if len(dnslist) > 0 {
profile.WriteString(fmt.Sprintf("dns=%s\n", strings.Join(dnslist, ",")))
}
// static routes
for i := range routes4 {
gwstr := routes4[i].Gateway.String()
if gwstr == "0.0.0.0" {
profile.WriteString(fmt.Sprintf("route%d=%s\n", i+1, routes4[i].SPrefixInfo.String()))
} else {
profile.WriteString(fmt.Sprintf("route%d=%s,%s\n", i+1, routes4[i].SPrefixInfo.String(), gwstr))
}
}
profile.WriteString("\n")
}
if len(nicDesc.Ip6) > 0 {
@@ -104,10 +112,20 @@ func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 s
if len(nicDesc.Gateway6) > 0 && nicDesc.Ip6 == mainIp6 {
profile.WriteString(fmt.Sprintf("gateway=%s\n", nicDesc.Gateway6))
}
// dns
_, dns6list := netutils2.GetNicDns(nicDesc)
if len(dns6list) > 0 {
profile.WriteString(fmt.Sprintf("dns=%s\n", strings.Join(dns6list, ",")))
}
// static routes
for i := range routes6 {
gwstr := routes6[i].Gateway.String()
if gwstr == "::" {
profile.WriteString(fmt.Sprintf("route%d=%s\n", i+1, routes6[i].SPrefixInfo.String()))
} else {
profile.WriteString(fmt.Sprintf("route%d=%s,%s\n", i+1, routes6[i].SPrefixInfo.String(), gwstr))
}
}
profile.WriteString("\n")
}
} else {
@@ -89,11 +89,13 @@ mac-address=00:22:0a:0b:0c:0d
method=manual
address1=192.168.1.100/24
gateway=192.168.1.1
route1=169.254.169.254/32
[ipv6]
method=manual
address1=2001:db8::200/64
gateway=2001:db8::1
route1=fd00:ec2::254/128
`,
},
@@ -220,7 +222,7 @@ method=disabled
}
for _, c := range cases {
got := nicDescToNetworkManager(c.nicDesc, c.mainIp, c.mainIp6)
got := nicDescToNetworkManager(c.nicDesc, c.mainIp, c.mainIp6, 1)
if got != c.want {
t.Errorf("[[got]]\n%s\n[[want]]\n%s\n[[end]]", got, c.want)
}