Skip to main content

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

1use std::time::Duration;
2
3use awc::{
4    Client, Connector,
5};
6
7use openssl::ssl::{
8    SslConnector, 
9    SslMethod, 
10    SslVerifyMode
11};
12
13use super::models::{
14    NodeList,
15    NodePool
16};
17
18/// Get the node list from cluster
19/// Token, gke endpoint and namespace need to be provided
20pub async fn node_list(
21    token: String,
22    gke_cluster_endpoint: String,
23) -> Result<(), std::io::Error> {
24
25    let mut builder = SslConnector::builder(SslMethod::tls()).unwrap();
26    builder.set_verify(SslVerifyMode::NONE);
27    let myconnector = builder.build();
28    let client = Client::builder()
29        .connector(Connector::new().openssl(myconnector))
30        .finish();
31
32    let get_nodes_request = client
33        .get(format!("https://{gke_cluster_endpoint}:443/api/v1/nodes"))
34        .bearer_auth(format!("{token}"))
35        .timeout(Duration::from_secs(30))
36        .send()
37        .await
38        .expect("Request get nodes failed");
39
40    let  mut req = get_nodes_request;
41
42    let req_status = req.status().as_u16();
43
44    let response = req.json::<NodeList>().await.unwrap_or_default();
45
46    match req_status {
47        200 => {
48            println!("Request has been successfull: Status: {:?}, {:?}", req_status, response);
49        },
50        201 => {
51            println!("Successfully created ingress: {:?}", response);
52        }
53        400 => {
54            println!("Bad Request. Check URL parameters or body: {:?}", response);
55        },
56        403 => {
57            println!("You don't have access to perform such request: {:?}", response);
58        }
59        404 => {
60            println!("Requested resource does not exists: {:?}", response);
61        },
62        409 => {
63            println!("Requested resource already exists! {:?}", response)
64        }
65        _ => {
66            println!("Request status mismatch. Check response: {:?}", response);
67        }
68    }
69
70    Ok(())
71    
72}
73
74
75/// Get the node pool list from cluster via container api
76/// Token, gke endpoint and namespace need to be provided
77pub async fn node_pool_list(
78    token: String,
79    gcp_project_id: String,
80    gke_zone_location: String,
81    gke_cluster_name: String
82) -> Result<(), std::io::Error> {
83
84    let mut builder = SslConnector::builder(SslMethod::tls()).unwrap();
85    builder.set_verify(SslVerifyMode::NONE);
86    let myconnector = builder.build();
87    let client = Client::builder()
88        .connector(Connector::new().openssl(myconnector))
89        .finish();
90
91    let get_nodepools_request = client
92        .get(format!("https://container.googleapis.com/v1/projects/{gcp_project_id}/locations/{gke_zone_location}/clusters/{gke_cluster_name}/nodePools"))
93        .bearer_auth(format!("{token}"))
94        .timeout(Duration::from_secs(30))
95        .send()
96        .await
97        .expect("Request get nodes failed");
98    
99    let  mut req = get_nodepools_request;
100
101    let req_status = req.status().as_u16();
102
103    let response = req.json::<NodePool>().await.unwrap_or_default();
104
105    match req_status {
106        200 => {
107            println!("Request has been successfull: Status: {:?}, {:?}", req_status, response);
108        },
109        201 => {
110            println!("Successfully created ingress: {:?}", response);
111        }
112        400 => {
113            println!("Bad Request. Check URL parameters or body: {:?}", response);
114        },
115        403 => {
116            println!("You don't have access to perform such request: {:?}", response);
117        }
118        404 => {
119            println!("Requested resource does not exists: {:?}", response);
120        },
121        409 => {
122            println!("Requested resource already exists! {:?}", response)
123        }
124        _ => {
125            println!("Request status mismatch. Check response: {:?}", response);
126        }
127    }
128
129    Ok(())
130    
131}