Skip to content

Commit

Permalink
intial chages for network peering prefix changes in metalnetlet
Browse files Browse the repository at this point in the history
  • Loading branch information
ushabelgur authored and kasabe28 committed Jul 4, 2024
1 parent de7ad8c commit a70b839
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
3 changes: 3 additions & 0 deletions api/core/v1alpha1/network_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package v1alpha1

import (
"github.com/ironcore-dev/ironcore-net/apimachinery/api/net"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

Expand All @@ -20,6 +21,8 @@ type NetworkPeering struct {
Name string `json:"name"`
// ID is the ID of the network to peer with.
ID string `json:"id"`
// Prefixes is a list of CIDRs that we want only to be exposed to the peered network, if no prefixes are specified no filtering will be done.
Prefixes *[]net.IPPrefix `json:"prefixes,omitempty"`
}

type NetworkStatus struct {
Expand Down
9 changes: 9 additions & 0 deletions metalnetlet/controllers/network_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,23 @@ func (r *NetworkReconciler) reconcile(ctx context.Context, log logr.Logger, netw
},
}

peeredPrefixes := []metalnetv1alpha1.PeeredPrefix{}
for _, peering := range network.Spec.Peerings {
id, err := networkid.ParseVNI(peering.ID)
if err != nil {
return ctrl.Result{}, fmt.Errorf("failed to parse peered network ID: %w", err)
}

metalnetNetwork.Spec.PeeredIDs = append(metalnetNetwork.Spec.PeeredIDs, id)
if peering.Prefixes != nil && len(*peering.Prefixes) > 0 {
peeredPrefix := metalnetv1alpha1.PeeredPrefix{
ID: int32(id),
Prefixes: ipPrefixesToMetalnetPrefixes(*peering.Prefixes),
}
peeredPrefixes = append(peeredPrefixes, peeredPrefix)
}
}
metalnetNetwork.Spec.PeeredPrefixes = peeredPrefixes

if err := r.MetalnetClient.Patch(ctx, metalnetNetwork, client.Apply, MetalnetFieldOwner, client.ForceOwnership); err != nil {
return ctrl.Result{}, fmt.Errorf("error applying network: %w", err)
Expand Down
13 changes: 10 additions & 3 deletions metalnetlet/controllers/network_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package controllers

import (
apinetv1alpha1 "github.com/ironcore-dev/ironcore-net/api/core/v1alpha1"
"github.com/ironcore-dev/ironcore-net/apimachinery/api/net"
"github.com/ironcore-dev/ironcore-net/networkid"
. "github.com/ironcore-dev/ironcore/utils/testing"
metalnetv1alpha1 "github.com/ironcore-dev/metalnet/api/v1alpha1"
Expand Down Expand Up @@ -43,8 +44,9 @@ var _ = Describe("NetworkController", func() {
By("updating apinet networks spec with peerings")
baseNetwork1 := network1.DeepCopy()
network1.Spec.Peerings = []apinetv1alpha1.NetworkPeering{{
Name: "peering-1",
ID: network2.Spec.ID}}
Name: "peering-1",
Prefixes: &[]net.IPPrefix{net.MustParseIPPrefix("10.0.0.0/24")},
ID: network2.Spec.ID}}
Expect(k8sClient.Patch(ctx, network1, client.MergeFrom(baseNetwork1))).To(Succeed())

baseNetwork2 := network2.DeepCopy()
Expand All @@ -70,7 +72,12 @@ var _ = Describe("NetworkController", func() {
}
Eventually(Object(metalnetNetwork1)).Should(SatisfyAll(
HaveField("Spec", metalnetv1alpha1.NetworkSpec{
ID: network1Vni,
ID: network1Vni,
PeeredPrefixes: []metalnetv1alpha1.PeeredPrefix{
{
ID: network2Vni,
Prefixes: []metalnetv1alpha1.IPPrefix{metalnetv1alpha1.MustParseIPPrefix("10.0.0.0/24")}, // Add desired IPPrefixes here
}},
PeeredIDs: []int32{network2Vni},
}),
))
Expand Down

0 comments on commit a70b839

Please sign in to comment.