diff --git a/PROJECT b/PROJECT index 8c064b1..53c3be6 100644 --- a/PROJECT +++ b/PROJECT @@ -28,4 +28,20 @@ resources: kind: NicDevice path: github.com/Mellanox/nic-configuration-operator/api/v1alpha1 version: v1alpha1 +- api: + crdVersion: v1 + namespaced: true + domain: nvidia.com + group: configuration.net + kind: NicFirmwareSource + path: github.com/Mellanox/nic-configuration-operator/api/v1alpha1 + version: v1alpha1 +- api: + crdVersion: v1 + namespaced: true + domain: nvidia.com + group: configuration.net + kind: NicFirmwareTemplate + path: github.com/Mellanox/nic-configuration-operator/api/v1alpha1 + version: v1alpha1 version: "3" diff --git a/api/v1alpha1/nicfirmwaresource_types.go b/api/v1alpha1/nicfirmwaresource_types.go new file mode 100644 index 0000000..aa5e669 --- /dev/null +++ b/api/v1alpha1/nicfirmwaresource_types.go @@ -0,0 +1,60 @@ +/* +2025 NVIDIA CORPORATION & AFFILIATES +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// NicFirmwareSourceSpec represents a list of url sources for FW +type NicFirmwareSourceSpec struct { + // BinUrlSource represents a list of url sources for FW + BinUrlSource []string `json:"binUrlSource"` +} + +// NicFirmwareSourceStatus represents the status of the FW from given sources, e.g. version available for PSIDs +type NicFirmwareSourceStatus struct { + // State represents the firmware processing state, e.g. Downloading|Processing|Success|ProcessingFailed|DownloadFailed + State string `json:"state"` + // Reason shows an error message if occurred + Reason string `json:"reason,omitempty"` + // Versions is a map of available FW versions to PSIDs + // a PSID should have only a single FW version available for it + Versions map[string][]string `json:"versions,omitempty"` +} + +//+kubebuilder:object:root=true +//+kubebuilder:subresource:status + +// NicFirmwareSource is the Schema for the nicfirmwaresources API +type NicFirmwareSource struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec NicFirmwareSourceSpec `json:"spec,omitempty"` + Status NicFirmwareSourceStatus `json:"status,omitempty"` +} + +//+kubebuilder:object:root=true + +// NicFirmwareSourceList contains a list of NicFirmwareSource +type NicFirmwareSourceList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []NicFirmwareSource `json:"items"` +} + +func init() { + SchemeBuilder.Register(&NicFirmwareSource{}, &NicFirmwareSourceList{}) +} diff --git a/api/v1alpha1/nicfirmwaretemplate_types.go b/api/v1alpha1/nicfirmwaretemplate_types.go new file mode 100644 index 0000000..f37574c --- /dev/null +++ b/api/v1alpha1/nicfirmwaretemplate_types.go @@ -0,0 +1,72 @@ +/* +2025 NVIDIA CORPORATION & AFFILIATES +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// FirmwareTemplateSpec specifies a FW update policy for a given FW source ref +type FirmwareTemplateSpec struct { + // NicFirmwareSourceRef refers to existing NicFirmwareSource CR on where to get the FW from + // +required + NicFirmwareSourceRef string `json:"nicFirmwareSourceRef"` + // UpdatePolicy indicates whether the operator needs to validate installed FW or upgrade it + // +kubebuilder:validation:Enum=Validate;Update + // +required + UpdatePolicy string `json:"updatePolicy"` +} + +// NicFirmwareTemplateSpec defines the FW templates and node/nic selectors for it +type NicFirmwareTemplateSpec struct { + // NodeSelector contains labels required on the node + NodeSelector map[string]string `json:"nodeSelector,omitempty"` + // NIC selector configuration + // +required + NicSelector *NicSelectorSpec `json:"nicSelector"` + // Firmware update template + // +required + Template *FirmwareTemplateSpec `json:"template"` +} + +// NicFirmwareTemplateStatus lists the NicDevice CRs matching the FW template +type NicFirmwareTemplateStatus struct { + // NicDevice CRs matching this firmware template + NicDevices []string `json:"nicDevices"` +} + +//+kubebuilder:object:root=true +//+kubebuilder:subresource:status + +// NicFirmwareTemplate is the Schema for the nicfirmwaretemplates API +type NicFirmwareTemplate struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec NicFirmwareTemplateSpec `json:"spec,omitempty"` + Status NicFirmwareTemplateStatus `json:"status,omitempty"` +} + +//+kubebuilder:object:root=true + +// NicFirmwareTemplateList contains a list of NicFirmwareTemplate +type NicFirmwareTemplateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []NicFirmwareTemplate `json:"items"` +} + +func init() { + SchemeBuilder.Register(&NicFirmwareTemplate{}, &NicFirmwareTemplateList{}) +} diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 99cca39..6a5db1e 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -54,6 +54,21 @@ func (in *ConfigurationTemplateSpec) DeepCopy() *ConfigurationTemplateSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FirmwareTemplateSpec) DeepCopyInto(out *FirmwareTemplateSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirmwareTemplateSpec. +func (in *FirmwareTemplateSpec) DeepCopy() *FirmwareTemplateSpec { + if in == nil { + return nil + } + out := new(FirmwareTemplateSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GpuDirectOptimizedSpec) DeepCopyInto(out *GpuDirectOptimizedSpec) { *out = *in @@ -321,6 +336,227 @@ func (in *NicDeviceStatus) DeepCopy() *NicDeviceStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NicFirmwareSource) DeepCopyInto(out *NicFirmwareSource) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NicFirmwareSource. +func (in *NicFirmwareSource) DeepCopy() *NicFirmwareSource { + if in == nil { + return nil + } + out := new(NicFirmwareSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NicFirmwareSource) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NicFirmwareSourceList) DeepCopyInto(out *NicFirmwareSourceList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NicFirmwareSource, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NicFirmwareSourceList. +func (in *NicFirmwareSourceList) DeepCopy() *NicFirmwareSourceList { + if in == nil { + return nil + } + out := new(NicFirmwareSourceList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NicFirmwareSourceList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NicFirmwareSourceSpec) DeepCopyInto(out *NicFirmwareSourceSpec) { + *out = *in + if in.BinUrlSource != nil { + in, out := &in.BinUrlSource, &out.BinUrlSource + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NicFirmwareSourceSpec. +func (in *NicFirmwareSourceSpec) DeepCopy() *NicFirmwareSourceSpec { + if in == nil { + return nil + } + out := new(NicFirmwareSourceSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NicFirmwareSourceStatus) DeepCopyInto(out *NicFirmwareSourceStatus) { + *out = *in + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make(map[string][]string, len(*in)) + for key, val := range *in { + var outVal []string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = make([]string, len(*in)) + copy(*out, *in) + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NicFirmwareSourceStatus. +func (in *NicFirmwareSourceStatus) DeepCopy() *NicFirmwareSourceStatus { + if in == nil { + return nil + } + out := new(NicFirmwareSourceStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NicFirmwareTemplate) DeepCopyInto(out *NicFirmwareTemplate) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NicFirmwareTemplate. +func (in *NicFirmwareTemplate) DeepCopy() *NicFirmwareTemplate { + if in == nil { + return nil + } + out := new(NicFirmwareTemplate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NicFirmwareTemplate) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NicFirmwareTemplateList) DeepCopyInto(out *NicFirmwareTemplateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NicFirmwareTemplate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NicFirmwareTemplateList. +func (in *NicFirmwareTemplateList) DeepCopy() *NicFirmwareTemplateList { + if in == nil { + return nil + } + out := new(NicFirmwareTemplateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NicFirmwareTemplateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NicFirmwareTemplateSpec) DeepCopyInto(out *NicFirmwareTemplateSpec) { + *out = *in + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.NicSelector != nil { + in, out := &in.NicSelector, &out.NicSelector + *out = new(NicSelectorSpec) + (*in).DeepCopyInto(*out) + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(FirmwareTemplateSpec) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NicFirmwareTemplateSpec. +func (in *NicFirmwareTemplateSpec) DeepCopy() *NicFirmwareTemplateSpec { + if in == nil { + return nil + } + out := new(NicFirmwareTemplateSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NicFirmwareTemplateStatus) DeepCopyInto(out *NicFirmwareTemplateStatus) { + *out = *in + if in.NicDevices != nil { + in, out := &in.NicDevices, &out.NicDevices + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NicFirmwareTemplateStatus. +func (in *NicFirmwareTemplateStatus) DeepCopy() *NicFirmwareTemplateStatus { + if in == nil { + return nil + } + out := new(NicFirmwareTemplateStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NicSelectorSpec) DeepCopyInto(out *NicSelectorSpec) { *out = *in diff --git a/config/crd/bases/configuration.net.nvidia.com_nicfirmwaresources.yaml b/config/crd/bases/configuration.net.nvidia.com_nicfirmwaresources.yaml new file mode 100644 index 0000000..f5cddbb --- /dev/null +++ b/config/crd/bases/configuration.net.nvidia.com_nicfirmwaresources.yaml @@ -0,0 +1,78 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + name: nicfirmwaresources.configuration.net.nvidia.com +spec: + group: configuration.net.nvidia.com + names: + kind: NicFirmwareSource + listKind: NicFirmwareSourceList + plural: nicfirmwaresources + singular: nicfirmwaresource + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: NicFirmwareSource is the Schema for the nicfirmwaresources API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: NicFirmwareSourceSpec represents a list of url sources for + FW + properties: + binUrlSource: + description: BinUrlSource represents a list of url sources for FW + items: + type: string + type: array + required: + - binUrlSource + type: object + status: + description: NicFirmwareSourceStatus represents the status of the FW from + given sources, e.g. version available for PSIDs + properties: + reason: + description: Reason shows an error message if occurred + type: string + state: + description: State represents the firmware processing state, e.g. + Downloading|Processing|Success|ProcessingFailed|DownloadFailed + type: string + versions: + additionalProperties: + items: + type: string + type: array + description: |- + Versions is a map of available FW versions to PSIDs + a PSID should have only a single FW version available for it + type: object + required: + - state + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/config/crd/bases/configuration.net.nvidia.com_nicfirmwaretemplates.yaml b/config/crd/bases/configuration.net.nvidia.com_nicfirmwaretemplates.yaml new file mode 100644 index 0000000..fdb27fc --- /dev/null +++ b/config/crd/bases/configuration.net.nvidia.com_nicfirmwaretemplates.yaml @@ -0,0 +1,107 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + name: nicfirmwaretemplates.configuration.net.nvidia.com +spec: + group: configuration.net.nvidia.com + names: + kind: NicFirmwareTemplate + listKind: NicFirmwareTemplateList + plural: nicfirmwaretemplates + singular: nicfirmwaretemplate + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: NicFirmwareTemplate is the Schema for the nicfirmwaretemplates + API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: NicFirmwareTemplateSpec defines the FW templates and node/nic + selectors for it + properties: + nicSelector: + description: NIC selector configuration + properties: + nicType: + description: Type of the NIC to be selected, e.g. 101d,1015,a2d6 + etc. + type: string + pciAddresses: + description: Array of PCI addresses to be selected, e.g. "0000:03:00.0" + items: + type: string + type: array + serialNumbers: + description: Serial numbers of the NICs to be selected, e.g. MT2116X09299 + items: + type: string + type: array + required: + - nicType + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector contains labels required on the node + type: object + template: + description: Firmware update template + properties: + nicFirmwareSourceRef: + description: NicFirmwareSourceRef refers to existing NicFirmwareSource + CR on where to get the FW from + type: string + updatePolicy: + description: UpdatePolicy indicates whether the operator needs + to validate installed FW or upgrade it + enum: + - Validate + - Update + type: string + required: + - nicFirmwareSourceRef + - updatePolicy + type: object + required: + - nicSelector + - template + type: object + status: + description: NicFirmwareTemplateStatus lists the NicDevice CRs matching + the FW template + properties: + nicDevices: + description: NicDevice CRs matching this firmware template + items: + type: string + type: array + required: + - nicDevices + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/deployment/nic-configuration-operator-chart/crds/configuration.net.nvidia.com_nicfirmwaresources.yaml b/deployment/nic-configuration-operator-chart/crds/configuration.net.nvidia.com_nicfirmwaresources.yaml new file mode 100644 index 0000000..f5cddbb --- /dev/null +++ b/deployment/nic-configuration-operator-chart/crds/configuration.net.nvidia.com_nicfirmwaresources.yaml @@ -0,0 +1,78 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + name: nicfirmwaresources.configuration.net.nvidia.com +spec: + group: configuration.net.nvidia.com + names: + kind: NicFirmwareSource + listKind: NicFirmwareSourceList + plural: nicfirmwaresources + singular: nicfirmwaresource + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: NicFirmwareSource is the Schema for the nicfirmwaresources API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: NicFirmwareSourceSpec represents a list of url sources for + FW + properties: + binUrlSource: + description: BinUrlSource represents a list of url sources for FW + items: + type: string + type: array + required: + - binUrlSource + type: object + status: + description: NicFirmwareSourceStatus represents the status of the FW from + given sources, e.g. version available for PSIDs + properties: + reason: + description: Reason shows an error message if occurred + type: string + state: + description: State represents the firmware processing state, e.g. + Downloading|Processing|Success|ProcessingFailed|DownloadFailed + type: string + versions: + additionalProperties: + items: + type: string + type: array + description: |- + Versions is a map of available FW versions to PSIDs + a PSID should have only a single FW version available for it + type: object + required: + - state + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/deployment/nic-configuration-operator-chart/crds/configuration.net.nvidia.com_nicfirmwaretemplates.yaml b/deployment/nic-configuration-operator-chart/crds/configuration.net.nvidia.com_nicfirmwaretemplates.yaml new file mode 100644 index 0000000..fdb27fc --- /dev/null +++ b/deployment/nic-configuration-operator-chart/crds/configuration.net.nvidia.com_nicfirmwaretemplates.yaml @@ -0,0 +1,107 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + name: nicfirmwaretemplates.configuration.net.nvidia.com +spec: + group: configuration.net.nvidia.com + names: + kind: NicFirmwareTemplate + listKind: NicFirmwareTemplateList + plural: nicfirmwaretemplates + singular: nicfirmwaretemplate + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: NicFirmwareTemplate is the Schema for the nicfirmwaretemplates + API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: NicFirmwareTemplateSpec defines the FW templates and node/nic + selectors for it + properties: + nicSelector: + description: NIC selector configuration + properties: + nicType: + description: Type of the NIC to be selected, e.g. 101d,1015,a2d6 + etc. + type: string + pciAddresses: + description: Array of PCI addresses to be selected, e.g. "0000:03:00.0" + items: + type: string + type: array + serialNumbers: + description: Serial numbers of the NICs to be selected, e.g. MT2116X09299 + items: + type: string + type: array + required: + - nicType + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector contains labels required on the node + type: object + template: + description: Firmware update template + properties: + nicFirmwareSourceRef: + description: NicFirmwareSourceRef refers to existing NicFirmwareSource + CR on where to get the FW from + type: string + updatePolicy: + description: UpdatePolicy indicates whether the operator needs + to validate installed FW or upgrade it + enum: + - Validate + - Update + type: string + required: + - nicFirmwareSourceRef + - updatePolicy + type: object + required: + - nicSelector + - template + type: object + status: + description: NicFirmwareTemplateStatus lists the NicDevice CRs matching + the FW template + properties: + nicDevices: + description: NicDevice CRs matching this firmware template + items: + type: string + type: array + required: + - nicDevices + type: object + type: object + served: true + storage: true + subresources: + status: {}