Skip to main content

proxmox_api/generated/nodes/node/lxc/vmid/
migrate.rs

1#[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, &params).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, &params).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}