fix: deploy ipv6 scripts fixes (#22900)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2025-07-15 18:59:42 +08:00
committed by GitHub
parent 42e58b4996
commit 3e5e6e175c
5 changed files with 99 additions and 61 deletions
+77 -43
View File
@@ -464,6 +464,28 @@ func (l *sLinuxRootFs) DeployNetworkingScripts(rootFs IDiskPartition, nics []*ty
log.Errorf("rootFs.GenerateSshHostKeys fail %s", err)
}
}
// force dhclient for NetworkManager
{
err := forceNetworkManagerDhclient(rootFs)
if err != nil {
log.Errorf("force NetworkManager dhclient fail %s", err)
}
}
return nil
}
func forceNetworkManagerDhclient(rootFs IDiskPartition) error {
const nmConfPath = "/etc/NetworkManager/conf.d"
if !rootFs.Exists(nmConfPath, false) {
return nil
}
dhcpConfPath := path.Join(nmConfPath, "dhcp-client.conf")
content := `[main]
dhcp=dhclient
`
if err := rootFs.FilePutContents(dhcpConfPath, content, false, false); err != nil {
return errors.Wrapf(err, "write %s fail", dhcpConfPath)
}
return nil
}
@@ -1034,23 +1056,16 @@ func (d *sDebianLikeRootFs) DeployNetworkingScripts(rootFs IDiskPartition, nics
} else {
if len(nicDesc.Ip) > 0 {
cmds.WriteString(fmt.Sprintf("iface %s inet dhcp\n", nicDesc.Name))
}
if len(nicDesc.Ip6) > 0 {
cmds.WriteString(fmt.Sprintf("iface %s inet6 dhcp\n", nicDesc.Name))
}
if len(nicDesc.Ip) > 0 || len(nicDesc.Ip6) > 0 {
if len(nicDesc.TeamingSlaves) > 0 {
cmds.WriteString(getNicTeamingConfigCmds(nicDesc.TeamingSlaves))
}
cmds.WriteString("\n")
}
if len(nicDesc.Ip6) > 0 {
// ipv6 support static temporarily
// TODO
cmds.WriteString(fmt.Sprintf("iface %s inet6 static\n", nicDesc.Name))
cmds.WriteString(fmt.Sprintf(" address %s\n", nicDesc.Ip6))
cmds.WriteString(fmt.Sprintf(" netmask %d\n", nicDesc.Masklen6))
if len(nicDesc.Gateway6) > 0 && nicDesc.Ip == mainIp {
cmds.WriteString(fmt.Sprintf(" gateway %s\n", nicDesc.Gateway6))
}
cmds.WriteString("\n")
}
}
}
@@ -1496,11 +1511,20 @@ func (r *sRedhatLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics
cmds.WriteString("IPADDR=")
cmds.WriteString(nicDesc.Ip)
cmds.WriteString("\n")
if len(nicDesc.Gateway) > 0 && nicDesc.Ip == mainIp {
cmds.WriteString("GATEWAY=")
cmds.WriteString(nicDesc.Gateway)
cmds.WriteString("\n")
}
}
if len(nicDesc.Gateway) > 0 && nicDesc.Ip == mainIp {
cmds.WriteString("GATEWAY=")
cmds.WriteString(nicDesc.Gateway)
cmds.WriteString("\n")
if len(nicDesc.Ip6) > 0 {
cmds.WriteString("IPV6INIT=yes\n")
cmds.WriteString("DHCPV6C=no\n")
cmds.WriteString("IPV6_AUTOCONF=no\n")
cmds.WriteString(fmt.Sprintf("IPV6ADDR=%s/%d\n", nicDesc.Ip6, nicDesc.Masklen6))
if len(nicDesc.Gateway6) > 0 && nicDesc.Ip6 == mainIp6 {
cmds.WriteString(fmt.Sprintf("IPV6_DEFAULTGW=%s\n", nicDesc.Gateway6))
}
}
routes4 := make([]netutils2.SRouteInfo, 0)
routes6 := make([]netutils2.SRouteInfo, 0)
@@ -1514,6 +1538,14 @@ func (r *sRedhatLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics
rtbl.WriteString(nicDesc.Name)
rtbl.WriteString("\n")
}
for _, r := range routes6 {
rtbl.WriteString(fmt.Sprintf("%s/%d", r.Prefix, r.PrefixLen))
rtbl.WriteString(" via ")
rtbl.WriteString(r.Gateway.String())
rtbl.WriteString(" dev ")
rtbl.WriteString(nicDesc.Name)
rtbl.WriteString("\n")
}
rtblStr := rtbl.String()
if len(rtblStr) > 0 {
var fn = fmt.Sprintf("%s/route-%s", scriptPath, nicDesc.Name)
@@ -1531,16 +1563,6 @@ func (r *sRedhatLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics
}
}
}
if len(nicDesc.Ip6) > 0 {
cmds.WriteString("IPV6INIT=yes\n")
cmds.WriteString("DHCPV6C=no\n")
cmds.WriteString("IPV6_AUTOCONF=no\n")
cmds.WriteString(fmt.Sprintf("IPV6ADDR=%s/%d\n", nicDesc.Ip6, nicDesc.Masklen6))
if len(nicDesc.Gateway6) > 0 {
cmds.WriteString(fmt.Sprintf("IPV6_DEFAULTGW=%s\n", nicDesc.Gateway6))
}
}
}
} else {
if len(nicDesc.Ip) > 0 {
@@ -1548,15 +1570,9 @@ func (r *sRedhatLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics
}
if len(nicDesc.Ip6) > 0 {
// IPv6 support static temporarily
// TODO
cmds.WriteString("IPV6INIT=yes\n")
cmds.WriteString("DHCPV6C=yes\n")
cmds.WriteString("IPV6_AUTOCONF=yes\n")
cmds.WriteString(fmt.Sprintf("IPV6ADDR=%s/%d\n", nicDesc.Ip6, nicDesc.Masklen6))
if len(nicDesc.Gateway6) > 0 {
cmds.WriteString("IPV6_DEFROUTE=yes\n")
}
}
}
var fn = fmt.Sprintf("%s/ifcfg-%s", scriptPath, nicDesc.Name)
@@ -1586,18 +1602,28 @@ func (r *sRedhatLikeRootFs) deployVlanNetworkingScripts(rootFs IDiskPartition, s
if nicDesc.Mtu > 0 {
cmds.WriteString(fmt.Sprintf("MTU=%d\n", nicDesc.Mtu))
}
netmask := netutils2.Netlen2Mask(int(nicDesc.Masklen))
cmds.WriteString("NETMASK=")
cmds.WriteString(netmask)
cmds.WriteString("\n")
cmds.WriteString("IPADDR=")
cmds.WriteString(nicDesc.Ip)
cmds.WriteString("\n")
if len(nicDesc.Gateway) > 0 && nicDesc.Ip == mainIp {
cmds.WriteString("GATEWAY=")
cmds.WriteString(nicDesc.Gateway)
if len(nicDesc.Ip) > 0 {
netmask := netutils2.Netlen2Mask(int(nicDesc.Masklen))
cmds.WriteString("NETMASK=")
cmds.WriteString(netmask)
cmds.WriteString("\n")
cmds.WriteString("IPADDR=")
cmds.WriteString(nicDesc.Ip)
cmds.WriteString("\n")
if len(nicDesc.Gateway) > 0 && nicDesc.Ip == mainIp {
cmds.WriteString("GATEWAY=")
cmds.WriteString(nicDesc.Gateway)
cmds.WriteString("\n")
}
}
if len(nicDesc.Ip6) > 0 {
cmds.WriteString("IPV6INIT=yes\n")
cmds.WriteString("DHCPV6C=no\n")
cmds.WriteString("IPV6_AUTOCONF=no\n")
cmds.WriteString(fmt.Sprintf("IPV6ADDR=%s/%d\n", nicDesc.Ip6, nicDesc.Masklen6))
if len(nicDesc.Gateway6) > 0 && nicDesc.Ip6 == mainIp6 {
cmds.WriteString(fmt.Sprintf("IPV6_DEFAULTGW=%s\n", nicDesc.Gateway6))
}
}
routes4 := make([]netutils2.SRouteInfo, 0)
routes6 := make([]netutils2.SRouteInfo, 0)
@@ -1611,6 +1637,14 @@ func (r *sRedhatLikeRootFs) deployVlanNetworkingScripts(rootFs IDiskPartition, s
rtbl.WriteString(fmt.Sprintf("%s.%d", nicDesc.Name, nicDesc.Vlan))
rtbl.WriteString("\n")
}
for _, r := range routes6 {
rtbl.WriteString(fmt.Sprintf("%s/%d", r.Prefix, r.PrefixLen))
rtbl.WriteString(" via ")
rtbl.WriteString(r.Gateway.String())
rtbl.WriteString(" dev ")
rtbl.WriteString(fmt.Sprintf("%s.%d", nicDesc.Name, nicDesc.Vlan))
rtbl.WriteString("\n")
}
rtblStr := rtbl.String()
if len(rtblStr) > 0 {
var fn = fmt.Sprintf("%s/route-%s", scriptPath, nicDesc.Name)
+4 -1
View File
@@ -156,7 +156,10 @@ func getNetplanEthernetConfig(nic *types.SServerNic, isBond bool, mainIp, mainIp
}
} else {
// dhcp
nicConf = netplan.NewDHCP4EthernetConfig()
nicConf = netplan.NewDHCPEthernetConfig()
if len(nic.Ip) > 0 {
nicConf.EnableDHCP4()
}
if len(nic.Ip6) > 0 {
nicConf.EnableDHCP6()
}
+7 -10
View File
@@ -297,18 +297,15 @@ func (r *sSuseLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics []
} else {
cmds.WriteString("STARTMODE=auto\n")
if len(nicDesc.Ip) > 0 {
if len(nicDesc.Ip) > 0 && len(nicDesc.Ip6) == 0 {
cmds.WriteString("BOOTPROTO=dhcp4\n")
} else if len(nicDesc.Ip) == 0 && len(nicDesc.Ip6) > 0 {
cmds.WriteString("BOOTPROTO=dhcp6\n")
} else if len(nicDesc.Ip) > 0 && len(nicDesc.Ip6) > 0 {
cmds.WriteString("BOOTPROTO=dhcp\n")
} else {
cmds.WriteString("BOOTPROTO=none\n")
}
if len(nicDesc.Ip6) > 0 {
// IPv6 support static temporarily
// TODO
cmds.WriteString("IPV6INIT=yes\n")
cmds.WriteString("IPV6_AUTOCONF=no\n")
cmds.WriteString(fmt.Sprintf("IPADDR_V6=%s/%d\n", nicDesc.Ip6, nicDesc.Masklen6))
}
}
var fn = fmt.Sprintf("/etc/sysconfig/network/ifcfg-%s", nicDesc.Name)
log.Debugf("%s: %s", fn, cmds.String())
+9 -5
View File
@@ -199,15 +199,19 @@ func (n *Network) YAMLString() string {
return toYAMLString(n)
}
func NewDHCP4EthernetConfig() *EthernetConfig {
return &EthernetConfig{
DHCP4: true,
}
func NewDHCPEthernetConfig() *EthernetConfig {
return &EthernetConfig{}
}
func (c *EthernetConfig) EnableDHCP6() {
func (c *EthernetConfig) EnableDHCP4() *EthernetConfig {
c.DHCP4 = true
return c
}
func (c *EthernetConfig) EnableDHCP6() *EthernetConfig {
c.DHCP6 = true
c.AcceptRa = true
return c
}
func NewStaticEthernetConfig(
+2 -2
View File
@@ -21,7 +21,7 @@ import (
)
func TestNewEthernetConfig(t *testing.T) {
c := NewDHCP4EthernetConfig()
c := NewDHCPEthernetConfig().EnableDHCP4()
assert := assert.New(t)
assert.YAMLEq("dhcp4: true", c.YAMLString())
@@ -72,7 +72,7 @@ parameters:
func TestNewNetwork(t *testing.T) {
n := NewNetwork()
n.AddEthernet("eth0", NewDHCP4EthernetConfig())
n.AddEthernet("eth0", NewDHCPEthernetConfig().EnableDHCP4())
n.AddEthernet("eth1", NewStaticEthernetConfig(
"10.10.10.2/24",
"",