Skip to main content

devops_armory/cloud/gcp/compute/
create.rs

1use std::time::Duration;
2
3use super::models::CreateVM;
4
5/// Create GCP VM instance 
6/// External and internal IP available via Option<VMAccessConfig>
7/// Token, project name, net and subnet name and tags need to be provided
8pub async fn create_gcp_vm(
9    token: String,
10    project_name: String,
11    gcp_vm_zone: String,
12    gcp_vm_specs: CreateVM
13) -> Result<(), std::io::Error> {
14
15    let gcp_vm_data = gcp_vm_specs;
16
17    let client = awc::Client::default();
18    let request = client.post(format!("https://compute.googleapis.com/compute/v1/projects/{project_name}/zones/{gcp_vm_zone}/instances"))
19        .bearer_auth(&token)
20        .insert_header(("Content-Type", "application/json"))
21        .timeout(Duration::from_secs(30))
22        .send_json(&gcp_vm_data)
23        .await
24        .expect("Request CREATE instance could not been sent");
25
26    let mut req = request;
27    let req_status = req.status().as_u16();
28    let respone = req.body().await.unwrap_or_default();
29
30    match req_status {
31        200 => {
32            println!("Request has been successfull: Status: {:?}, {:?}", req_status, respone);
33        },
34        400 => {
35            println!("Bad Request. Check URL parameters or body: {:?}", respone);
36        },
37        403 => {
38            println!("You don't have access to perform such request: {:?}", respone);
39        }
40        404 => {
41            println!("Requested resource does not exists: {:?}", respone);
42        },
43        409 => {
44            println!("Requested resource already exists! {:?}", respone)
45        }
46        _ => {
47            println!("Request status mismatch. Check response: {:?}", respone);
48        }
49    }
50
51    Ok(())
52
53}