Skip to content

Commit f4307b0

Browse files
committed
networks: Add Owner annottion to NetAttachDefs
NetworkattachmentDefiitions are usually created in namespaces that are different than the Sriov{Ib,OVS}Networks, so the OwnerReference object field can't be used to endorse the ownership reference. Add a `sriovnetwork.openshift.io/owner` annotation to put on the NetAttachDef to avoid multiple {Sriov,SriovIb,OVS}Network objects does not override changes. Signed-off-by: Andrea Panattoni <[email protected]>
1 parent 35e7319 commit f4307b0

File tree

15 files changed

+298
-55
lines changed

15 files changed

+298
-55
lines changed

api/v1/helper.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
uns "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2020
intstrutil "k8s.io/apimachinery/pkg/util/intstr"
2121
"k8s.io/client-go/kubernetes"
22+
"sigs.k8s.io/controller-runtime/pkg/client"
2223
logf "sigs.k8s.io/controller-runtime/pkg/log"
2324

2425
"github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/consts"
@@ -651,6 +652,7 @@ func (cr *SriovIBNetwork) RenderNetAttDef() (*uns.Unstructured, error) {
651652
} else {
652653
data.Data["SriovNetworkNamespace"] = cr.Spec.NetworkNamespace
653654
}
655+
data.Data["Owner"] = OwnerRefToString(cr)
654656
data.Data["SriovCniResourceName"] = os.Getenv("RESOURCE_PREFIX") + "/" + cr.Spec.ResourceName
655657

656658
data.Data["StateConfigured"] = true
@@ -719,6 +721,7 @@ func (cr *SriovNetwork) RenderNetAttDef() (*uns.Unstructured, error) {
719721
} else {
720722
data.Data["SriovNetworkNamespace"] = cr.Spec.NetworkNamespace
721723
}
724+
data.Data["Owner"] = OwnerRefToString(cr)
722725
data.Data["SriovCniResourceName"] = os.Getenv("RESOURCE_PREFIX") + "/" + cr.Spec.ResourceName
723726
data.Data["SriovCniVlan"] = cr.Spec.Vlan
724727

@@ -837,6 +840,7 @@ func (cr *OVSNetwork) RenderNetAttDef() (*uns.Unstructured, error) {
837840
} else {
838841
data.Data["NetworkNamespace"] = cr.Spec.NetworkNamespace
839842
}
843+
data.Data["Owner"] = OwnerRefToString(cr)
840844
data.Data["CniResourceName"] = os.Getenv("RESOURCE_PREFIX") + "/" + cr.Spec.ResourceName
841845

842846
if cr.Spec.Capabilities == "" {
@@ -994,3 +998,14 @@ func (s *SriovNetworkNodeState) ResetKeepUntilTime() bool {
994998
s.SetAnnotations(annotations)
995999
return true
9961000
}
1001+
1002+
func OwnerRefToString(cr client.Object) string {
1003+
if cr == nil {
1004+
return "owner-object-not-found"
1005+
}
1006+
if cr.GetObjectKind().GroupVersionKind().Empty() {
1007+
return "unknown/" + cr.GetNamespace() + "/" + cr.GetName()
1008+
}
1009+
1010+
return cr.GetObjectKind().GroupVersionKind().GroupKind().String() + "/" + cr.GetNamespace() + "/" + cr.GetName()
1011+
}

api/v1/helper_test.go

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"testing"
1111

1212
"github.com/google/go-cmp/cmp"
13+
"github.com/stretchr/testify/assert"
1314
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1415
intstrutil "k8s.io/apimachinery/pkg/util/intstr"
1516

@@ -149,6 +150,8 @@ func TestRendering(t *testing.T) {
149150
{
150151
tname: "simple",
151152
network: v1.SriovNetwork{
153+
TypeMeta: metav1.TypeMeta{APIVersion: v1.GroupVersion.String(), Kind: "SriovNetwork"},
154+
ObjectMeta: metav1.ObjectMeta{Namespace: "ns", Name: "test"},
152155
Spec: v1.SriovNetworkSpec{
153156
NetworkNamespace: "testnamespace",
154157
ResourceName: "testresource",
@@ -158,6 +161,8 @@ func TestRendering(t *testing.T) {
158161
{
159162
tname: "chained",
160163
network: v1.SriovNetwork{
164+
TypeMeta: metav1.TypeMeta{APIVersion: v1.GroupVersion.String(), Kind: "SriovNetwork"},
165+
ObjectMeta: metav1.ObjectMeta{Namespace: "ns", Name: "test"},
161166
Spec: v1.SriovNetworkSpec{
162167
NetworkNamespace: "testnamespace",
163168
ResourceName: "testresource",
@@ -194,10 +199,8 @@ func TestRendering(t *testing.T) {
194199
if err != nil {
195200
t.Fatalf("failed reading .golden: %s", err)
196201
}
197-
t.Log(b.String())
198-
if !bytes.Equal(b.Bytes(), g) {
199-
t.Errorf("bytes do not match .golden file")
200-
}
202+
203+
assert.Equal(t, string(g), b.String(), "bytes do not match .golden file [%s]", gp)
201204
})
202205
}
203206
}
@@ -210,6 +213,8 @@ func TestIBRendering(t *testing.T) {
210213
{
211214
tname: "simpleib",
212215
network: v1.SriovIBNetwork{
216+
TypeMeta: metav1.TypeMeta{APIVersion: v1.GroupVersion.String(), Kind: "SriovIBNetwork"},
217+
ObjectMeta: metav1.ObjectMeta{Namespace: "ns", Name: "test"},
213218
Spec: v1.SriovIBNetworkSpec{
214219
NetworkNamespace: "testnamespace",
215220
ResourceName: "testresource",
@@ -241,10 +246,8 @@ func TestIBRendering(t *testing.T) {
241246
if err != nil {
242247
t.Fatalf("failed reading .golden: %s", err)
243248
}
244-
t.Log(b.String())
245-
if !bytes.Equal(b.Bytes(), g) {
246-
t.Errorf("bytes do not match .golden file")
247-
}
249+
250+
assert.Equal(t, string(g), b.String(), "bytes do not match .golden file [%s]", gp)
248251
})
249252
}
250253
}
@@ -257,9 +260,8 @@ func TestOVSRendering(t *testing.T) {
257260
{
258261
tname: "simpleovs",
259262
network: v1.OVSNetwork{
260-
ObjectMeta: metav1.ObjectMeta{
261-
Name: "test",
262-
},
263+
TypeMeta: metav1.TypeMeta{APIVersion: v1.GroupVersion.String(), Kind: "OVSNetwork"},
264+
ObjectMeta: metav1.ObjectMeta{Namespace: "ns", Name: "test"},
263265
Spec: v1.OVSNetworkSpec{
264266
NetworkNamespace: "testnamespace",
265267
ResourceName: "testresource",
@@ -269,9 +271,8 @@ func TestOVSRendering(t *testing.T) {
269271
{
270272
tname: "chained",
271273
network: v1.OVSNetwork{
272-
ObjectMeta: metav1.ObjectMeta{
273-
Name: "test",
274-
},
274+
TypeMeta: metav1.TypeMeta{APIVersion: v1.GroupVersion.String(), Kind: "OVSNetwork"},
275+
ObjectMeta: metav1.ObjectMeta{Namespace: "ns", Name: "test"},
275276
Spec: v1.OVSNetworkSpec{
276277
NetworkNamespace: "testnamespace",
277278
ResourceName: "testresource",
@@ -288,9 +289,8 @@ func TestOVSRendering(t *testing.T) {
288289
{
289290
tname: "complexconf",
290291
network: v1.OVSNetwork{
291-
ObjectMeta: metav1.ObjectMeta{
292-
Name: "test",
293-
},
292+
TypeMeta: metav1.TypeMeta{APIVersion: v1.GroupVersion.String(), Kind: "OVSNetwork"},
293+
ObjectMeta: metav1.ObjectMeta{Namespace: "ns", Name: "test"},
294294
Spec: v1.OVSNetworkSpec{
295295
NetworkNamespace: "testnamespace",
296296
ResourceName: "testresource",
@@ -334,10 +334,8 @@ func TestOVSRendering(t *testing.T) {
334334
if err != nil {
335335
t.Fatalf("failed reading .golden: %s", err)
336336
}
337-
t.Log(b.String())
338-
if !bytes.Equal(b.Bytes(), g) {
339-
t.Errorf("bytes do not match .golden file")
340-
}
337+
338+
assert.Equal(t, string(g), b.String(), "bytes do not match .golden file [%s]", gp)
341339
})
342340
}
343341
}

api/v1/testdata/TestIBRendering/simpleib.golden

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
"kind": "NetworkAttachmentDefinition",
44
"metadata": {
55
"annotations": {
6-
"k8s.v1.cni.cncf.io/resourceName": "/testresource"
6+
"k8s.v1.cni.cncf.io/resourceName": "/testresource",
7+
"sriovnetwork.openshift.io/owner-ref": "SriovIBNetwork.sriovnetwork.openshift.io/ns/test"
78
},
8-
"name": null,
9+
"name": "test",
910
"namespace": "testnamespace"
1011
},
1112
"spec": {
12-
"config": "{ \"cniVersion\":\"1.0.0\", \"name\":\"\",\"type\":\"ib-sriov\",\"capabilities\":foo,\"ipam\":{} }"
13+
"config": "{ \"cniVersion\":\"1.0.0\", \"name\":\"test\",\"type\":\"ib-sriov\",\"capabilities\":foo,\"ipam\":{} }"
1314
}
1415
}

api/v1/testdata/TestOVSRendering/chained.golden

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"kind": "NetworkAttachmentDefinition",
44
"metadata": {
55
"annotations": {
6-
"k8s.v1.cni.cncf.io/resourceName": "/testresource"
6+
"k8s.v1.cni.cncf.io/resourceName": "/testresource",
7+
"sriovnetwork.openshift.io/owner-ref": "OVSNetwork.sriovnetwork.openshift.io/ns/test"
78
},
89
"name": "test",
910
"namespace": "testnamespace"

api/v1/testdata/TestOVSRendering/complexconf.golden

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"kind": "NetworkAttachmentDefinition",
44
"metadata": {
55
"annotations": {
6-
"k8s.v1.cni.cncf.io/resourceName": "/testresource"
6+
"k8s.v1.cni.cncf.io/resourceName": "/testresource",
7+
"sriovnetwork.openshift.io/owner-ref": "OVSNetwork.sriovnetwork.openshift.io/ns/test"
78
},
89
"name": "test",
910
"namespace": "testnamespace"

api/v1/testdata/TestOVSRendering/simpleovs.golden

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"kind": "NetworkAttachmentDefinition",
44
"metadata": {
55
"annotations": {
6-
"k8s.v1.cni.cncf.io/resourceName": "/testresource"
6+
"k8s.v1.cni.cncf.io/resourceName": "/testresource",
7+
"sriovnetwork.openshift.io/owner-ref": "OVSNetwork.sriovnetwork.openshift.io/ns/test"
78
},
89
"name": "test",
910
"namespace": "testnamespace"

api/v1/testdata/TestRendering/chained.golden

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
"kind": "NetworkAttachmentDefinition",
44
"metadata": {
55
"annotations": {
6-
"k8s.v1.cni.cncf.io/resourceName": "/testresource"
6+
"k8s.v1.cni.cncf.io/resourceName": "/testresource",
7+
"sriovnetwork.openshift.io/owner-ref": "SriovNetwork.sriovnetwork.openshift.io/ns/test"
78
},
8-
"name": null,
9+
"name": "test",
910
"namespace": "testnamespace"
1011
},
1112
"spec": {
12-
"config": "{ \"cniVersion\":\"1.0.0\", \"name\":\"\",\"plugins\": [ {\"type\":\"sriov\",\"vlan\":0,\"vlanQoS\":0,\"ipam\":{} },\n{ \"type\": \"vrf\", \"vrfname\": \"blue\" }\n] }"
13+
"config": "{ \"cniVersion\":\"1.0.0\", \"name\":\"test\",\"plugins\": [ {\"type\":\"sriov\",\"vlan\":0,\"vlanQoS\":0,\"ipam\":{} },\n{ \"type\": \"vrf\", \"vrfname\": \"blue\" }\n] }"
1314
}
1415
}

api/v1/testdata/TestRendering/simple.golden

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
"kind": "NetworkAttachmentDefinition",
44
"metadata": {
55
"annotations": {
6-
"k8s.v1.cni.cncf.io/resourceName": "/testresource"
6+
"k8s.v1.cni.cncf.io/resourceName": "/testresource",
7+
"sriovnetwork.openshift.io/owner-ref": "SriovNetwork.sriovnetwork.openshift.io/ns/test"
78
},
8-
"name": null,
9+
"name": "test",
910
"namespace": "testnamespace"
1011
},
1112
"spec": {
12-
"config": "{ \"cniVersion\":\"1.0.0\", \"name\":\"\",\"type\":\"sriov\",\"vlan\":0,\"vlanQoS\":0,\"ipam\":{} }"
13+
"config": "{ \"cniVersion\":\"1.0.0\", \"name\":\"test\",\"type\":\"sriov\",\"vlan\":0,\"vlanQoS\":0,\"ipam\":{} }"
1314
}
1415
}

bindata/manifests/cni-config/ovs/ovs-cni-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ metadata:
55
namespace: {{.NetworkNamespace}}
66
annotations:
77
k8s.v1.cni.cncf.io/resourceName: {{.CniResourceName}}
8+
sriovnetwork.openshift.io/owner-ref: {{.Owner}}
89
spec:
910
config: '{
1011
"cniVersion":"1.0.0",

bindata/manifests/cni-config/sriov/sriov-cni-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ metadata:
55
namespace: {{.SriovNetworkNamespace}}
66
annotations:
77
k8s.v1.cni.cncf.io/resourceName: {{.SriovCniResourceName}}
8+
sriovnetwork.openshift.io/owner-ref: {{.Owner}}
89
spec:
910
config: '{
1011
"cniVersion":"1.0.0",

0 commit comments

Comments
 (0)