From 357a298baca04b71eee747b1b026a9ea78037490 Mon Sep 17 00:00:00 2001 From: Tariq Ibrahim Date: Mon, 10 Jul 2023 23:09:55 -0700 Subject: [PATCH] add cniSpec to HostDeviceRenderData and prettyPrint CNI JSON Signed-off-by: Tariq Ibrahim --- .../0010-hostdevice-net-cr.yml | 8 ++------ pkg/render/render.go | 5 +++++ pkg/state/state_hostdevice_network.go | 11 +++++++++++ pkg/state/state_skel.go | 7 +++++++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/manifests/state-hostdevice-network/0010-hostdevice-net-cr.yml b/manifests/state-hostdevice-network/0010-hostdevice-net-cr.yml index 6ad3e8c4f..7585af95b 100644 --- a/manifests/state-hostdevice-network/0010-hostdevice-net-cr.yml +++ b/manifests/state-hostdevice-network/0010-hostdevice-net-cr.yml @@ -6,9 +6,5 @@ metadata: annotations: k8s.v1.cni.cncf.io/resourceName: {{.ResourceName}} spec: - config: '{ - "cniVersion":"0.3.1", - "name":"{{.HostDeviceNetworkName}}", - "type":"host-device", - "ipam": {{.CrSpec.IPAM}} -}' + config: + '{{.CNISpec | json | indent 2}}' diff --git a/pkg/render/render.go b/pkg/render/render.go index 44eb42d84..e24bcdc7d 100644 --- a/pkg/render/render.go +++ b/pkg/render/render.go @@ -26,6 +26,7 @@ package render import ( "bytes" + "encoding/json" "fmt" "io" "os" @@ -113,6 +114,10 @@ func (r *textTemplateRenderer) renderFile(filePath string, data *TemplatingData) // Create a new template tmpl := template.New(path.Base(filePath)).Option("missingkey=error") tmpl.Funcs(template.FuncMap{ + "json": func(obj interface{}) (string, error) { + jsonBytes, err := json.Marshal(obj) + return string(jsonBytes), err + }, "yaml": func(obj interface{}) (string, error) { yamlBytes, err := yamlConverter.Marshal(obj) return string(yamlBytes), err diff --git a/pkg/state/state_hostdevice_network.go b/pkg/state/state_hostdevice_network.go index f604f99f9..30518ce82 100644 --- a/pkg/state/state_hostdevice_network.go +++ b/pkg/state/state_hostdevice_network.go @@ -38,6 +38,8 @@ import ( ) const ( + stateHostDeviceCNIVersion = "v0.3.1" + stateHostDeviceCNIType = "host-device" stateHostDeviceNetworkName = "state-host-device-network" stateHostDeviceNetworkDescription = "Host Device net-attach-def CR deployed in cluster" resourceNamePrefix = "nvidia.com/" @@ -70,6 +72,7 @@ type HostDeviceManifestRenderData struct { CrSpec mellanoxv1alpha1.HostDeviceNetworkSpec RuntimeSpec *runtimeSpec ResourceName string + CNISpec *cniSpec } // Sync attempt to get the system to match the desired state which State represent. @@ -135,9 +138,17 @@ func (s *stateHostDeviceNetwork) getManifestObjects( resourceName = resourceNamePrefix + resourceName } + cniSpec := &cniSpec{ + CNIVersion: stateHostDeviceCNIVersion, + Name: cr.Name, + Type: stateHostDeviceCNIType, + IPAM: cr.Spec.IPAM, + } + renderData := &HostDeviceManifestRenderData{ HostDeviceNetworkName: cr.Name, CrSpec: cr.Spec, + CNISpec: cniSpec, RuntimeSpec: &runtimeSpec{ Namespace: config.FromEnv().State.NetworkOperatorResourceNamespace, }, diff --git a/pkg/state/state_skel.go b/pkg/state/state_skel.go index fbb953cce..81015efc7 100644 --- a/pkg/state/state_skel.go +++ b/pkg/state/state_skel.go @@ -38,6 +38,13 @@ import ( "github.com/Mellanox/network-operator/pkg/render" ) +type cniSpec struct { + CNIVersion string `json:"cniVersion,omitempty"` + Name string `json:"name,omitempty"` + IPAM string `json:"ipam,omitempty"` + Type string `json:"type,omitempty"` +} + type runtimeSpec struct { Namespace string }