Skip to content

Commit

Permalink
network/kubevirt-ipam-controller: Add new net-attach-def resource
Browse files Browse the repository at this point in the history
This resource does not belong to kubevirt-ipam-controller, but is
currently piggy-backing this component in order to deploy the primary
user-defined-network net-attach-def [0].

This net-attach-def is deployed on default namespace, as this way it
will be available to all VMs that need to consume it.

[0]
https://kubevirt.io/user-guide/network/network_binding_plugins/#deployment

Signed-off-by: Ram Lavi <[email protected]>
  • Loading branch information
RamLavi committed Aug 5, 2024
1 parent 00ee34c commit 3c20939
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{{ if .EnableNetworkAttachmentDefinition }}
---
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: primary-user-defined-network
namespace: default
spec:
config: '{
"cniVersion": "1.0.0",
"name": "primary-user-defined-network",
"plugins": [
{
"type": "cni-passt-binding-plugin"
}
]
}'
{{ end }}
2 changes: 1 addition & 1 deletion hack/components/bump-kubevirt-ipam-controller.sh
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ echo 'Adjust kubevirt-ipam-controller to CNAO'

echo 'Copy manifests'
shopt -s extglob
rm -rf data/kubevirt-ipam-controller/!(002-rbac.yaml)
rm -rf data/kubevirt-ipam-controller/!(002-rbac.yaml|004-primary-udn-networkattachdef.yaml)

# CRD
crd_manifest="https://raw.githubusercontent.com/k8snetworkplumbingwg/ipamclaims/${IPAMCLAIMS_CRD_VERSION}/artifacts/k8s.cni.cncf.io_ipamclaims.yaml"
Expand Down
1 change: 1 addition & 0 deletions pkg/network/kubevirt_ipam_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ func renderKubevirtIPAMController(conf *cnao.NetworkAddonsConfigSpec, manifestDi
}
data.Data["IsOpenshift"] = clusterInfo.OpenShift4
data.Data["EnableSCC"] = clusterInfo.SCCAvailable
data.Data["EnableNetworkAttachmentDefinition"] = clusterInfo.NetAttachDefAvailable

objs, err := render.RenderDir(filepath.Join(manifestDir, "kubevirt-ipam-controller"), &data)
if err != nil {
Expand Down
63 changes: 63 additions & 0 deletions pkg/network/kubevirt_ipam_controller_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package network

import (
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"

osv1 "github.com/openshift/api/operator/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"

cnao "github.com/kubevirt/cluster-network-addons-operator/pkg/apis/networkaddonsoperator/shared"
)

var _ = Describe("Testing kubevirt ipam controller", func() {
Context("Render KubevirtIpamController", func() {
conf := &cnao.NetworkAddonsConfigSpec{ImagePullPolicy: v1.PullAlways, Multus: &cnao.Multus{}, KubevirtIpamController: &cnao.KubevirtIpamController{}, PlacementConfiguration: &cnao.PlacementConfiguration{Workloads: &cnao.Placement{}}}
manifestDir := "../../data"
openshiftNetworkConf := &osv1.Network{}
clusterInfo := &ClusterInfo{SCCAvailable: true, OpenShift4: false}
expectedGroupVersionKind := schema.GroupVersionKind{
Group: "k8s.cni.cncf.io",
Kind: "NetworkAttachmentDefinition",
Version: "v1",
}
const expectedName = "primary-user-defined-network"

It("and NetAttachDefAvailable resource is available, should add the primary-udn network-attach-def obj", func() {
clusterInfo.NetAttachDefAvailable = true
objs, err := Render(conf, manifestDir, openshiftNetworkConf, clusterInfo)
Expect(err).NotTo(HaveOccurred())
Expect(objs).NotTo(BeEmpty())

Expect(objs).To(ContainElement(
SatisfyAll(
WithTransform(func(obj *unstructured.Unstructured) string {
return obj.GetName()
}, Equal(expectedName)),
WithTransform(func(obj *unstructured.Unstructured) schema.GroupVersionKind {
return obj.GetObjectKind().GroupVersionKind()
}, Equal(expectedGroupVersionKind)),
),
))
})
It("and NetAttachDefAvailable resource is not available, should not add the primary-udn network-attach-def obj", func() {
clusterInfo.NetAttachDefAvailable = false
objs, err := Render(conf, manifestDir, openshiftNetworkConf, clusterInfo)
Expect(err).NotTo(HaveOccurred())
Expect(objs).NotTo(BeEmpty())

Expect(objs).ToNot(ContainElement(
SatisfyAll(
WithTransform(func(obj *unstructured.Unstructured) string {
return obj.GetName()
}, Equal(expectedName)),
WithTransform(func(obj *unstructured.Unstructured) schema.GroupVersionKind {
return obj.GetObjectKind().GroupVersionKind()
}, Equal(expectedGroupVersionKind)),
),
))
})
})
})

0 comments on commit 3c20939

Please sign in to comment.