diff --git a/api/v1/helper.go b/api/v1/helper.go index bdaa71a36..0faae2de1 100644 --- a/api/v1/helper.go +++ b/api/v1/helper.go @@ -482,8 +482,8 @@ func (s *SriovNetworkNodeState) GetDriverByPciAddress(addr string) string { // RenderNetAttDef renders a net-att-def for ib-sriov CNI func (cr *SriovIBNetwork) RenderNetAttDef() (*uns.Unstructured, error) { - logger := log.WithName("renderNetAttDef") - logger.Info("Start to render IB SRIOV CNI NetworkAttachementDefinition") + logger := log.WithName("RenderNetAttDef") + logger.Info("Start to render IB SRIOV CNI NetworkAttachmentDefinition") // render RawCNIConfig manifests data := render.MakeRenderData() @@ -528,6 +528,9 @@ func (cr *SriovIBNetwork) RenderNetAttDef() (*uns.Unstructured, error) { data.Data["MetaPlugins"] = cr.Spec.MetaPluginsConfig } + data.Data["LogLevelConfigured"] = false + data.Data["LogFileConfigured"] = false + objs, err := render.RenderDir(ManifestsPath, &data) if err != nil { return nil, err @@ -563,8 +566,8 @@ func (cr *SriovIBNetwork) DeleteNetAttDef(c client.Client) error { // RenderNetAttDef renders a net-att-def for sriov CNI func (cr *SriovNetwork) RenderNetAttDef() (*uns.Unstructured, error) { - logger := log.WithName("renderNetAttDef") - logger.Info("Start to render SRIOV CNI NetworkAttachementDefinition") + logger := log.WithName("RenderNetAttDef") + logger.Info("Start to render SRIOV CNI NetworkAttachmentDefinition") // render RawCNIConfig manifests data := render.MakeRenderData() @@ -652,6 +655,17 @@ func (cr *SriovNetwork) RenderNetAttDef() (*uns.Unstructured, error) { data.Data["MetaPlugins"] = cr.Spec.MetaPluginsConfig } + data.Data["LogLevelConfigured"] = false + if cr.Spec.LogLevel != "" { + data.Data["LogLevelConfigured"] = true + data.Data["LogLevel"] = cr.Spec.LogLevel + } + data.Data["LogFileConfigured"] = false + if cr.Spec.LogFile != "" { + data.Data["LogFileConfigured"] = true + data.Data["LogFile"] = cr.Spec.LogFile + } + objs, err := render.RenderDir(ManifestsPath, &data) if err != nil { return nil, err diff --git a/api/v1/sriovnetwork_types.go b/api/v1/sriovnetwork_types.go index eac7238d8..4ea150dba 100644 --- a/api/v1/sriovnetwork_types.go +++ b/api/v1/sriovnetwork_types.go @@ -60,6 +60,13 @@ type SriovNetworkSpec struct { // MetaPluginsConfig configuration to be used in order to chain metaplugins to the sriov interface returned // by the operator. MetaPluginsConfig string `json:"metaPlugins,omitempty"` + // LogLevel sets the loglevel of the SRIOV device plugin - either of panic, error, warning, info, debug. Defaults to + // error if left blank. + // +kubebuilder:validation:Enum={"panic", "error","warn","info","debug",""} + LogLevel string `json:"loglevel,omitempty"` + // LogFile sets the log file of the SRIOV device plugin logs. If unset (default), this will log to stderr and thus + // to crio logs. + LogFile string `json:"logfile,omitempty"` } // SriovNetworkStatus defines the observed state of SriovNetwork diff --git a/bindata/manifests/cni-config/sriov-cni-config.yaml b/bindata/manifests/cni-config/sriov-cni-config.yaml index cac67c65c..6b8057354 100644 --- a/bindata/manifests/cni-config/sriov-cni-config.yaml +++ b/bindata/manifests/cni-config/sriov-cni-config.yaml @@ -37,6 +37,12 @@ spec: {{- end -}} {{- if .StateConfigured -}} "link_state":"{{.SriovCniState}}", +{{- end -}} +{{- if .LogLevelConfigured -}} + "loglevel":"{{.LogLevel}}", +{{- end -}} +{{- if .LogFileConfigured -}} + "logfile":"{{.LogFile}}", {{- end -}} {{.SriovCniIpam}} } diff --git a/config/crd/bases/sriovnetwork.openshift.io_sriovnetworks.yaml b/config/crd/bases/sriovnetwork.openshift.io_sriovnetworks.yaml index 17cdcb7ce..0ec7b5c0c 100644 --- a/config/crd/bases/sriovnetwork.openshift.io_sriovnetworks.yaml +++ b/config/crd/bases/sriovnetwork.openshift.io_sriovnetworks.yaml @@ -49,6 +49,23 @@ spec: - enable - disable type: string + logfile: + description: LogFile sets the log file of the SRIOV device plugin + logs. If unset (default), this will log to stderr and thus to crio + logs. + type: string + loglevel: + description: LogLevel sets the loglevel of the SRIOV device plugin + - either of panic, error, warning, info, debug. Defaults to error + if left blank. + enum: + - panic + - error + - warn + - info + - debug + - "" + type: string maxTxRate: description: Maximum tx rate, in Mbps, for the VF. Defaults to 0 (no rate limiting) diff --git a/controllers/sriovnetwork_controller_test.go b/controllers/sriovnetwork_controller_test.go index e4123135e..0a10c5390 100644 --- a/controllers/sriovnetwork_controller_test.go +++ b/controllers/sriovnetwork_controller_test.go @@ -55,6 +55,12 @@ var _ = Describe("SriovNetwork Controller", func() { ResourceName: "resource_1", IPAM: `{"type":"host-local","subnet":"10.56.217.0/24","rangeStart":"10.56.217.171","rangeEnd":"10.56.217.181","routes":[{"dst":"0.0.0.0/0"}],"gateway":"10.56.217.1"}`, }, + "test-5": { + ResourceName: "resource_1", + IPAM: `{"type":"host-local","subnet":"10.56.217.0/24","rangeStart":"10.56.217.171","rangeEnd":"10.56.217.181","routes":[{"dst":"0.0.0.0/0"}],"gateway":"10.56.217.1"}`, + LogLevel: "debug", + LogFile: "/tmp/tmpfile", + }, } sriovnets := util.GenerateSriovNetworkCRs(testNamespace, specs) DescribeTable("should be possible to create/delete net-att-def", @@ -62,7 +68,7 @@ var _ = Describe("SriovNetwork Controller", func() { var err error expect := generateExpectedNetConfig(&cr) - By("Create the SriovNetwork Custom Resource") + By(fmt.Sprintf("Create the SriovNetwork Custom Resource %v", cr)) // get global framework variables err = k8sClient.Create(goctx.TODO(), &cr) Expect(err).NotTo(HaveOccurred()) @@ -93,6 +99,7 @@ var _ = Describe("SriovNetwork Controller", func() { Entry("with networkNamespace flag", sriovnets["test-1"]), Entry("with SpoofChk flag on", sriovnets["test-2"]), Entry("with Trust flag on", sriovnets["test-3"]), + Entry("with LogLevel and LogFile", sriovnets["test-5"]), ) newSpecs := map[string]sriovnetworkv1.SriovNetworkSpec{ @@ -291,7 +298,18 @@ func generateExpectedNetConfig(cr *sriovnetworkv1.SriovNetwork) string { } vlanQoS := cr.Spec.VlanQoS - configStr, err := formatJSON(fmt.Sprintf(`{ "cniVersion":"0.3.1", "name":"%s","type":"sriov","vlan":%d,%s%s%s"vlanQoS":%d,"ipam":%s }`, cr.GetName(), cr.Spec.Vlan, spoofchk, trust, state, vlanQoS, ipam)) + var logLevel string + if cr.Spec.LogLevel != "" { + logLevel = fmt.Sprintf(`"loglevel":"%s",`, cr.Spec.LogLevel) + } + var logFile string + if cr.Spec.LogFile != "" { + logFile = fmt.Sprintf(`"logfile":"%s",`, cr.Spec.LogFile) + } + + configStr, err := formatJSON(fmt.Sprintf( + `{ "cniVersion":"0.3.1", "name":"%s","type":"sriov","vlan":%d,%s%s%s"vlanQoS":%d,%s%s"ipam":%s }`, + cr.GetName(), cr.Spec.Vlan, spoofchk, trust, state, vlanQoS, logLevel, logFile, ipam)) if err != nil { panic(err) } diff --git a/deployment/sriov-network-operator/crds/sriovnetwork.openshift.io_sriovnetworks.yaml b/deployment/sriov-network-operator/crds/sriovnetwork.openshift.io_sriovnetworks.yaml index 17cdcb7ce..0ec7b5c0c 100644 --- a/deployment/sriov-network-operator/crds/sriovnetwork.openshift.io_sriovnetworks.yaml +++ b/deployment/sriov-network-operator/crds/sriovnetwork.openshift.io_sriovnetworks.yaml @@ -49,6 +49,23 @@ spec: - enable - disable type: string + logfile: + description: LogFile sets the log file of the SRIOV device plugin + logs. If unset (default), this will log to stderr and thus to crio + logs. + type: string + loglevel: + description: LogLevel sets the loglevel of the SRIOV device plugin + - either of panic, error, warning, info, debug. Defaults to error + if left blank. + enum: + - panic + - error + - warn + - info + - debug + - "" + type: string maxTxRate: description: Maximum tx rate, in Mbps, for the VF. Defaults to 0 (no rate limiting)