1#[allow(unused_imports)]
6mod prelude {
7 pub use kube::CustomResource;
8 pub use serde::{Serialize, Deserialize};
9 pub use std::collections::BTreeMap;
10 pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
11}
12use self::prelude::*;
13
14#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
16#[kube(group = "tinkerbell.org", version = "v1alpha1", kind = "Hardware", plural = "hardware")]
17#[kube(namespaced)]
18#[kube(status = "HardwareStatus")]
19#[kube(schema = "disabled")]
20#[kube(derive="Default")]
21#[kube(derive="PartialEq")]
22pub struct HardwareSpec {
23 #[serde(default, skip_serializing_if = "Option::is_none", rename = "bmcRef")]
27 pub bmc_ref: Option<HardwareBmcRef>,
28 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub disks: Option<Vec<HardwareDisks>>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub interfaces: Option<Vec<HardwareInterfaces>>,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub metadata: Option<HardwareMetadata>,
34 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub resources: Option<BTreeMap<String, IntOrString>>,
38 #[serde(default, skip_serializing_if = "Option::is_none", rename = "tinkVersion")]
39 pub tink_version: Option<i64>,
40 #[serde(default, skip_serializing_if = "Option::is_none", rename = "userData")]
43 pub user_data: Option<String>,
44 #[serde(default, skip_serializing_if = "Option::is_none", rename = "vendorData")]
47 pub vendor_data: Option<String>,
48}
49
50#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
54pub struct HardwareBmcRef {
55 #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")]
59 pub api_group: Option<String>,
60 pub kind: String,
62 pub name: String,
64}
65
66#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
68pub struct HardwareDisks {
69 #[serde(default, skip_serializing_if = "Option::is_none")]
70 pub device: Option<String>,
71}
72
73#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
75pub struct HardwareInterfaces {
76 #[serde(default, skip_serializing_if = "Option::is_none")]
78 pub dhcp: Option<HardwareInterfacesDhcp>,
79 #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableDhcp")]
81 pub disable_dhcp: Option<bool>,
82 #[serde(default, skip_serializing_if = "Option::is_none")]
84 pub netboot: Option<HardwareInterfacesNetboot>,
85}
86
87#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
89pub struct HardwareInterfacesDhcp {
90 #[serde(default, skip_serializing_if = "Option::is_none")]
91 pub arch: Option<String>,
92 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub hostname: Option<String>,
94 #[serde(default, skip_serializing_if = "Option::is_none")]
95 pub iface_name: Option<String>,
96 #[serde(default, skip_serializing_if = "Option::is_none")]
98 pub ip: Option<HardwareInterfacesDhcpIp>,
99 #[serde(default, skip_serializing_if = "Option::is_none")]
100 pub lease_time: Option<i64>,
101 #[serde(default, skip_serializing_if = "Option::is_none")]
102 pub mac: Option<String>,
103 #[serde(default, skip_serializing_if = "Option::is_none")]
104 pub name_servers: Option<Vec<String>>,
105 #[serde(default, skip_serializing_if = "Option::is_none")]
106 pub time_servers: Option<Vec<String>>,
107 #[serde(default, skip_serializing_if = "Option::is_none")]
108 pub uefi: Option<bool>,
109 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub vlan_id: Option<String>,
112}
113
114#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
116pub struct HardwareInterfacesDhcpIp {
117 #[serde(default, skip_serializing_if = "Option::is_none")]
118 pub address: Option<String>,
119 #[serde(default, skip_serializing_if = "Option::is_none")]
120 pub family: Option<i64>,
121 #[serde(default, skip_serializing_if = "Option::is_none")]
122 pub gateway: Option<String>,
123 #[serde(default, skip_serializing_if = "Option::is_none")]
124 pub netmask: Option<String>,
125}
126
127#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
129pub struct HardwareInterfacesNetboot {
130 #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPXE")]
131 pub allow_pxe: Option<bool>,
132 #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowWorkflow")]
133 pub allow_workflow: Option<bool>,
134 #[serde(default, skip_serializing_if = "Option::is_none")]
136 pub ipxe: Option<HardwareInterfacesNetbootIpxe>,
137 #[serde(default, skip_serializing_if = "Option::is_none")]
139 pub osie: Option<HardwareInterfacesNetbootOsie>,
140}
141
142#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
144pub struct HardwareInterfacesNetbootIpxe {
145 #[serde(default, skip_serializing_if = "Option::is_none")]
146 pub contents: Option<String>,
147 #[serde(default, skip_serializing_if = "Option::is_none")]
148 pub url: Option<String>,
149}
150
151#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
153pub struct HardwareInterfacesNetbootOsie {
154 #[serde(default, skip_serializing_if = "Option::is_none", rename = "baseURL")]
155 pub base_url: Option<String>,
156 #[serde(default, skip_serializing_if = "Option::is_none")]
157 pub initrd: Option<String>,
158 #[serde(default, skip_serializing_if = "Option::is_none")]
159 pub kernel: Option<String>,
160}
161
162#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
163pub struct HardwareMetadata {
164 #[serde(default, skip_serializing_if = "Option::is_none")]
165 pub bonding_mode: Option<i64>,
166 #[serde(default, skip_serializing_if = "Option::is_none")]
167 pub custom: Option<HardwareMetadataCustom>,
168 #[serde(default, skip_serializing_if = "Option::is_none")]
169 pub facility: Option<HardwareMetadataFacility>,
170 #[serde(default, skip_serializing_if = "Option::is_none")]
171 pub instance: Option<HardwareMetadataInstance>,
172 #[serde(default, skip_serializing_if = "Option::is_none")]
173 pub manufacturer: Option<HardwareMetadataManufacturer>,
174 #[serde(default, skip_serializing_if = "Option::is_none")]
175 pub state: Option<String>,
176}
177
178#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
179pub struct HardwareMetadataCustom {
180 #[serde(default, skip_serializing_if = "Option::is_none")]
181 pub preinstalled_operating_system_version: Option<HardwareMetadataCustomPreinstalledOperatingSystemVersion>,
182 #[serde(default, skip_serializing_if = "Option::is_none")]
183 pub private_subnets: Option<Vec<String>>,
184}
185
186#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
187pub struct HardwareMetadataCustomPreinstalledOperatingSystemVersion {
188 #[serde(default, skip_serializing_if = "Option::is_none")]
189 pub distro: Option<String>,
190 #[serde(default, skip_serializing_if = "Option::is_none")]
191 pub image_tag: Option<String>,
192 #[serde(default, skip_serializing_if = "Option::is_none")]
193 pub os_slug: Option<String>,
194 #[serde(default, skip_serializing_if = "Option::is_none")]
195 pub slug: Option<String>,
196 #[serde(default, skip_serializing_if = "Option::is_none")]
197 pub version: Option<String>,
198}
199
200#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
201pub struct HardwareMetadataFacility {
202 #[serde(default, skip_serializing_if = "Option::is_none")]
203 pub facility_code: Option<String>,
204 #[serde(default, skip_serializing_if = "Option::is_none")]
205 pub plan_slug: Option<String>,
206 #[serde(default, skip_serializing_if = "Option::is_none")]
207 pub plan_version_slug: Option<String>,
208}
209
210#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
211pub struct HardwareMetadataInstance {
212 #[serde(default, skip_serializing_if = "Option::is_none")]
213 pub allow_pxe: Option<bool>,
214 #[serde(default, skip_serializing_if = "Option::is_none")]
215 pub always_pxe: Option<bool>,
216 #[serde(default, skip_serializing_if = "Option::is_none")]
217 pub crypted_root_password: Option<String>,
218 #[serde(default, skip_serializing_if = "Option::is_none")]
219 pub hostname: Option<String>,
220 #[serde(default, skip_serializing_if = "Option::is_none")]
221 pub id: Option<String>,
222 #[serde(default, skip_serializing_if = "Option::is_none")]
223 pub ips: Option<Vec<HardwareMetadataInstanceIps>>,
224 #[serde(default, skip_serializing_if = "Option::is_none")]
225 pub ipxe_script_url: Option<String>,
226 #[serde(default, skip_serializing_if = "Option::is_none")]
227 pub network_ready: Option<bool>,
228 #[serde(default, skip_serializing_if = "Option::is_none")]
229 pub operating_system: Option<HardwareMetadataInstanceOperatingSystem>,
230 #[serde(default, skip_serializing_if = "Option::is_none")]
231 pub rescue: Option<bool>,
232 #[serde(default, skip_serializing_if = "Option::is_none")]
233 pub ssh_keys: Option<Vec<String>>,
234 #[serde(default, skip_serializing_if = "Option::is_none")]
235 pub state: Option<String>,
236 #[serde(default, skip_serializing_if = "Option::is_none")]
237 pub storage: Option<HardwareMetadataInstanceStorage>,
238 #[serde(default, skip_serializing_if = "Option::is_none")]
239 pub tags: Option<Vec<String>>,
240 #[serde(default, skip_serializing_if = "Option::is_none")]
241 pub userdata: Option<String>,
242}
243
244#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
245pub struct HardwareMetadataInstanceIps {
246 #[serde(default, skip_serializing_if = "Option::is_none")]
247 pub address: Option<String>,
248 #[serde(default, skip_serializing_if = "Option::is_none")]
249 pub family: Option<i64>,
250 #[serde(default, skip_serializing_if = "Option::is_none")]
251 pub gateway: Option<String>,
252 #[serde(default, skip_serializing_if = "Option::is_none")]
253 pub management: Option<bool>,
254 #[serde(default, skip_serializing_if = "Option::is_none")]
255 pub netmask: Option<String>,
256 #[serde(default, skip_serializing_if = "Option::is_none")]
257 pub public: Option<bool>,
258}
259
260#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
261pub struct HardwareMetadataInstanceOperatingSystem {
262 #[serde(default, skip_serializing_if = "Option::is_none")]
263 pub distro: Option<String>,
264 #[serde(default, skip_serializing_if = "Option::is_none")]
265 pub image_tag: Option<String>,
266 #[serde(default, skip_serializing_if = "Option::is_none")]
267 pub os_slug: Option<String>,
268 #[serde(default, skip_serializing_if = "Option::is_none")]
269 pub slug: Option<String>,
270 #[serde(default, skip_serializing_if = "Option::is_none")]
271 pub version: Option<String>,
272}
273
274#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
275pub struct HardwareMetadataInstanceStorage {
276 #[serde(default, skip_serializing_if = "Option::is_none")]
277 pub disks: Option<Vec<HardwareMetadataInstanceStorageDisks>>,
278 #[serde(default, skip_serializing_if = "Option::is_none")]
279 pub filesystems: Option<Vec<HardwareMetadataInstanceStorageFilesystems>>,
280 #[serde(default, skip_serializing_if = "Option::is_none")]
281 pub raid: Option<Vec<HardwareMetadataInstanceStorageRaid>>,
282}
283
284#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
285pub struct HardwareMetadataInstanceStorageDisks {
286 #[serde(default, skip_serializing_if = "Option::is_none")]
287 pub device: Option<String>,
288 #[serde(default, skip_serializing_if = "Option::is_none")]
289 pub partitions: Option<Vec<HardwareMetadataInstanceStorageDisksPartitions>>,
290 #[serde(default, skip_serializing_if = "Option::is_none")]
291 pub wipe_table: Option<bool>,
292}
293
294#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
295pub struct HardwareMetadataInstanceStorageDisksPartitions {
296 #[serde(default, skip_serializing_if = "Option::is_none")]
297 pub label: Option<String>,
298 #[serde(default, skip_serializing_if = "Option::is_none")]
299 pub number: Option<i64>,
300 #[serde(default, skip_serializing_if = "Option::is_none")]
301 pub size: Option<i64>,
302 #[serde(default, skip_serializing_if = "Option::is_none")]
303 pub start: Option<i64>,
304 #[serde(default, skip_serializing_if = "Option::is_none")]
305 pub type_guid: Option<String>,
306}
307
308#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
309pub struct HardwareMetadataInstanceStorageFilesystems {
310 #[serde(default, skip_serializing_if = "Option::is_none")]
311 pub mount: Option<HardwareMetadataInstanceStorageFilesystemsMount>,
312}
313
314#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
315pub struct HardwareMetadataInstanceStorageFilesystemsMount {
316 #[serde(default, skip_serializing_if = "Option::is_none")]
317 pub create: Option<HardwareMetadataInstanceStorageFilesystemsMountCreate>,
318 #[serde(default, skip_serializing_if = "Option::is_none")]
319 pub device: Option<String>,
320 #[serde(default, skip_serializing_if = "Option::is_none")]
321 pub files: Option<Vec<HardwareMetadataInstanceStorageFilesystemsMountFiles>>,
322 #[serde(default, skip_serializing_if = "Option::is_none")]
323 pub format: Option<String>,
324 #[serde(default, skip_serializing_if = "Option::is_none")]
325 pub point: Option<String>,
326}
327
328#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
329pub struct HardwareMetadataInstanceStorageFilesystemsMountCreate {
330 #[serde(default, skip_serializing_if = "Option::is_none")]
331 pub force: Option<bool>,
332 #[serde(default, skip_serializing_if = "Option::is_none")]
333 pub options: Option<Vec<String>>,
334}
335
336#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
337pub struct HardwareMetadataInstanceStorageFilesystemsMountFiles {
338 #[serde(default, skip_serializing_if = "Option::is_none")]
339 pub contents: Option<String>,
340 #[serde(default, skip_serializing_if = "Option::is_none")]
341 pub gid: Option<i64>,
342 #[serde(default, skip_serializing_if = "Option::is_none")]
343 pub mode: Option<i64>,
344 #[serde(default, skip_serializing_if = "Option::is_none")]
345 pub path: Option<String>,
346 #[serde(default, skip_serializing_if = "Option::is_none")]
347 pub uid: Option<i64>,
348}
349
350#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
351pub struct HardwareMetadataInstanceStorageRaid {
352 #[serde(default, skip_serializing_if = "Option::is_none")]
353 pub devices: Option<Vec<String>>,
354 #[serde(default, skip_serializing_if = "Option::is_none")]
355 pub level: Option<String>,
356 #[serde(default, skip_serializing_if = "Option::is_none")]
357 pub name: Option<String>,
358 #[serde(default, skip_serializing_if = "Option::is_none")]
359 pub spare: Option<i64>,
360}
361
362#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
363pub struct HardwareMetadataManufacturer {
364 #[serde(default, skip_serializing_if = "Option::is_none")]
365 pub id: Option<String>,
366 #[serde(default, skip_serializing_if = "Option::is_none")]
367 pub slug: Option<String>,
368}
369
370#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
372pub struct HardwareStatus {
373 #[serde(default, skip_serializing_if = "Option::is_none")]
375 pub state: Option<String>,
376}
377