kcr_tinkerbell_org/v1alpha1/
hardware.rs

1// WARNING: generated by kopium - manual changes will be overwritten
2// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/tinkerbell/tink/tinkerbell.org/v1alpha1/hardware.yaml
3// kopium version: 0.22.5
4
5#[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/// HardwareSpec defines the desired state of Hardware.
15#[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    /// BMCRef contains a relation to a BMC state management type in the same
24    /// namespace as the Hardware. This may be used for BMC management by
25    /// orchestrators.
26    #[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    /// Resources represents known resources that are available on a machine.
35    /// Resources may be used for scheduling by orchestrators.
36    #[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    /// UserData is the user data to configure in the hardware's
41    /// metadata
42    #[serde(default, skip_serializing_if = "Option::is_none", rename = "userData")]
43    pub user_data: Option<String>,
44    /// VendorData is the vendor data to configure in the hardware's
45    /// metadata
46    #[serde(default, skip_serializing_if = "Option::is_none", rename = "vendorData")]
47    pub vendor_data: Option<String>,
48}
49
50/// BMCRef contains a relation to a BMC state management type in the same
51/// namespace as the Hardware. This may be used for BMC management by
52/// orchestrators.
53#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
54pub struct HardwareBmcRef {
55    /// APIGroup is the group for the resource being referenced.
56    /// If APIGroup is not specified, the specified Kind must be in the core API group.
57    /// For any other third-party types, APIGroup is required.
58    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")]
59    pub api_group: Option<String>,
60    /// Kind is the type of resource being referenced
61    pub kind: String,
62    /// Name is the name of resource being referenced
63    pub name: String,
64}
65
66/// Disk represents a disk device for Tinkerbell Hardware.
67#[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/// Interface represents a network interface configuration for Hardware.
74#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
75pub struct HardwareInterfaces {
76    /// DHCP configuration.
77    #[serde(default, skip_serializing_if = "Option::is_none")]
78    pub dhcp: Option<HardwareInterfacesDhcp>,
79    /// DisableDHCP disables DHCP for this interface.
80    #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableDhcp")]
81    pub disable_dhcp: Option<bool>,
82    /// Netboot configuration.
83    #[serde(default, skip_serializing_if = "Option::is_none")]
84    pub netboot: Option<HardwareInterfacesNetboot>,
85}
86
87/// DHCP configuration.
88#[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    /// IP configuration.
97    #[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    /// validation pattern for VLANDID is a string number between 0-4096
110    #[serde(default, skip_serializing_if = "Option::is_none")]
111    pub vlan_id: Option<String>,
112}
113
114/// IP configuration.
115#[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/// Netboot configuration.
128#[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    /// IPXE configuration.
135    #[serde(default, skip_serializing_if = "Option::is_none")]
136    pub ipxe: Option<HardwareInterfacesNetbootIpxe>,
137    /// OSIE configuration.
138    #[serde(default, skip_serializing_if = "Option::is_none")]
139    pub osie: Option<HardwareInterfacesNetbootOsie>,
140}
141
142/// IPXE configuration.
143#[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/// OSIE configuration.
152#[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/// HardwareStatus defines the observed state of Hardware.
371#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
372pub struct HardwareStatus {
373    /// HardwareState represents the hardware state.
374    #[serde(default, skip_serializing_if = "Option::is_none")]
375    pub state: Option<String>,
376}
377