exoscale/apis/
instance_api.rs

1/*
2 * Exoscale Public API
3 *
4 *  Infrastructure automation API, allowing programmatic access to all Exoscale products and services.  The [OpenAPI Specification](http://spec.openapis.org/oas/v3.0.3.html) source of this documentation can be obtained here:  * [JSON format](https://bump.sh/doc/exoscale-api.json) * [YAML format](https://bump.sh/doc/exoscale-api.yaml)
5 *
6 * The version of the OpenAPI document: 2.0.0
7 * Contact: api@exoscale.com
8 * Generated by: https://openapi-generator.tech
9 */
10
11use reqwest;
12
13use super::{configuration, Error};
14use crate::{apis::ResponseContent, sign_request};
15
16/// struct for typed errors of method [`add_instance_protection`]
17#[derive(Debug, Clone, Serialize, Deserialize)]
18#[serde(untagged)]
19pub enum AddInstanceProtectionError {
20    UnknownValue(serde_json::Value),
21}
22
23/// struct for typed errors of method [`create_instance`]
24#[derive(Debug, Clone, Serialize, Deserialize)]
25#[serde(untagged)]
26pub enum CreateInstanceError {
27    UnknownValue(serde_json::Value),
28}
29
30/// struct for typed errors of method [`create_snapshot`]
31#[derive(Debug, Clone, Serialize, Deserialize)]
32#[serde(untagged)]
33pub enum CreateSnapshotError {
34    UnknownValue(serde_json::Value),
35}
36
37/// struct for typed errors of method [`delete_instance`]
38#[derive(Debug, Clone, Serialize, Deserialize)]
39#[serde(untagged)]
40pub enum DeleteInstanceError {
41    UnknownValue(serde_json::Value),
42}
43
44/// struct for typed errors of method [`get_instance`]
45#[derive(Debug, Clone, Serialize, Deserialize)]
46#[serde(untagged)]
47pub enum GetInstanceError {
48    UnknownValue(serde_json::Value),
49}
50
51/// struct for typed errors of method [`list_instances`]
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(untagged)]
54pub enum ListInstancesError {
55    UnknownValue(serde_json::Value),
56}
57
58/// struct for typed errors of method [`reboot_instance`]
59#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(untagged)]
61pub enum RebootInstanceError {
62    UnknownValue(serde_json::Value),
63}
64
65/// struct for typed errors of method [`remove_instance_protection`]
66#[derive(Debug, Clone, Serialize, Deserialize)]
67#[serde(untagged)]
68pub enum RemoveInstanceProtectionError {
69    UnknownValue(serde_json::Value),
70}
71
72/// struct for typed errors of method [`reset_instance`]
73#[derive(Debug, Clone, Serialize, Deserialize)]
74#[serde(untagged)]
75pub enum ResetInstanceError {
76    UnknownValue(serde_json::Value),
77}
78
79/// struct for typed errors of method [`reset_instance_field`]
80#[derive(Debug, Clone, Serialize, Deserialize)]
81#[serde(untagged)]
82pub enum ResetInstanceFieldError {
83    UnknownValue(serde_json::Value),
84}
85
86/// struct for typed errors of method [`resize_instance_disk`]
87#[derive(Debug, Clone, Serialize, Deserialize)]
88#[serde(untagged)]
89pub enum ResizeInstanceDiskError {
90    UnknownValue(serde_json::Value),
91}
92
93/// struct for typed errors of method [`revert_instance_to_snapshot`]
94#[derive(Debug, Clone, Serialize, Deserialize)]
95#[serde(untagged)]
96pub enum RevertInstanceToSnapshotError {
97    UnknownValue(serde_json::Value),
98}
99
100/// struct for typed errors of method [`scale_instance`]
101#[derive(Debug, Clone, Serialize, Deserialize)]
102#[serde(untagged)]
103pub enum ScaleInstanceError {
104    UnknownValue(serde_json::Value),
105}
106
107/// struct for typed errors of method [`start_instance`]
108#[derive(Debug, Clone, Serialize, Deserialize)]
109#[serde(untagged)]
110pub enum StartInstanceError {
111    UnknownValue(serde_json::Value),
112}
113
114/// struct for typed errors of method [`stop_instance`]
115#[derive(Debug, Clone, Serialize, Deserialize)]
116#[serde(untagged)]
117pub enum StopInstanceError {
118    UnknownValue(serde_json::Value),
119}
120
121/// struct for typed errors of method [`update_instance`]
122#[derive(Debug, Clone, Serialize, Deserialize)]
123#[serde(untagged)]
124pub enum UpdateInstanceError {
125    UnknownValue(serde_json::Value),
126}
127
128///
129pub async fn add_instance_protection(
130    configuration: &configuration::Configuration,
131    id: &str,
132) -> Result<serde_json::Value, Error<AddInstanceProtectionError>> {
133    let local_var_configuration = configuration;
134
135    let local_var_client = &local_var_configuration.client;
136
137    let local_var_uri_str = format!(
138        "{}/instance/{id}:add-protection",
139        local_var_configuration.base_path,
140        id = crate::apis::urlencode(id)
141    );
142    let mut local_var_req_builder =
143        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
144
145    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
146        local_var_req_builder =
147            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
148    }
149
150    let local_var_req = local_var_req_builder.build()?;
151    let local_var_resp = local_var_client.execute(local_var_req).await?;
152
153    let local_var_status = local_var_resp.status();
154    let local_var_content = local_var_resp.text().await?;
155
156    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
157        serde_json::from_str(&local_var_content).map_err(Error::from)
158    } else {
159        let local_var_entity: Option<AddInstanceProtectionError> =
160            serde_json::from_str(&local_var_content).ok();
161        let local_var_error = ResponseContent {
162            status: local_var_status,
163            content: local_var_content,
164            entity: local_var_entity,
165        };
166        Err(Error::ResponseError(local_var_error))
167    }
168}
169
170///
171pub async fn create_instance(
172    configuration: &configuration::Configuration,
173    create_instance_request: crate::models::CreateInstanceRequest,
174) -> Result<crate::models::Operation, Error<CreateInstanceError>> {
175    let local_var_configuration = configuration;
176
177    let local_var_client = &local_var_configuration.client;
178
179    let local_var_uri_str = format!("{}/instance", local_var_configuration.base_path);
180    let mut local_var_req_builder =
181        local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
182
183    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
184        local_var_req_builder =
185            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
186    }
187    local_var_req_builder = local_var_req_builder.json(&create_instance_request);
188
189    let mut local_var_req = local_var_req_builder.build()?;
190
191    let _ = sign_request(&mut local_var_req, configuration);
192
193    let local_var_resp = local_var_client.execute(local_var_req).await?;
194
195    let local_var_status = local_var_resp.status();
196    let local_var_content = local_var_resp.text().await?;
197
198    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
199        serde_json::from_str(&local_var_content).map_err(Error::from)
200    } else {
201        let local_var_entity: Option<CreateInstanceError> =
202            serde_json::from_str(&local_var_content).ok();
203        let local_var_error = ResponseContent {
204            status: local_var_status,
205            content: local_var_content,
206            entity: local_var_entity,
207        };
208        Err(Error::ResponseError(local_var_error))
209    }
210}
211
212///
213pub async fn create_snapshot(
214    configuration: &configuration::Configuration,
215    id: &str,
216) -> Result<crate::models::Operation, Error<CreateSnapshotError>> {
217    let local_var_configuration = configuration;
218
219    let local_var_client = &local_var_configuration.client;
220
221    let local_var_uri_str = format!(
222        "{}/instance/{id}:create-snapshot",
223        local_var_configuration.base_path,
224        id = crate::apis::urlencode(id)
225    );
226    let mut local_var_req_builder =
227        local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
228
229    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
230        local_var_req_builder =
231            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
232    }
233
234    let local_var_req = local_var_req_builder.build()?;
235    let local_var_resp = local_var_client.execute(local_var_req).await?;
236
237    let local_var_status = local_var_resp.status();
238    let local_var_content = local_var_resp.text().await?;
239
240    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
241        serde_json::from_str(&local_var_content).map_err(Error::from)
242    } else {
243        let local_var_entity: Option<CreateSnapshotError> =
244            serde_json::from_str(&local_var_content).ok();
245        let local_var_error = ResponseContent {
246            status: local_var_status,
247            content: local_var_content,
248            entity: local_var_entity,
249        };
250        Err(Error::ResponseError(local_var_error))
251    }
252}
253
254///
255pub async fn delete_instance(
256    configuration: &configuration::Configuration,
257    id: &str,
258) -> Result<crate::models::Operation, Error<DeleteInstanceError>> {
259    let local_var_configuration = configuration;
260
261    let local_var_client = &local_var_configuration.client;
262
263    let local_var_uri_str = format!(
264        "{}/instance/{id}",
265        local_var_configuration.base_path,
266        id = crate::apis::urlencode(id)
267    );
268    let mut local_var_req_builder =
269        local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
270
271    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
272        local_var_req_builder =
273            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
274    }
275
276    let mut local_var_req = local_var_req_builder.build()?;
277
278    let _ = sign_request(&mut local_var_req, configuration);
279
280    let local_var_resp = local_var_client.execute(local_var_req).await?;
281
282    let local_var_status = local_var_resp.status();
283    let local_var_content = local_var_resp.text().await?;
284
285    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
286        serde_json::from_str(&local_var_content).map_err(Error::from)
287    } else {
288        let local_var_entity: Option<DeleteInstanceError> =
289            serde_json::from_str(&local_var_content).ok();
290        let local_var_error = ResponseContent {
291            status: local_var_status,
292            content: local_var_content,
293            entity: local_var_entity,
294        };
295        Err(Error::ResponseError(local_var_error))
296    }
297}
298
299///
300pub async fn get_instance(
301    configuration: &configuration::Configuration,
302    id: &str,
303) -> Result<crate::models::Instance, Error<GetInstanceError>> {
304    let local_var_configuration = configuration;
305
306    let local_var_client = &local_var_configuration.client;
307
308    let local_var_uri_str = format!(
309        "{}/instance/{id}",
310        local_var_configuration.base_path,
311        id = crate::apis::urlencode(id)
312    );
313    let mut local_var_req_builder =
314        local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
315
316    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
317        local_var_req_builder =
318            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
319    }
320
321    let local_var_req = local_var_req_builder.build()?;
322    let local_var_resp = local_var_client.execute(local_var_req).await?;
323
324    let local_var_status = local_var_resp.status();
325    let local_var_content = local_var_resp.text().await?;
326
327    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
328        serde_json::from_str(&local_var_content).map_err(Error::from)
329    } else {
330        let local_var_entity: Option<GetInstanceError> =
331            serde_json::from_str(&local_var_content).ok();
332        let local_var_error = ResponseContent {
333            status: local_var_status,
334            content: local_var_content,
335            entity: local_var_entity,
336        };
337        Err(Error::ResponseError(local_var_error))
338    }
339}
340
341///
342pub async fn list_instances(
343    configuration: &configuration::Configuration,
344    manager_id: Option<&str>,
345    manager_type: Option<&str>,
346) -> Result<crate::models::ListInstances200Response, Error<ListInstancesError>> {
347    let local_var_configuration = configuration;
348
349    let local_var_client = &local_var_configuration.client;
350
351    let local_var_uri_str = format!("{}/instance", local_var_configuration.base_path);
352    let mut local_var_req_builder =
353        local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
354
355    if let Some(ref local_var_str) = manager_id {
356        local_var_req_builder =
357            local_var_req_builder.query(&[("manager-id", &local_var_str.to_string())]);
358    }
359    if let Some(ref local_var_str) = manager_type {
360        local_var_req_builder =
361            local_var_req_builder.query(&[("manager-type", &local_var_str.to_string())]);
362    }
363    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
364        local_var_req_builder =
365            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
366    }
367
368    let local_var_req = local_var_req_builder.build()?;
369    let local_var_resp = local_var_client.execute(local_var_req).await?;
370
371    let local_var_status = local_var_resp.status();
372    let local_var_content = local_var_resp.text().await?;
373
374    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
375        serde_json::from_str(&local_var_content).map_err(Error::from)
376    } else {
377        let local_var_entity: Option<ListInstancesError> =
378            serde_json::from_str(&local_var_content).ok();
379        let local_var_error = ResponseContent {
380            status: local_var_status,
381            content: local_var_content,
382            entity: local_var_entity,
383        };
384        Err(Error::ResponseError(local_var_error))
385    }
386}
387
388///
389pub async fn reboot_instance(
390    configuration: &configuration::Configuration,
391    id: &str,
392) -> Result<crate::models::Operation, Error<RebootInstanceError>> {
393    let local_var_configuration = configuration;
394
395    let local_var_client = &local_var_configuration.client;
396
397    let local_var_uri_str = format!(
398        "{}/instance/{id}:reboot",
399        local_var_configuration.base_path,
400        id = crate::apis::urlencode(id)
401    );
402    let mut local_var_req_builder =
403        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
404
405    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
406        local_var_req_builder =
407            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
408    }
409
410    let local_var_req = local_var_req_builder.build()?;
411    let local_var_resp = local_var_client.execute(local_var_req).await?;
412
413    let local_var_status = local_var_resp.status();
414    let local_var_content = local_var_resp.text().await?;
415
416    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
417        serde_json::from_str(&local_var_content).map_err(Error::from)
418    } else {
419        let local_var_entity: Option<RebootInstanceError> =
420            serde_json::from_str(&local_var_content).ok();
421        let local_var_error = ResponseContent {
422            status: local_var_status,
423            content: local_var_content,
424            entity: local_var_entity,
425        };
426        Err(Error::ResponseError(local_var_error))
427    }
428}
429
430///
431pub async fn remove_instance_protection(
432    configuration: &configuration::Configuration,
433    id: &str,
434) -> Result<serde_json::Value, Error<RemoveInstanceProtectionError>> {
435    let local_var_configuration = configuration;
436
437    let local_var_client = &local_var_configuration.client;
438
439    let local_var_uri_str = format!(
440        "{}/instance/{id}:remove-protection",
441        local_var_configuration.base_path,
442        id = crate::apis::urlencode(id)
443    );
444    let mut local_var_req_builder =
445        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
446
447    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
448        local_var_req_builder =
449            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
450    }
451
452    let local_var_req = local_var_req_builder.build()?;
453    let local_var_resp = local_var_client.execute(local_var_req).await?;
454
455    let local_var_status = local_var_resp.status();
456    let local_var_content = local_var_resp.text().await?;
457
458    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
459        serde_json::from_str(&local_var_content).map_err(Error::from)
460    } else {
461        let local_var_entity: Option<RemoveInstanceProtectionError> =
462            serde_json::from_str(&local_var_content).ok();
463        let local_var_error = ResponseContent {
464            status: local_var_status,
465            content: local_var_content,
466            entity: local_var_entity,
467        };
468        Err(Error::ResponseError(local_var_error))
469    }
470}
471
472/// This operation re-installs a Compute instance to a base template. If target template is provided it will be used to recreated instance from. Warning: the operation wipes all data stored on the disk.
473pub async fn reset_instance(
474    configuration: &configuration::Configuration,
475    id: &str,
476    reset_instance_request: crate::models::ResetInstanceRequest,
477) -> Result<crate::models::Operation, Error<ResetInstanceError>> {
478    let local_var_configuration = configuration;
479
480    let local_var_client = &local_var_configuration.client;
481
482    let local_var_uri_str = format!(
483        "{}/instance/{id}:reset",
484        local_var_configuration.base_path,
485        id = crate::apis::urlencode(id)
486    );
487    let mut local_var_req_builder =
488        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
489
490    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
491        local_var_req_builder =
492            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
493    }
494    local_var_req_builder = local_var_req_builder.json(&reset_instance_request);
495
496    let local_var_req = local_var_req_builder.build()?;
497    let local_var_resp = local_var_client.execute(local_var_req).await?;
498
499    let local_var_status = local_var_resp.status();
500    let local_var_content = local_var_resp.text().await?;
501
502    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
503        serde_json::from_str(&local_var_content).map_err(Error::from)
504    } else {
505        let local_var_entity: Option<ResetInstanceError> =
506            serde_json::from_str(&local_var_content).ok();
507        let local_var_error = ResponseContent {
508            status: local_var_status,
509            content: local_var_content,
510            entity: local_var_entity,
511        };
512        Err(Error::ResponseError(local_var_error))
513    }
514}
515
516///
517pub async fn reset_instance_field(
518    configuration: &configuration::Configuration,
519    id: &str,
520    field: &str,
521) -> Result<crate::models::Operation, Error<ResetInstanceFieldError>> {
522    let local_var_configuration = configuration;
523
524    let local_var_client = &local_var_configuration.client;
525
526    let local_var_uri_str = format!(
527        "{}/instance/{id}/{field}",
528        local_var_configuration.base_path,
529        id = crate::apis::urlencode(id),
530        field = crate::apis::urlencode(field)
531    );
532    let mut local_var_req_builder =
533        local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
534
535    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
536        local_var_req_builder =
537            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
538    }
539
540    let mut local_var_req = local_var_req_builder.build()?;
541
542    let _ = sign_request(&mut local_var_req, configuration);
543
544    let local_var_resp = local_var_client.execute(local_var_req).await?;
545
546    let local_var_status = local_var_resp.status();
547    let local_var_content = local_var_resp.text().await?;
548
549    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
550        serde_json::from_str(&local_var_content).map_err(Error::from)
551    } else {
552        let local_var_entity: Option<ResetInstanceFieldError> =
553            serde_json::from_str(&local_var_content).ok();
554        let local_var_error = ResponseContent {
555            status: local_var_status,
556            content: local_var_content,
557            entity: local_var_entity,
558        };
559        Err(Error::ResponseError(local_var_error))
560    }
561}
562
563/// This operation resizes a Compute instance's disk volume. Note: the disk can only grow, cannot be shrunk.
564pub async fn resize_instance_disk(
565    configuration: &configuration::Configuration,
566    id: &str,
567    resize_instance_disk_request: crate::models::ResizeInstanceDiskRequest,
568) -> Result<crate::models::Operation, Error<ResizeInstanceDiskError>> {
569    let local_var_configuration = configuration;
570
571    let local_var_client = &local_var_configuration.client;
572
573    let local_var_uri_str = format!(
574        "{}/instance/{id}:resize-disk",
575        local_var_configuration.base_path,
576        id = crate::apis::urlencode(id)
577    );
578    let mut local_var_req_builder =
579        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
580
581    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
582        local_var_req_builder =
583            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
584    }
585    local_var_req_builder = local_var_req_builder.json(&resize_instance_disk_request);
586
587    let local_var_req = local_var_req_builder.build()?;
588    let local_var_resp = local_var_client.execute(local_var_req).await?;
589
590    let local_var_status = local_var_resp.status();
591    let local_var_content = local_var_resp.text().await?;
592
593    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
594        serde_json::from_str(&local_var_content).map_err(Error::from)
595    } else {
596        let local_var_entity: Option<ResizeInstanceDiskError> =
597            serde_json::from_str(&local_var_content).ok();
598        let local_var_error = ResponseContent {
599            status: local_var_status,
600            content: local_var_content,
601            entity: local_var_entity,
602        };
603        Err(Error::ResponseError(local_var_error))
604    }
605}
606
607/// This operation reverts the snapshot to the Compute instance volume, restoring stored data as it was at the time of the snapshot. The Compute instance must be previously stopped.
608pub async fn revert_instance_to_snapshot(
609    configuration: &configuration::Configuration,
610    instance_id: &str,
611    revert_instance_to_snapshot_request: crate::models::RevertInstanceToSnapshotRequest,
612) -> Result<crate::models::Operation, Error<RevertInstanceToSnapshotError>> {
613    let local_var_configuration = configuration;
614
615    let local_var_client = &local_var_configuration.client;
616
617    let local_var_uri_str = format!(
618        "{}/instance/{instance_id}:revert-snapshot",
619        local_var_configuration.base_path,
620        instance_id = crate::apis::urlencode(instance_id)
621    );
622    let mut local_var_req_builder =
623        local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
624
625    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
626        local_var_req_builder =
627            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
628    }
629    local_var_req_builder = local_var_req_builder.json(&revert_instance_to_snapshot_request);
630
631    let local_var_req = local_var_req_builder.build()?;
632    let local_var_resp = local_var_client.execute(local_var_req).await?;
633
634    let local_var_status = local_var_resp.status();
635    let local_var_content = local_var_resp.text().await?;
636
637    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
638        serde_json::from_str(&local_var_content).map_err(Error::from)
639    } else {
640        let local_var_entity: Option<RevertInstanceToSnapshotError> =
641            serde_json::from_str(&local_var_content).ok();
642        let local_var_error = ResponseContent {
643            status: local_var_status,
644            content: local_var_content,
645            entity: local_var_entity,
646        };
647        Err(Error::ResponseError(local_var_error))
648    }
649}
650
651/// This operation changes the Compute instance's type. Note: the new Instance Type must be within the same family (e.g. a standard instance cannot be scaled to gpu2 or storage).
652pub async fn scale_instance(
653    configuration: &configuration::Configuration,
654    id: &str,
655    scale_instance_request: crate::models::ScaleInstanceRequest,
656) -> Result<crate::models::Operation, Error<ScaleInstanceError>> {
657    let local_var_configuration = configuration;
658
659    let local_var_client = &local_var_configuration.client;
660
661    let local_var_uri_str = format!(
662        "{}/instance/{id}:scale",
663        local_var_configuration.base_path,
664        id = crate::apis::urlencode(id)
665    );
666    let mut local_var_req_builder =
667        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
668
669    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
670        local_var_req_builder =
671            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
672    }
673    local_var_req_builder = local_var_req_builder.json(&scale_instance_request);
674
675    let local_var_req = local_var_req_builder.build()?;
676    let local_var_resp = local_var_client.execute(local_var_req).await?;
677
678    let local_var_status = local_var_resp.status();
679    let local_var_content = local_var_resp.text().await?;
680
681    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
682        serde_json::from_str(&local_var_content).map_err(Error::from)
683    } else {
684        let local_var_entity: Option<ScaleInstanceError> =
685            serde_json::from_str(&local_var_content).ok();
686        let local_var_error = ResponseContent {
687            status: local_var_status,
688            content: local_var_content,
689            entity: local_var_entity,
690        };
691        Err(Error::ResponseError(local_var_error))
692    }
693}
694
695/// This operation starts a virtual machine, potentially using a rescue profile if specified
696pub async fn start_instance(
697    configuration: &configuration::Configuration,
698    id: &str,
699    start_instance_request: crate::models::StartInstanceRequest,
700) -> Result<crate::models::Operation, Error<StartInstanceError>> {
701    let local_var_configuration = configuration;
702
703    let local_var_client = &local_var_configuration.client;
704
705    let local_var_uri_str = format!(
706        "{}/instance/{id}:start",
707        local_var_configuration.base_path,
708        id = crate::apis::urlencode(id)
709    );
710    let mut local_var_req_builder =
711        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
712
713    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
714        local_var_req_builder =
715            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
716    }
717    local_var_req_builder = local_var_req_builder.json(&start_instance_request);
718
719    let mut local_var_req = local_var_req_builder.build()?;
720
721    let _ = sign_request(&mut local_var_req, configuration);
722
723    let local_var_resp = local_var_client.execute(local_var_req).await?;
724
725    let local_var_status = local_var_resp.status();
726    let local_var_content = local_var_resp.text().await?;
727
728    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
729        serde_json::from_str(&local_var_content).map_err(Error::from)
730    } else {
731        let local_var_entity: Option<StartInstanceError> =
732            serde_json::from_str(&local_var_content).ok();
733        let local_var_error = ResponseContent {
734            status: local_var_status,
735            content: local_var_content,
736            entity: local_var_entity,
737        };
738        Err(Error::ResponseError(local_var_error))
739    }
740}
741
742///
743pub async fn stop_instance(
744    configuration: &configuration::Configuration,
745    id: &str,
746) -> Result<crate::models::Operation, Error<StopInstanceError>> {
747    let local_var_configuration = configuration;
748
749    let local_var_client = &local_var_configuration.client;
750
751    let local_var_uri_str = format!(
752        "{}/instance/{id}:stop",
753        local_var_configuration.base_path,
754        id = crate::apis::urlencode(id)
755    );
756    let mut local_var_req_builder =
757        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
758
759    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
760        local_var_req_builder =
761            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
762    }
763
764    let mut local_var_req = local_var_req_builder.build()?;
765
766    let _ = sign_request(&mut local_var_req, configuration);
767
768    let local_var_resp = local_var_client.execute(local_var_req).await?;
769
770    let local_var_status = local_var_resp.status();
771    let local_var_content = local_var_resp.text().await?;
772
773    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
774        serde_json::from_str(&local_var_content).map_err(Error::from)
775    } else {
776        let local_var_entity: Option<StopInstanceError> =
777            serde_json::from_str(&local_var_content).ok();
778        let local_var_error = ResponseContent {
779            status: local_var_status,
780            content: local_var_content,
781            entity: local_var_entity,
782        };
783        Err(Error::ResponseError(local_var_error))
784    }
785}
786
787///
788pub async fn update_instance(
789    configuration: &configuration::Configuration,
790    id: &str,
791    update_instance_request: crate::models::UpdateInstanceRequest,
792) -> Result<crate::models::Operation, Error<UpdateInstanceError>> {
793    let local_var_configuration = configuration;
794
795    let local_var_client = &local_var_configuration.client;
796
797    let local_var_uri_str = format!(
798        "{}/instance/{id}",
799        local_var_configuration.base_path,
800        id = crate::apis::urlencode(id)
801    );
802    let mut local_var_req_builder =
803        local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
804
805    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
806        local_var_req_builder =
807            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
808    }
809    local_var_req_builder = local_var_req_builder.json(&update_instance_request);
810
811    let mut local_var_req = local_var_req_builder.build()?;
812
813    let _ = sign_request(&mut local_var_req, configuration);
814
815    let local_var_resp = local_var_client.execute(local_var_req).await?;
816
817    let local_var_status = local_var_resp.status();
818    let local_var_content = local_var_resp.text().await?;
819
820    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
821        serde_json::from_str(&local_var_content).map_err(Error::from)
822    } else {
823        let local_var_entity: Option<UpdateInstanceError> =
824            serde_json::from_str(&local_var_content).ok();
825        let local_var_error = ResponseContent {
826            status: local_var_status,
827            content: local_var_content,
828            entity: local_var_entity,
829        };
830        Err(Error::ResponseError(local_var_error))
831    }
832}
833
834#[cfg(test)]
835pub mod test {
836    use super::*;
837
838    use crate::apis::configuration::Configuration;
839    use crate::apis::instance_type_api::list_instance_types;
840    use crate::apis::operation_api::get_operation;
841    use crate::models::instance_type::Size;
842    use crate::models::operation::State;
843    use crate::models::{CreateInstanceRequest, InstanceType, Operation, Template};
844    use crate::test::test_config;
845
846    /// Get an instance type id for some specified instance size
847    pub async fn get_id_for_size(config: &Configuration, size: Size) -> String {
848        let types = list_instance_types(config)
849            .await
850            .expect("failed to list instance types");
851
852        types
853            .instance_types
854            .expect("no instance types available")
855            .into_iter()
856            .find(|x| x.size.unwrap() == size)
857            .expect("no instance types available for tiny")
858            .id
859            .unwrap()
860    }
861
862    /// Poll an operation to completion either returning the operation or panicking
863    pub async fn poll_operation(config: &Configuration, mut op: Operation) -> Operation {
864        assert_eq!(op.state.unwrap(), State::Pending);
865
866        while op.state.unwrap() == State::Pending {
867            op = get_operation(config, &op.id.unwrap())
868                .await
869                .expect("failed to get operation state");
870        }
871
872        assert_eq!(op.state.unwrap(), State::Success);
873
874        op
875    }
876
877    /// Spawn an instance with given template and size
878    pub async fn spawn_instance_for_size(
879        config: &Configuration,
880        template: Template,
881        size: Size,
882    ) -> Operation {
883        let instance_type_id = get_id_for_size(config, size).await;
884
885        dbg!(&instance_type_id);
886
887        let request = CreateInstanceRequest {
888            instance_type: InstanceType {
889                id: instance_type_id.into(),
890                ..Default::default()
891            }
892            .into(),
893            template: template.into(),
894            disk_size: 50,
895            ..Default::default()
896        };
897
898        create_instance(config, request)
899            .await
900            .expect("failed to create instance")
901    }
902
903    #[tokio::test]
904    async fn create_delete_instance() {
905        let config = test_config();
906
907        let instance_type_id = get_id_for_size(&config, Size::Tiny).await;
908
909        let create_request = CreateInstanceRequest {
910            instance_type: InstanceType {
911                id: instance_type_id.into(),
912                ..Default::default()
913            }
914            .into(),
915            template: Template {
916                id: env!("EXOSCALE_TEMPLATE").to_string().into(),
917                ..Default::default()
918            }
919            .into(),
920            disk_size: 50,
921            ..Default::default()
922        };
923
924        let operation = create_instance(&config, create_request)
925            .await
926            .expect("failed to create instance");
927
928        let operation = poll_operation(&config, operation).await;
929        let instance_id = operation.reference.unwrap().id.unwrap();
930
931        delete_instance(&config, &instance_id)
932            .await
933            .expect("failed to delete instance");
934    }
935}