Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release-4.12] MGMT-13192: dualstack SNO cluster fails to complete - getting error #4914

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 7 additions & 4 deletions internal/host/hostcommands/install_cmd.go
Expand Up @@ -307,14 +307,14 @@ func appendDHCPArgs(cluster *common.Cluster, host *models.Host, inventory *model
machineNetworkCIDR := network.GetPrimaryMachineCidrForUserManagedNetwork(cluster, log)
if machineNetworkCIDR != "" {
ipv6 := network.IsIPv6CIDR(machineNetworkCIDR)
log.Debugf("Machine network CIDR: %s. IPv6: %t", machineNetworkCIDR, ipv6)

_, network, err := net.ParseCIDR(machineNetworkCIDR)
log.Debugf("Machine network CIDR: %s. IPv6: %t", machineNetworkCIDR, ipv6)
_, ipNet, err := net.ParseCIDR(machineNetworkCIDR)
if err != nil {
return installerArgs, err
}
for _, nic := range inventory.Interfaces {
dhcpArgs, err := getDHCPArgPerNIC(network, nic, ipv6, host.ID, log)
dhcpArgs, err := getDHCPArgPerNIC(ipNet, nic, ipv6, network.CheckIfClusterIsDualStack(cluster), host.ID, log)
if err != nil {
return installerArgs, err
}
Expand All @@ -334,7 +334,7 @@ func appendDHCPArgs(cluster *common.Cluster, host *models.Host, inventory *model
return installerArgs, nil
}

func getDHCPArgPerNIC(network *net.IPNet, nic *models.Interface, ipv6 bool, hostID *strfmt.UUID, log logrus.FieldLogger) ([]string, error) {
func getDHCPArgPerNIC(network *net.IPNet, nic *models.Interface, ipv6 bool, dualStack bool, hostID *strfmt.UUID, log logrus.FieldLogger) ([]string, error) {
args := make([]string, 0)
var addresses []string
var dhcp string
Expand All @@ -350,6 +350,9 @@ func getDHCPArgPerNIC(network *net.IPNet, nic *models.Interface, ipv6 bool, host
return nil, err
}
if found {
if dualStack {
dhcp = "dhcp,dhcp6"
}
log.Debugf("Host %s: Added kernel argument ip=%s:%s", hostID, nic.Name, dhcp)
return append(args, "--append-karg", fmt.Sprintf("ip=%s:%s", nic.Name, dhcp)), nil
}
Expand Down
17 changes: 17 additions & 0 deletions internal/host/hostcommands/install_cmd_test.go
Expand Up @@ -942,6 +942,23 @@ var _ = Describe("construct host install arguments", func() {
Expect(err).NotTo(HaveOccurred())
Expect(args).To(Equal(`["--append-karg","rd.break=cmdline","--append-karg","ip=eth1:dhcp6"]`))
})
It("existing args updated with ip=<nic>:dhcp,dhcp6 dual stuck", func() {
cluster.MachineNetworks = []*models.MachineNetwork{{Cidr: "192.186.10.0/24"}, {Cidr: "2001:db8::/120"}}
host.InstallerArgs = `["--append-karg","rd.break=cmdline"]`
host.Inventory = `{
"interfaces":[
{
"name": "eth1",
"ipv4_addresses":["192.186.10.10/24"],
"ipv6_addresses":["2001:db8::b/120"]
}
]
}`
inventory, _ := common.UnmarshalInventory(host.Inventory)
args, err := constructHostInstallerArgs(cluster, host, inventory, infraEnv, log)
Expect(err).NotTo(HaveOccurred())
Expect(args).To(Equal(`["--append-karg","rd.break=cmdline","--append-karg","ip=eth1:dhcp,dhcp6"]`))
})
It("existing args updated with ip=<nic>:dhcp when machine CIDR is IPv4", func() {
cluster.MachineNetworks = []*models.MachineNetwork{{Cidr: "192.186.10.0/24"}}
host.InstallerArgs = `["--append-karg","rd.break=cmdline"]`
Expand Down