Skip to main content

devops_armory/cloud/gcp/project/
create.rs

1use std::time::Duration;
2
3use super::models::GcpProjectCreate;
4
5/// Create GCP project
6/// Token and organization ID are required
7pub async fn create_gcp_project(
8    token: String,
9    org_id: String,
10    project_id: String,
11    project_state: String,
12    project_display_name: String
13) -> Result<(), std::io::Error> {
14
15    let project_body: GcpProjectCreate = GcpProjectCreate { 
16        parent: org_id, 
17        projectId: project_id, 
18        state: project_state, 
19        displayName: project_display_name
20    }; 
21
22    let client = awc::Client::default();
23    let request = client.post(format!("https://cloudresourcemanager.googleapis.com/v3/projects"))
24        .bearer_auth(token)
25        .insert_header(("Content-Type", "application/json"))
26        .timeout(Duration::from_secs(30))
27        .send_json(&project_body)
28        .await
29        .expect("Request: Create Project could not been sent");
30
31    let mut req = request;
32    let req_status = req.status().as_u16();
33    let respone = req.body().await.unwrap_or_default();
34
35    match req_status {
36
37        200 => {
38            println!("Request has been successfull: Status: {:?}, {:?}", req_status, respone);
39        },
40        400 => {
41            println!("Bad Request. Check URL parameters or body: {:?}", respone);
42        },
43        403 => {
44            println!("You don't have access to perform such request: {:?}", respone);
45        }
46        404 => {
47            println!("Requested resource does not exists: {:?}", respone);
48        },
49        409 => {
50            println!("Requested resource already exists! {:?}", respone)
51        }
52        _ => {
53            println!("Request status mismatch. Check response: {:?}", respone);
54        }
55
56    }
57
58    Ok(())
59
60}
61