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
108
109
110
111
112
113
114
115
116
117
118
119
/*
* Proxmox Virtual Environment API
*
* Generated from apidoc.js. NOT an official Proxmox specification. See https://pve.proxmox.com/pve-docs/api-viewer/ for the upstream documentation.
*
* The version of the OpenAPI document: 9.x
*
* Generated by: https://openapi-generator.tech
*/
use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct PveQemuEfidiskConfig {
/// Size and type of the OVMF EFI vars. '4m' is newer and recommended, and required for Secure Boot. For backwards compatibility, '2m' is used if not otherwise specified. Ignored for VMs with arch=aarch64 (ARM).
#[serde(rename = "efitype", skip_serializing_if = "Option::is_none")]
pub efitype: Option<models::PveEfitypeEnum>,
/// The drive's backing volume.
#[serde(rename = "file")]
pub file: String,
/// The drive's backing file's data format.
#[serde(rename = "format", skip_serializing_if = "Option::is_none")]
pub format: Option<models::PveFormatEnum>,
/// Informational marker indicating the version of the latest Microsoft UEFI certificates that have been enrolled by Proxmox VE. The value '2023k' means that the 'Microsoft UEFI CA 2023', the 'Windows UEFI CA 2023' and the 'Microsoft Corporation KEK 2K CA 2023' certificates are included. The values '2023' and '2023w' are deprecated and for compatibility only.
#[serde(rename = "ms-cert", skip_serializing_if = "Option::is_none")]
pub ms_cert: Option<models::PveMsCertEnum>,
/// Use am EFI vars template with distribution-specific and Microsoft Standard keys enrolled, if used with 'efitype=4m'. Note that this will enable Secure Boot by default, though it can still be turned off from within the VM.
#[serde(rename = "pre-enrolled-keys", skip_serializing_if = "Option::is_none")]
pub pre_enrolled_keys: Option<models::PveBoolean>,
/// Disk size. This is purely informational and has no effect.
#[serde(rename = "size", skip_serializing_if = "Option::is_none")]
pub size: Option<String>,
#[serde(rename = "volume", skip_serializing_if = "Option::is_none")]
pub volume: Option<String>,
}
impl PveQemuEfidiskConfig {
pub fn new(file: String) -> PveQemuEfidiskConfig {
PveQemuEfidiskConfig {
efitype: None,
file,
format: None,
ms_cert: None,
pre_enrolled_keys: None,
size: None,
volume: None,
}
}
}
impl PveQemuEfidiskConfig {
/// Serialise this PveQemuEfidiskConfig into Proxmox's CLI-style shorthand
/// string (`key=value,…`). The property marked `x-pve-default-key`
/// is emitted positionally without a `key=` prefix; aliases collapse
/// multiple property names to the same wire key.
///
/// Example: `PveQemuEfidiskConfig `
/// → `"virtio,bridge=vmbr0"`
pub fn to_shorthand(&self) -> String {
let mut parts: Vec<String> = Vec::new();
parts.push(format!("{}", self.file));
if let Some(ref v) = self.efitype {
parts.push(format!("efitype={}", v));
}
if let Some(ref v) = self.format {
parts.push(format!("format={}", v));
}
if let Some(ref v) = self.ms_cert {
parts.push(format!("ms-cert={}", v));
}
if let Some(ref v) = self.pre_enrolled_keys {
parts.push(format!("pre-enrolled-keys={}", v));
}
if let Some(ref v) = self.size {
parts.push(format!("size={}", v));
}
if let Some(ref v) = self.volume {
parts.push(format!("file={}", v));
}
parts.join(",")
}
}