Skip to content

Commit 1ca2a35

Browse files
committed
Implement network peering propagation
1 parent 00862ad commit 1ca2a35

File tree

4 files changed

+73
-29
lines changed

4 files changed

+73
-29
lines changed

apinetlet/controllers/network_controller.go

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
corev1 "k8s.io/api/core/v1"
2929
apierrors "k8s.io/apimachinery/pkg/api/errors"
3030
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
31+
"k8s.io/apimachinery/pkg/util/sets"
3132
"k8s.io/utils/pointer"
3233
ctrl "sigs.k8s.io/controller-runtime"
3334
"sigs.k8s.io/controller-runtime/pkg/builder"
@@ -205,6 +206,21 @@ func isAPINetNetworkAllocated(apiNetNetwork *onmetalapinetv1alpha1.Network) bool
205206
}
206207

207208
func (r *NetworkReconciler) applyAPINetNetwork(ctx context.Context, log logr.Logger, network *networkingv1alpha1.Network) (*int32, error) {
209+
var vni *int32
210+
if handle := network.Spec.Handle; handle != "" {
211+
v, err := strconv.ParseInt(handle, 10, 32)
212+
if err != nil {
213+
return nil, fmt.Errorf("error parsing network handle %s: %w", handle, err)
214+
}
215+
216+
vni = pointer.Int32(int32(v))
217+
}
218+
219+
peerVNIs, err := r.extractPeerVNIs(network)
220+
if err != nil {
221+
return nil, err
222+
}
223+
208224
apiNetNetwork := &onmetalapinetv1alpha1.Network{
209225
TypeMeta: metav1.TypeMeta{
210226
APIVersion: onmetalapinetv1alpha1.GroupVersion.String(),
@@ -219,15 +235,10 @@ func (r *NetworkReconciler) applyAPINetNetwork(ctx context.Context, log logr.Log
219235
apinetletv1alpha1.NetworkUIDLabel: string(network.UID),
220236
},
221237
},
222-
}
223-
224-
if handle := network.Spec.Handle; handle != "" {
225-
vni, err := strconv.ParseInt(handle, 10, 32)
226-
if err != nil {
227-
return nil, fmt.Errorf("error parsing network handle %s: %w", handle, err)
228-
}
229-
230-
apiNetNetwork.Spec.VNI = pointer.Int32(int32(vni))
238+
Spec: onmetalapinetv1alpha1.NetworkSpec{
239+
VNI: vni,
240+
PeerVNIs: peerVNIs,
241+
},
231242
}
232243

233244
log.V(1).Info("Applying apinet network")
@@ -245,6 +256,24 @@ func (r *NetworkReconciler) applyAPINetNetwork(ctx context.Context, log logr.Log
245256
return apiNetNetwork.Spec.VNI, nil
246257
}
247258

259+
func (r *NetworkReconciler) extractPeerVNIs(network *networkingv1alpha1.Network) ([]int32, error) {
260+
peerVNIs := sets.New[int32]()
261+
for _, peering := range network.Status.Peerings {
262+
if peering.Phase != networkingv1alpha1.NetworkPeeringPhaseBound {
263+
continue
264+
}
265+
266+
peerVNI, err := strconv.ParseInt(peering.NetworkHandle, 10, 32)
267+
if err != nil {
268+
return nil, fmt.Errorf("invalid peer network handle %q: %w", peering.NetworkHandle, err)
269+
}
270+
271+
peerVNIs.Insert(int32(peerVNI))
272+
}
273+
274+
return sets.List(peerVNIs), nil
275+
}
276+
248277
var apiNetNetworkAllocationChanged = predicate.Funcs{
249278
UpdateFunc: func(event event.UpdateEvent) bool {
250279
oldAPINetNetwork, newAPINetNetwork := event.ObjectOld.(*onmetalapinetv1alpha1.Network), event.ObjectNew.(*onmetalapinetv1alpha1.Network)

apinetlet/controllers/network_controller_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,21 @@ var _ = Describe("NetworkController", func() {
9090
HaveField("Status.State", Equal(networkingv1alpha1.NetworkStateAvailable)),
9191
))
9292

93+
By("adding a peering status to the network")
94+
baseNetwork := network.DeepCopy()
95+
network.Status.Peerings = []networkingv1alpha1.NetworkPeeringStatus{
96+
{
97+
Name: "my-peering",
98+
Phase: networkingv1alpha1.NetworkPeeringPhaseBound,
99+
NetworkHandle: "400",
100+
},
101+
}
102+
Expect(k8sClient.Status().Patch(ctx, network, client.MergeFrom(baseNetwork))).To(Succeed())
103+
104+
By("waiting for the apinet network to report the peered vni")
105+
Eventually(Object(apiNetNetwork)).
106+
Should(HaveField("Spec.PeerVNIs", []int32{400}))
107+
93108
By("deleting the network")
94109
Expect(k8sClient.Delete(ctx, network)).To(Succeed())
95110

go.mod

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ module github.com/onmetal/onmetal-api-net
33
go 1.20
44

55
require (
6-
github.com/go-logr/logr v1.2.3
6+
github.com/go-logr/logr v1.2.4
77
github.com/onmetal/controller-utils v0.7.0
8-
github.com/onmetal/onmetal-api v0.1.0
8+
github.com/onmetal/onmetal-api v0.1.1-0.20230411121339-eb0957464d11
99
github.com/onsi/ginkgo/v2 v2.9.2
10-
github.com/onsi/gomega v1.27.5
10+
github.com/onsi/gomega v1.27.6
1111
github.com/spf13/pflag v1.0.5
1212
go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d
1313
golang.org/x/exp v0.0.0-20221212164502-fae10dda9338
@@ -16,7 +16,7 @@ require (
1616
k8s.io/apiserver v0.26.3
1717
k8s.io/client-go v0.26.3
1818
k8s.io/utils v0.0.0-20221128185143-99ec85e7a448
19-
sigs.k8s.io/controller-runtime v0.14.5
19+
sigs.k8s.io/controller-runtime v0.14.6
2020
)
2121

2222
require (
@@ -71,7 +71,7 @@ require (
7171
go.uber.org/zap v1.24.0 // indirect
7272
golang.org/x/net v0.8.0 // indirect
7373
golang.org/x/oauth2 v0.4.0 // indirect
74-
golang.org/x/sys v0.6.0 // indirect
74+
golang.org/x/sys v0.7.0 // indirect
7575
golang.org/x/term v0.6.0 // indirect
7676
golang.org/x/text v0.8.0 // indirect
7777
golang.org/x/time v0.3.0 // indirect
@@ -86,7 +86,7 @@ require (
8686
gopkg.in/yaml.v3 v3.0.1 // indirect
8787
k8s.io/apiextensions-apiserver v0.26.1 // indirect
8888
k8s.io/component-base v0.26.3 // indirect
89-
k8s.io/klog/v2 v2.80.1 // indirect
89+
k8s.io/klog/v2 v2.90.1 // indirect
9090
k8s.io/kube-aggregator v0.26.3 // indirect
9191
k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 // indirect
9292
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.36 // indirect

go.sum

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG
108108
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
109109
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
110110
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
111-
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
112-
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
111+
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
112+
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
113113
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
114114
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
115115
github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A=
@@ -207,7 +207,7 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
207207
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
208208
github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
209209
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
210-
github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
210+
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
211211
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
212212
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
213213
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
@@ -253,12 +253,12 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW
253253
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
254254
github.com/onmetal/controller-utils v0.7.0 h1:EHLPb/XimNas1VkeZZLP4g31aSz+ipiwvwWhklaQob0=
255255
github.com/onmetal/controller-utils v0.7.0/go.mod h1:91KV/s0VaB8PC+hqsxo6OBsAhi3ICFgIFLv/36V0ng8=
256-
github.com/onmetal/onmetal-api v0.1.0 h1:SOEiBOsLc9RTKpeqaeMe7CLWK2dcVzd0sj4Wj0HhY7U=
257-
github.com/onmetal/onmetal-api v0.1.0/go.mod h1:OPmHPCH/WesxdBF2xVPyjEdD5eTvDKCh3Kh2pfzQRZU=
256+
github.com/onmetal/onmetal-api v0.1.1-0.20230411121339-eb0957464d11 h1:Q48DM7Nr67urjs5sDltEMkQASuVjIPw6Lgtn8GIEHfA=
257+
github.com/onmetal/onmetal-api v0.1.1-0.20230411121339-eb0957464d11/go.mod h1:mql3gEgyCDeqkQbeM62C/FRuCwXSfBVsvg/FiBczN6M=
258258
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
259259
github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
260-
github.com/onsi/gomega v1.27.5 h1:T/X6I0RNFw/kTqgfkZPcQ5KU6vCnWNBGdtrIx2dpGeQ=
261-
github.com/onsi/gomega v1.27.5/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
260+
github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
261+
github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
262262
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
263263
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
264264
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -298,7 +298,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
298298
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
299299
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
300300
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
301-
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
301+
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
302302
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
303303
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
304304
github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU=
@@ -498,8 +498,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
498498
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
499499
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
500500
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
501-
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
502-
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
501+
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
502+
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
503503
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
504504
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
505505
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
@@ -703,8 +703,8 @@ k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s=
703703
k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ=
704704
k8s.io/component-base v0.26.3 h1:oC0WMK/ggcbGDTkdcqefI4wIZRYdK3JySx9/HADpV0g=
705705
k8s.io/component-base v0.26.3/go.mod h1:5kj1kZYwSC6ZstHJN7oHBqcJC6yyn41eR+Sqa/mQc8E=
706-
k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4=
707-
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
706+
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
707+
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
708708
k8s.io/kube-aggregator v0.26.3 h1:nc4H5ymGkWPU3c9U9UM468JcmNENY/s/mDYVW3t3uRo=
709709
k8s.io/kube-aggregator v0.26.3/go.mod h1:SgBESB/+PfZAyceTPIanfQ7GtX9G/+mjfUbTHg3Twbo=
710710
k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc=
@@ -716,8 +716,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
716716
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
717717
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.36 h1:PUuX1qIFv309AT8hF/CdPKDmsG/hn/L8zRX7VvISM3A=
718718
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.36/go.mod h1:WxjusMwXlKzfAs4p9km6XJRndVt2FROgMVCE4cdohFo=
719-
sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s=
720-
sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0=
719+
sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA=
720+
sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0=
721721
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
722722
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
723723
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=

0 commit comments

Comments
 (0)