/
nodemodulesconfig_types.go
107 lines (86 loc) · 3.67 KB
/
nodemodulesconfig_types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
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 v1beta1
import (
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type ModuleConfig struct {
KernelVersion string `json:"kernelVersion"`
ContainerImage string `json:"containerImage"`
// When InsecurePull is true, the container image can be pulled without TLS.
InsecurePull bool `json:"insecurePull"`
//+optional
InTreeModulesToRemove []string `json:"inTreeModulesToRemove,omitempty"`
//+optional
InTreeModuleToRemove string `json:"inTreeModuleToRemove,omitempty"`
Modprobe ModprobeSpec `json:"modprobe"`
}
type ModuleItem struct {
ImageRepoSecret *v1.LocalObjectReference `json:"imageRepoSecret,omitempty"`
Name string `json:"name"`
Namespace string `json:"namespace"`
ServiceAccountName string `json:"serviceAccountName"`
}
type NodeModuleSpec struct {
ModuleItem `json:",inline"`
Config ModuleConfig `json:"config"`
}
// 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
// +kubebuilder:validation:Required
type NodeModulesConfigSpec struct {
// Modules list the spec of all the modules that need to be executed
// on the node
Modules []NodeModuleSpec `json:"modules,omitempty" patchStrategy:"merge" patchMergeKey:"type"`
}
type NodeModuleStatus struct {
ModuleItem `json:",inline"`
//+optional
Config ModuleConfig `json:"config,omitempty"`
//+optional
LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
}
// 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
type NodeModulesConfigStatus struct {
// Modules contain observations about each Module's node state status
// +patchMergeKey=type
// +patchStrategy=merge
// +optional
Modules []NodeModuleStatus `json:"modules,omitempty" patchStrategy:"merge" patchMergeKey:"type"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// NodeModulesConfig keeps spec and state of the KMM modules on a node.
// +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"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec NodeModulesConfigSpec `json:"spec,omitempty"`
Status NodeModulesConfigStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// NodeModulesConfigList is a list of NodeModulesConfig objects.
type NodeModulesConfigList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
// List of NodeModulesConfig. More info:
// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md
Items []NodeModulesConfig `json:"items"`
}
func init() {
SchemeBuilder.Register(&NodeModulesConfig{}, &NodeModulesConfigList{})
}