proxmox_api/generated/nodes/node/lxc/vmid/
migrate.rs1#[derive(Debug, Clone)]
2pub struct MigrateClient<T> {
3 client: T,
4 path: String,
5}
6impl<T> MigrateClient<T>
7where
8 T: crate::client::Client,
9{
10 pub fn new(client: T, parent_path: &str) -> Self {
11 Self {
12 client,
13 path: format!("{}{}", parent_path, "/migrate"),
14 }
15 }
16}
17impl<T> MigrateClient<T>
18where
19 T: crate::client::Client,
20{
21 #[doc = "Get preconditions for migration."]
22 #[doc = ""]
23 #[doc = "Permission check: perm(\"/vms/{vmid}\", [\"VM.Migrate\"])"]
24 pub async fn get(&self, params: GetParams) -> Result<GetOutput, T::Error> {
25 let path = self.path.to_string();
26 self.client.get(&path, ¶ms).await
27 }
28}
29impl<T> MigrateClient<T>
30where
31 T: crate::client::Client,
32{
33 #[doc = "Migrate the container to another node. Creates a new migration task."]
34 #[doc = ""]
35 #[doc = "Permission check: perm(\"/vms/{vmid}\", [\"VM.Migrate\"])"]
36 pub async fn post(&self, params: PostParams) -> Result<String, T::Error> {
37 let path = self.path.to_string();
38 self.client.post(&path, ¶ms).await
39 }
40}
41impl BlockingHaResourcesGetOutputNotAllowedNodesBlockingHaResourcesItems {
42 pub fn new(cause: Cause, sid: String) -> Self {
43 Self {
44 cause,
45 sid,
46 additional_properties: ::std::default::Default::default(),
47 }
48 }
49}
50#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize)]
51pub struct BlockingHaResourcesGetOutputNotAllowedNodesBlockingHaResourcesItems {
52 #[doc = "The reason why the HA resource is blocking the migration."]
53 #[doc = ""]
54 pub cause: Cause,
55 #[doc = "The blocking HA resource id"]
56 #[doc = ""]
57 pub sid: String,
58 #[serde(
59 flatten,
60 default,
61 skip_serializing_if = "::std::collections::HashMap::is_empty"
62 )]
63 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
64}
65impl GetOutput {
66 pub fn new(running: bool) -> Self {
67 Self {
68 running,
69 allowed_nodes: ::std::default::Default::default(),
70 dependent_ha_resources: ::std::default::Default::default(),
71 not_allowed_nodes: ::std::default::Default::default(),
72 additional_properties: ::std::default::Default::default(),
73 }
74 }
75}
76#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize)]
77pub struct GetOutput {
78 #[serde(rename = "allowed-nodes")]
79 #[serde(skip_serializing_if = "::std::vec::Vec::is_empty", default)]
80 #[doc = "List of nodes allowed for migration."]
81 #[doc = ""]
82 pub allowed_nodes: Vec<String>,
83 #[serde(rename = "dependent-ha-resources")]
84 #[serde(skip_serializing_if = "::std::vec::Vec::is_empty", default)]
85 #[doc = "HA resources, which will be migrated to the same target node as the VM, because these are in positive affinity with the VM."]
86 #[doc = ""]
87 pub dependent_ha_resources: Vec<String>,
88 #[serde(rename = "not-allowed-nodes")]
89 #[serde(skip_serializing_if = "Option::is_none", default)]
90 #[doc = "List of not allowed nodes with additional information."]
91 #[doc = ""]
92 pub not_allowed_nodes: Option<NotAllowedNodesGetOutputNotAllowedNodes>,
93 #[serde(
94 serialize_with = "crate::types::serialize_bool",
95 deserialize_with = "crate::types::deserialize_bool"
96 )]
97 #[doc = "Determines if the container is running."]
98 #[doc = ""]
99 pub running: bool,
100 #[serde(
101 flatten,
102 default,
103 skip_serializing_if = "::std::collections::HashMap::is_empty"
104 )]
105 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
106}
107#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, Default)]
108pub struct GetParams {
109 #[serde(skip_serializing_if = "Option::is_none", default)]
110 #[doc = "Target node."]
111 #[doc = ""]
112 pub target: Option<String>,
113 #[serde(
114 flatten,
115 default,
116 skip_serializing_if = "::std::collections::HashMap::is_empty"
117 )]
118 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
119}
120#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, Default)]
121pub struct NotAllowedNodesGetOutputNotAllowedNodes {
122 #[serde(rename = "blocking-ha-resources")]
123 #[serde(skip_serializing_if = "::std::vec::Vec::is_empty", default)]
124 #[doc = "HA resources, which are blocking the container from being migrated to the node."]
125 #[doc = ""]
126 pub blocking_ha_resources:
127 Vec<BlockingHaResourcesGetOutputNotAllowedNodesBlockingHaResourcesItems>,
128 #[serde(
129 flatten,
130 default,
131 skip_serializing_if = "::std::collections::HashMap::is_empty"
132 )]
133 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
134}
135impl PostParams {
136 pub fn new(target: String) -> Self {
137 Self {
138 target,
139 bwlimit: ::std::default::Default::default(),
140 online: ::std::default::Default::default(),
141 restart: ::std::default::Default::default(),
142 target_storage: ::std::default::Default::default(),
143 timeout: ::std::default::Default::default(),
144 additional_properties: ::std::default::Default::default(),
145 }
146 }
147}
148#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize)]
149pub struct PostParams {
150 #[serde(skip_serializing_if = "Option::is_none", default)]
151 #[doc = "Override I/O bandwidth limit (in KiB/s)."]
152 #[doc = ""]
153 pub bwlimit: Option<BwlimitNum>,
154 #[serde(
155 serialize_with = "crate::types::serialize_bool_optional",
156 deserialize_with = "crate::types::deserialize_bool_optional"
157 )]
158 #[serde(skip_serializing_if = "Option::is_none", default)]
159 #[doc = "Use online/live migration."]
160 #[doc = ""]
161 pub online: Option<bool>,
162 #[serde(
163 serialize_with = "crate::types::serialize_bool_optional",
164 deserialize_with = "crate::types::deserialize_bool_optional"
165 )]
166 #[serde(skip_serializing_if = "Option::is_none", default)]
167 #[doc = "Use restart migration"]
168 #[doc = ""]
169 pub restart: Option<bool>,
170 #[doc = "Target node."]
171 #[doc = ""]
172 pub target: String,
173 #[serde(rename = "target-storage")]
174 #[serde(skip_serializing_if = "Option::is_none", default)]
175 #[doc = "Mapping from source to target storages. Providing only a single storage ID maps all source storages to that storage. Providing the special value '1' will map each source storage to itself."]
176 #[doc = ""]
177 pub target_storage: Option<String>,
178 #[serde(skip_serializing_if = "Option::is_none", default)]
179 #[doc = "Timeout in seconds for shutdown for restart migration"]
180 #[doc = ""]
181 pub timeout: Option<TimeoutInt>,
182 #[serde(
183 flatten,
184 default,
185 skip_serializing_if = "::std::collections::HashMap::is_empty"
186 )]
187 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
188}
189#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
190#[doc = "The reason why the HA resource is blocking the migration."]
191#[doc = ""]
192pub enum Cause {
193 #[serde(rename = "resource-affinity")]
194 ResourceAffinity,
195}
196impl TryFrom<&str> for Cause {
197 type Error = String;
198 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
199 match value {
200 "resource-affinity" => Ok(Self::ResourceAffinity),
201 v => Err(format!("Unknown variant {v}")),
202 }
203 }
204}
205#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
206pub struct TimeoutInt(i128);
207impl crate::types::bounded_integer::BoundedInteger for TimeoutInt {
208 const MIN: Option<i128> = None::<i128>;
209 const MAX: Option<i128> = None::<i128>;
210 const DEFAULT: Option<i128> = Some(180i128);
211 const TYPE_DESCRIPTION: &'static str = "a valid integer";
212 fn get(&self) -> i128 {
213 self.0
214 }
215 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
216 Self::validate(value)?;
217 Ok(Self(value))
218 }
219}
220impl std::convert::TryFrom<i128> for TimeoutInt {
221 type Error = crate::types::bounded_integer::BoundedIntegerError;
222 fn try_from(value: i128) -> Result<Self, Self::Error> {
223 crate::types::bounded_integer::BoundedInteger::new(value)
224 }
225}
226impl ::serde::Serialize for TimeoutInt {
227 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
228 where
229 S: ::serde::Serializer,
230 {
231 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
232 }
233}
234impl<'de> ::serde::Deserialize<'de> for TimeoutInt {
235 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
236 where
237 D: ::serde::Deserializer<'de>,
238 {
239 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
240 }
241}
242#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
243pub struct BwlimitNum(f64);
244impl crate::types::bounded_number::BoundedNumber for BwlimitNum {
245 const MIN: Option<f64> = Some(0f64);
246 const MAX: Option<f64> = None::<f64>;
247 const DEFAULT: Option<f64> = None::<f64>;
248 const TYPE_DESCRIPTION: &'static str = "an number greater than or equal to 0";
249 fn get(&self) -> f64 {
250 self.0
251 }
252 fn new(value: f64) -> Result<Self, crate::types::bounded_number::BoundedNumberError> {
253 Self::validate(value)?;
254 Ok(Self(value))
255 }
256}
257impl std::convert::TryFrom<f64> for BwlimitNum {
258 type Error = crate::types::bounded_number::BoundedNumberError;
259 fn try_from(value: f64) -> Result<Self, Self::Error> {
260 crate::types::bounded_number::BoundedNumber::new(value)
261 }
262}
263impl std::convert::TryFrom<f32> for BwlimitNum {
264 type Error = crate::types::bounded_number::BoundedNumberError;
265 fn try_from(value: f32) -> Result<Self, Self::Error> {
266 crate::types::bounded_number::BoundedNumber::new(value as f64)
267 }
268}
269impl std::convert::TryFrom<i32> for BwlimitNum {
270 type Error = crate::types::bounded_number::BoundedNumberError;
271 fn try_from(value: i32) -> Result<Self, Self::Error> {
272 crate::types::bounded_number::BoundedNumber::new(value as f64)
273 }
274}
275impl std::convert::TryFrom<i64> for BwlimitNum {
276 type Error = crate::types::bounded_number::BoundedNumberError;
277 fn try_from(value: i64) -> Result<Self, Self::Error> {
278 crate::types::bounded_number::BoundedNumber::new(value as f64)
279 }
280}
281impl ::serde::Serialize for BwlimitNum {
282 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
283 where
284 S: ::serde::Serializer,
285 {
286 crate::types::bounded_number::serialize_bounded_number(self, serializer)
287 }
288}
289impl<'de> ::serde::Deserialize<'de> for BwlimitNum {
290 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
291 where
292 D: ::serde::Deserializer<'de>,
293 {
294 crate::types::bounded_number::deserialize_bounded_number(deserializer)
295 }
296}