Skip to content

Commit

Permalink
Add bond hash policy
Browse files Browse the repository at this point in the history
  • Loading branch information
shibaPuppy committed Oct 2, 2023
1 parent 277f463 commit 6c4bfdc
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 33 deletions.
7 changes: 7 additions & 0 deletions api/v1alpha5/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,9 @@ func (src *Metal3DataTemplate) ConvertTo(dstRaw conversion.Hub) error {
for k := range dst.Spec.NetworkData.Networks.IPv6 {
dst.Spec.NetworkData.Networks.IPv6[k].FromPoolRef = restored.Spec.NetworkData.Networks.IPv6[k].FromPoolRef
}
for k := range dst.Spec.NetworkData.Links.Bonds {
dst.Spec.NetworkData.Links.Bonds[k].BondXmitHashPolicy = restored.Spec.NetworkData.Links.Bonds[k].BondXmitHashPolicy
}
}

return nil
Expand Down Expand Up @@ -231,6 +234,10 @@ func Convert_v1beta1_FromPool_To_v1alpha5_FromPool(in *v1beta1.FromPool, out *Fr
return autoConvert_v1beta1_FromPool_To_v1alpha5_FromPool(in, out, s)
}

func Convert_v1beta1_NetworkDataLinkBond_To_v1alpha5_NetworkDataLinkBond(in *v1beta1.NetworkDataLinkBond, out *NetworkDataLinkBond, s apiconversion.Scope) error {
return autoConvert_v1beta1_NetworkDataLinkBond_To_v1alpha5_NetworkDataLinkBond(in, out, s)
}

func (src *Metal3DataTemplateList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.Metal3DataTemplateList)
return Convert_v1alpha5_Metal3DataTemplateList_To_v1beta1_Metal3DataTemplateList(src, dst, nil)
Expand Down
40 changes: 28 additions & 12 deletions api/v1alpha5/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions api/v1beta1/metal3datatemplate_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,11 @@ type NetworkDataLinkBond struct {
// balance-rr, active-backup, balance-xor, broadcast, balance-tlb, balance-alb, 802.3ad
BondMode string `json:"bondMode"`

// +kubebuilder:validation:Enum="layer2";"layer3+4";"layer2+3"
// Selects the transmit hash policy used for port selection in balance-xor and 802.3ad modes
// +optional
BondXmitHashPolicy string `json:"bondXmitHashPolicy"`

// Id is the ID of the interface (used for naming)
Id string `json:"id"` //nolint:revive,stylecheck

Expand All @@ -245,6 +250,7 @@ type NetworkDataLinkBond struct {
MACAddress *NetworkLinkEthernetMac `json:"macAddress"`

// BondLinks is the list of links that are part of the bond.
// +optional
BondLinks []string `json:"bondLinks"`
}

Expand Down
23 changes: 12 additions & 11 deletions baremetal/metal3data_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -981,33 +981,34 @@ func renderNetworkServices(services infrav1.NetworkDataService, poolAddresses ma
func renderNetworkLinks(networkLinks infrav1.NetworkDataLink, bmh *bmov1alpha1.BareMetalHost) ([]interface{}, error) {
data := []interface{}{}

// Ethernet links
for _, link := range networkLinks.Ethernets {
// Bond links
for _, link := range networkLinks.Bonds {
macAddress, err := getLinkMacAddress(link.MACAddress, bmh)
if err != nil {
return nil, err
}
data = append(data, map[string]interface{}{
"type": link.Type,
"id": link.Id,
"mtu": link.MTU,
"ethernet_mac_address": macAddress,
"type": "bond",
"id": link.Id,
"mtu": link.MTU,
"ethernet_mac_address": macAddress,
"bond_mode": link.BondMode,
"bond_xmit_hash_policy": link.BondXmitHashPolicy,
"bond_links": link.BondLinks,
})
}

// Bond links
for _, link := range networkLinks.Bonds {
// Ethernet links
for _, link := range networkLinks.Ethernets {
macAddress, err := getLinkMacAddress(link.MACAddress, bmh)
if err != nil {
return nil, err
}
data = append(data, map[string]interface{}{
"type": "bond",
"type": link.Type,
"id": link.Id,
"mtu": link.MTU,
"ethernet_mac_address": macAddress,
"bond_mode": link.BondMode,
"bond_links": link.BondLinks,
})
}

Expand Down
20 changes: 11 additions & 9 deletions baremetal/metal3data_manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2259,9 +2259,10 @@ var _ = Describe("Metal3Data manager", func() {
links: infrav1.NetworkDataLink{
Bonds: []infrav1.NetworkDataLinkBond{
{
BondMode: "802.3ad",
Id: "bond0",
MTU: 1500,
BondMode: "802.3ad",
BondXmitHashPolicy: "layer3+4",
Id: "bond0",
MTU: 1500,
MACAddress: &infrav1.NetworkLinkEthernetMac{
String: pointer.String("XX:XX:XX:XX:XX:XX"),
},
Expand All @@ -2271,12 +2272,13 @@ var _ = Describe("Metal3Data manager", func() {
},
expectedOutput: []interface{}{
map[string]interface{}{
"type": "bond",
"id": "bond0",
"mtu": 1500,
"ethernet_mac_address": "XX:XX:XX:XX:XX:XX",
"bond_mode": "802.3ad",
"bond_links": []string{"eth0"},
"type": "bond",
"id": "bond0",
"mtu": 1500,
"ethernet_mac_address": "XX:XX:XX:XX:XX:XX",
"bond_mode": "802.3ad",
"bond_xmit_hash_policy": "layer3+4",
"bond_links": []string{"eth0"},
},
},
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1196,6 +1196,14 @@ spec:
- balance-alb
- 802.3ad
type: string
bondXmitHashPolicy:
description: Selects the transmit hash policy used for
port selection in balance-xor and 802.3ad modes
enum:
- layer2
- layer3+4
- layer2+3
type: string
id:
description: Id is the ID of the interface (used for
naming)
Expand All @@ -1220,7 +1228,6 @@ spec:
maximum: 9000
type: integer
required:
- bondLinks
- bondMode
- id
- macAddress
Expand Down

0 comments on commit 6c4bfdc

Please sign in to comment.