mirror of
https://github.com/jlengrand/engine.git
synced 2026-03-10 08:11:21 +00:00
145 lines
5.8 KiB
Rust
145 lines
5.8 KiB
Rust
use crate::cloud_provider::kubernetes::InstanceType;
|
|
use crate::errors::CommandError;
|
|
use core::fmt;
|
|
use serde::{Deserialize, Serialize};
|
|
use std::str::FromStr;
|
|
|
|
// flavors helper: https://pcr.cloud-mercato.com/providers/flavors?provider=digitalocean
|
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
|
|
pub enum DoInstancesType {
|
|
S1vcpu1gb,
|
|
S1vcpu2gb,
|
|
S1vcpu3gb,
|
|
S2vcpu2gb,
|
|
S2vcpu4gb,
|
|
S3vcpu1gb,
|
|
S4vcpu8gb,
|
|
S6vcpu16gb,
|
|
S8vcpu16gb,
|
|
S8vcpu32gb,
|
|
S12vcpu48gb,
|
|
S16vcpu64gb,
|
|
S20vcpu96gb,
|
|
S24vcpu128gb,
|
|
S32vcpu192gb,
|
|
}
|
|
|
|
impl InstanceType for DoInstancesType {
|
|
fn to_cloud_provider_format(&self) -> String {
|
|
match self {
|
|
DoInstancesType::S1vcpu1gb => "s-1vcpu-1gb",
|
|
DoInstancesType::S1vcpu2gb => "s-1vcpu-2gb",
|
|
DoInstancesType::S1vcpu3gb => "s-1vcpu-3gb",
|
|
DoInstancesType::S2vcpu2gb => "s-2vcpu-2gb",
|
|
DoInstancesType::S3vcpu1gb => "s-3vcpu-1gb",
|
|
DoInstancesType::S2vcpu4gb => "s-2vcpu-4gb",
|
|
DoInstancesType::S4vcpu8gb => "s-4vcpu-8gb",
|
|
DoInstancesType::S6vcpu16gb => "s-6vcpu-16gb",
|
|
DoInstancesType::S8vcpu16gb => "s-8vcpu-16gb",
|
|
DoInstancesType::S8vcpu32gb => "s-8vcpu-32gb",
|
|
DoInstancesType::S12vcpu48gb => "s-12vcpu-48gb",
|
|
DoInstancesType::S16vcpu64gb => "s-16vcpu-64gb",
|
|
DoInstancesType::S20vcpu96gb => "s-20vcpu-96gb",
|
|
DoInstancesType::S24vcpu128gb => "s-24vcpu-128gb",
|
|
DoInstancesType::S32vcpu192gb => "s-32vcpu-192gb",
|
|
}
|
|
.to_string()
|
|
}
|
|
}
|
|
|
|
impl DoInstancesType {
|
|
pub fn as_str(&self) -> &str {
|
|
match self {
|
|
DoInstancesType::S1vcpu1gb => "s-1vcpu-1gb",
|
|
DoInstancesType::S1vcpu2gb => "s-1vcpu-2gb",
|
|
DoInstancesType::S1vcpu3gb => "s-1vcpu-3gb",
|
|
DoInstancesType::S2vcpu2gb => "s-2vcpu-2gb",
|
|
DoInstancesType::S2vcpu4gb => "s-2vcpu-4gb",
|
|
DoInstancesType::S3vcpu1gb => "s-3vcpu-1gb",
|
|
DoInstancesType::S4vcpu8gb => "s-4vcpu-8gb",
|
|
DoInstancesType::S6vcpu16gb => "s-6vcpu-16gb",
|
|
DoInstancesType::S8vcpu16gb => "s-8vcpu-16gb",
|
|
DoInstancesType::S8vcpu32gb => "s-8vcpu-32gb",
|
|
DoInstancesType::S12vcpu48gb => "s-12vcpu-48gb",
|
|
DoInstancesType::S16vcpu64gb => "s-16vcpu-64gb",
|
|
DoInstancesType::S20vcpu96gb => "s-20vcpu-96gb",
|
|
DoInstancesType::S24vcpu128gb => "s-24vcpu-128gb",
|
|
DoInstancesType::S32vcpu192gb => "s-32vcpu-192gb",
|
|
}
|
|
}
|
|
}
|
|
|
|
impl fmt::Display for DoInstancesType {
|
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
match self {
|
|
DoInstancesType::S1vcpu1gb => write!(f, "s-1vcpu-1gb"),
|
|
DoInstancesType::S1vcpu2gb => write!(f, "s-1vcpu-2gb"),
|
|
DoInstancesType::S1vcpu3gb => write!(f, "s-1vcpu-3gb"),
|
|
DoInstancesType::S2vcpu2gb => write!(f, "s-2vcpu-2gb"),
|
|
DoInstancesType::S2vcpu4gb => write!(f, "s-2vcpu-4gb"),
|
|
DoInstancesType::S3vcpu1gb => write!(f, "s-3vcpu-1gb"),
|
|
DoInstancesType::S4vcpu8gb => write!(f, "s-4vcpu-8gb"),
|
|
DoInstancesType::S6vcpu16gb => write!(f, "s-6vcpu-16gb"),
|
|
DoInstancesType::S8vcpu16gb => write!(f, "s-8vcpu-16gb"),
|
|
DoInstancesType::S8vcpu32gb => write!(f, "s-8vcpu-32gb"),
|
|
DoInstancesType::S12vcpu48gb => write!(f, "s-12vcpu-48gb"),
|
|
DoInstancesType::S16vcpu64gb => write!(f, "s-16vcpu-64gb"),
|
|
DoInstancesType::S20vcpu96gb => write!(f, "s-20vcpu-96gb"),
|
|
DoInstancesType::S24vcpu128gb => write!(f, "s-24vcpu-128gb"),
|
|
DoInstancesType::S32vcpu192gb => write!(f, "s-32vcpu-192gb"),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl FromStr for DoInstancesType {
|
|
type Err = CommandError;
|
|
|
|
fn from_str(s: &str) -> Result<DoInstancesType, CommandError> {
|
|
match s {
|
|
"s-1vcpu-1gb" => Ok(DoInstancesType::S1vcpu1gb),
|
|
"s-1vcpu-2gb" => Ok(DoInstancesType::S1vcpu2gb),
|
|
"s-1vcpu-3gb" => Ok(DoInstancesType::S1vcpu3gb),
|
|
"s-2vcpu-2gb" => Ok(DoInstancesType::S2vcpu2gb),
|
|
"s-2vcpu-4gb" => Ok(DoInstancesType::S2vcpu4gb),
|
|
"s-3vcpu-1gb" => Ok(DoInstancesType::S3vcpu1gb),
|
|
"s-4vcpu-8gb" => Ok(DoInstancesType::S4vcpu8gb),
|
|
"s-6vcpu-16gb" => Ok(DoInstancesType::S6vcpu16gb),
|
|
"s-8vcpu-16gb" => Ok(DoInstancesType::S8vcpu16gb),
|
|
"s-8vcpu-32gb" => Ok(DoInstancesType::S8vcpu32gb),
|
|
"s-12vcpu-48gb" => Ok(DoInstancesType::S12vcpu48gb),
|
|
"s-16vcpu-64gb" => Ok(DoInstancesType::S16vcpu64gb),
|
|
"s-20vcpu-96gb" => Ok(DoInstancesType::S20vcpu96gb),
|
|
"s-24vcpu-128gb" => Ok(DoInstancesType::S24vcpu128gb),
|
|
"s-32vcpu-192gb" => Ok(DoInstancesType::S32vcpu192gb),
|
|
_ => {
|
|
let message = format!("`{}` instance type is not supported", s);
|
|
return Err(CommandError::new(message.clone(), Some(message)));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::cloud_provider::models::NodeGroups;
|
|
|
|
#[test]
|
|
fn test_groups_nodes() {
|
|
assert!(NodeGroups::new("".to_string(), 2, 1, "s-2vcpu-4gb".to_string(), 20).is_err());
|
|
assert!(NodeGroups::new("".to_string(), 2, 2, "s-2vcpu-4gb".to_string(), 20).is_ok());
|
|
assert!(NodeGroups::new("".to_string(), 2, 3, "s-2vcpu-4gb".to_string(), 20).is_ok());
|
|
|
|
assert_eq!(
|
|
NodeGroups::new("".to_string(), 2, 2, "s-2vcpu-4gb".to_string(), 20).unwrap(),
|
|
NodeGroups {
|
|
name: "".to_string(),
|
|
id: None,
|
|
min_nodes: 2,
|
|
max_nodes: 2,
|
|
instance_type: "s-2vcpu-4gb".to_string(),
|
|
disk_size_in_gib: 20
|
|
}
|
|
);
|
|
}
|
|
}
|