Skip to content

Commit

Permalink
Add NodeModulesConfig status management functions (#514) (#698)
Browse files Browse the repository at this point in the history
Use the plural form for the NodeModulesConfig CRD, per convention.
Add new CRD fields to be used by the NodeModulesConfig reconciler.

Upstream-Commit: 1767d02

Co-authored-by: Quentin Barrand <[email protected]>
  • Loading branch information
github-actions[bot] and qbarrand authored Aug 23, 2023
1 parent 42e9b03 commit 26b385d
Show file tree
Hide file tree
Showing 8 changed files with 558 additions and 14 deletions.
16 changes: 10 additions & 6 deletions api/v1beta1/nodemodulesconfig_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ type ModuleConfig struct {
//+optional
InTreeModuleToRemove string `json:"inTreeModuleToRemove,omitempty"`
Modprobe ModprobeSpec `json:"modprobe"`
KmodLoaded bool `json:"kmodLoaded"`
}

type NodeModuleSpec struct {
Expand All @@ -47,9 +46,14 @@ type NodeModulesConfigSpec struct {
}

type NodeModuleStatus struct {
Name string `json:"name"`
Namespace string `json:"namespace"`
KmodLoaded bool `json:"kmodLoaded"`
//+optional
Config *ModuleConfig `json:"config,omitempty"`
InProgress bool `json:"inProgress"`
//+optional
LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`
Name string `json:"name"`
Namespace string `json:"namespace"`
ServiceAccountName string `json:"serviceAccountName"`
}

// NodeModuleConfigStatus is the most recently observed status of the KMM modules on node.
Expand All @@ -67,8 +71,8 @@ type NodeModulesConfigStatus struct {
// +kubebuilder:subresource:status

// NodeModulesConfig keeps spec and state of the KMM modules on a node.
// +kubebuilder:resource:path=nodemodulesconfig,scope=Cluster
// +kubebuilder:resource:path=nodemodulesconfig,scope=Cluster,shortName=nmc
// +kubebuilder:resource:path=nodemodulesconfigs,scope=Cluster
// +kubebuilder:resource:path=nodemodulesconfigs,scope=Cluster,shortName=nmc
// +operator-sdk:csv:customresourcedefinitions:displayName="Node Modules Config"
type NodeModulesConfig struct {
metav1.TypeMeta `json:",inline"`
Expand Down
13 changes: 12 additions & 1 deletion api/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ spec:
kind: Module
name: modules.kmm.sigs.x-k8s.io
version: v1beta1
- kind: NodeModulesConfig
name: nodemodulesconfigs.kmm.sigs.x-k8s.io
version: v1beta1
- description: PreflightValidation initiates a preflight validations for all Modules
on the current Kubernetes cluster.
displayName: Preflight Validation
Expand Down
304 changes: 304 additions & 0 deletions bundle/manifests/kmm.sigs.x-k8s.io_nodemodulesconfigs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,304 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.12.0
creationTimestamp: null
labels:
app.kubernetes.io/component: kmm
app.kubernetes.io/name: kmm
app.kubernetes.io/part-of: kmm
name: nodemodulesconfigs.kmm.sigs.x-k8s.io
spec:
group: kmm.sigs.x-k8s.io
names:
kind: NodeModulesConfig
listKind: NodeModulesConfigList
plural: nodemodulesconfigs
shortNames:
- nmc
singular: nodemodulesconfig
scope: Cluster
versions:
- name: v1beta1
schema:
openAPIV3Schema:
description: NodeModulesConfig keeps spec and state of the KMM modules on
a node.
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: 'NodeModulesConfigSpec describes the desired state of modules
on the node More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status'
properties:
modules:
description: Modules list the spec of all the modules that need to
be executed on the node
items:
properties:
config:
properties:
containerImage:
type: string
inTreeModuleToRemove:
type: string
insecurePull:
description: When InsecurePull is true, the container image
can be pulled without TLS.
type: boolean
kernelVersion:
type: string
modprobe:
properties:
args:
description: 'Args is an optional list of arguments
to be passed to modprobe before the name of the kernel
module. The resulting commands will be: `modprobe
${Args} module_name`.'
properties:
load:
description: Load is an optional list of arguments
to be used when loading the kernel module.
items:
type: string
minItems: 1
type: array
unload:
description: Unload is an optional list of arguments
to be used when unloading the kernel module.
items:
type: string
minItems: 1
type: array
type: object
dirName:
default: /opt
description: DirName is the root directory for modules.
It adds `-d ${DirName}` to the modprobe command-line.
type: string
firmwarePath:
description: FirmwarePath is the path of the firmware(s).
The firmware(s) will be copied to the host for the
kernel to find them.
type: string
moduleName:
description: ModuleName is the name of the Module to
be loaded.
type: string
modulesLoadingOrder:
description: 'ModulesLoadingOrder defines the dependency
between kernel modules loading, in case it was not
created by depmod (independent kernel modules). The
list order should be: upmost module, then the module
it depends on and so on. Example: if moduleA depends
on first loading moduleB, and moduleB depends on first
loading moduleC the entry should look: ModulesLoadingOrder:
- moduleA - moduleB - moduleC In order to load all
3 modules, moduleA shoud be defined in the ModuleName
parameter of this struct'
items:
type: string
type: array
parameters:
description: 'Parameters is an optional list of kernel
module parameters to be provided to modprobe. They
should be in the form of key=value and will be separated
by spaces in the modprobe command. The resulting loading
command will be: `modprobe module_name ${Parameters}`.'
items:
type: string
type: array
rawArgs:
description: 'If RawArgs are specified, they are passed
straight to the modprobe binary; all other properties
in this object are ignored. The resulting commands
will be: `modprobe ${RawArgs}`.'
properties:
load:
description: Load is an optional list of arguments
to be used when loading the kernel module.
items:
type: string
minItems: 1
type: array
unload:
description: Unload is an optional list of arguments
to be used when unloading the kernel module.
items:
type: string
minItems: 1
type: array
type: object
required:
- moduleName
type: object
required:
- containerImage
- insecurePull
- kernelVersion
- modprobe
type: object
name:
type: string
namespace:
type: string
required:
- config
- name
- namespace
type: object
type: array
type: object
status:
description: 'NodeModuleConfigStatus is the most recently observed status
of the KMM modules on node. It is populated by the system and is read-only.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status'
properties:
modules:
description: Modules contain observations about each Module's node
state status
items:
properties:
config:
properties:
containerImage:
type: string
inTreeModuleToRemove:
type: string
insecurePull:
description: When InsecurePull is true, the container image
can be pulled without TLS.
type: boolean
kernelVersion:
type: string
modprobe:
properties:
args:
description: 'Args is an optional list of arguments
to be passed to modprobe before the name of the kernel
module. The resulting commands will be: `modprobe
${Args} module_name`.'
properties:
load:
description: Load is an optional list of arguments
to be used when loading the kernel module.
items:
type: string
minItems: 1
type: array
unload:
description: Unload is an optional list of arguments
to be used when unloading the kernel module.
items:
type: string
minItems: 1
type: array
type: object
dirName:
default: /opt
description: DirName is the root directory for modules.
It adds `-d ${DirName}` to the modprobe command-line.
type: string
firmwarePath:
description: FirmwarePath is the path of the firmware(s).
The firmware(s) will be copied to the host for the
kernel to find them.
type: string
moduleName:
description: ModuleName is the name of the Module to
be loaded.
type: string
modulesLoadingOrder:
description: 'ModulesLoadingOrder defines the dependency
between kernel modules loading, in case it was not
created by depmod (independent kernel modules). The
list order should be: upmost module, then the module
it depends on and so on. Example: if moduleA depends
on first loading moduleB, and moduleB depends on first
loading moduleC the entry should look: ModulesLoadingOrder:
- moduleA - moduleB - moduleC In order to load all
3 modules, moduleA shoud be defined in the ModuleName
parameter of this struct'
items:
type: string
type: array
parameters:
description: 'Parameters is an optional list of kernel
module parameters to be provided to modprobe. They
should be in the form of key=value and will be separated
by spaces in the modprobe command. The resulting loading
command will be: `modprobe module_name ${Parameters}`.'
items:
type: string
type: array
rawArgs:
description: 'If RawArgs are specified, they are passed
straight to the modprobe binary; all other properties
in this object are ignored. The resulting commands
will be: `modprobe ${RawArgs}`.'
properties:
load:
description: Load is an optional list of arguments
to be used when loading the kernel module.
items:
type: string
minItems: 1
type: array
unload:
description: Unload is an optional list of arguments
to be used when unloading the kernel module.
items:
type: string
minItems: 1
type: array
type: object
required:
- moduleName
type: object
required:
- containerImage
- insecurePull
- kernelVersion
- modprobe
type: object
inProgress:
type: boolean
lastTransitionTime:
format: date-time
type: string
name:
type: string
namespace:
type: string
serviceAccountName:
type: string
required:
- inProgress
- name
- namespace
- serviceAccountName
type: object
type: array
type: object
type: object
served: true
storage: true
subresources:
status: {}
status:
acceptedNames:
kind: ""
plural: ""
conditions: null
storedVersions: null
Loading

0 comments on commit 26b385d

Please sign in to comment.