Skip to main content

devops_armory/cloud/gcp/gke/node/
get.rs

1use awc::{
2    Client, Connector,
3};
4
5use openssl::ssl::{
6    SslConnector, 
7    SslMethod, 
8    SslVerifyMode
9};
10
11use super::models::NodeList;
12
13/// Get the node info 
14/// Token, gke endpoint and namespace need to be provided
15pub async fn get_node_info(
16    token: String,
17    gke_cluster_endpoint: String,
18    gke_cluster_node: String
19) -> Result<(), std::io::Error> {
20
21    let mut builder = SslConnector::builder(SslMethod::tls()).unwrap();
22    builder.set_verify(SslVerifyMode::NONE);
23    let myconnector = builder.build();
24    let client = Client::builder()
25        .connector(Connector::new().openssl(myconnector))
26        .finish();
27
28    let get_nodes_request = client
29        .get(format!("https://{gke_cluster_endpoint}:443/api/v1/nodes/{gke_cluster_node}"))
30        .bearer_auth(format!("{token}"))
31        .send()
32        .await
33        .expect("Request get nodes failed");
34    
35    let  mut req = get_nodes_request;
36
37    let req_status = req.status().as_u16();
38
39    let response = req.json::<NodeList>().await.unwrap_or_default();
40
41    match req_status {
42        200 => {
43            println!("Request has been successfull: Status: {:?}, {:?}", req_status, response);
44        },
45        201 => {
46            println!("Successfully created ingress: {:?}", response);
47        }
48        400 => {
49            println!("Bad Request. Check URL parameters or body: {:?}", response);
50        },
51        403 => {
52            println!("You don't have access to perform such request: {:?}", response);
53        }
54        404 => {
55            println!("Requested resource does not exists: {:?}", response);
56        },
57        409 => {
58            println!("Requested resource already exists! {:?}", response)
59        }
60        _ => {
61            println!("Request status mismatch. Check response: {:?}", response);
62        }
63    }
64
65    Ok(())
66    
67}