1个不稳定版本
0.1.0 | 2023年1月23日 |
---|
#88 在 #go
46KB
982 行
civo-rs
不官方的civo API的Rust客户端
为什么?
因为Civo的go客户端不够快(显然是在开玩笑) 😅。这纯粹是为了教育目的,因为我正在努力提高我的Rust技能,这也意味着代码的大部分部分都是不好的,更有经验的Rust开发者会对此感到厌恶。看到什么不对的地方吗?像之前提到的那样,打开一个PR,我正在做这件事是为了改进,任何反馈或我可以得到的帮助我都非常感激。
有趣的事实:这个最初是一个与Civo对象存储交互的客户端。
项目目标
目前没有太多,我希望尽可能多地模仿civo的go客户端,然而我现在专注于一些核心功能
- 管理SSH密钥
- 创建计算实例
- 创建Kubernetes集群
- 管理对象存储
- 支持civo数据库
如何使用这个工具
[package]
name = "epik project"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.net.cn/cargo/reference/manifest.html
[dependencies]
tokio = { version = "1", features = ["full"] } # for our async runtime
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
对于更复杂的使用案例,请查看Rust文档这里
use civo_rs::{client::new_civo_client, instance};
use civo_rs::kubernetes::{SimpleClusterConfig};
use civo_rs::utils::random_name;
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = String::from("SOME-REALLY-REAL-API-KEY");
let region = String::from("LON1");
let new_cc = new_civo_client(api_key, region);
let skc = SimpleClusterConfig {
name: random_name(),
region: "LON1".to_string(),
network_id: "f89250e9-da9a-401b-blah-blah-blah".to_string(),
pools: vec![KubernetesPoolConfig {
id: random_name(),
count: 1,
size: "g4s.kube.medium".to_string(),
}],
firewall_rule: "443".to_string(),
};
let cluster = new_cc.new_simple_kubernetes_cluster(skc).await;
println!("{:?}", cluster);
Ok(())
}
use civo_rs::{client::new_civo_client,};
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = String::from("SOME-REALLY-REAL-API-KEY");
let region = String::from("LON1");
let new_cc = new_civo_client(api_key, region);
let default_network = new_cc.get_default_network().await.unwrap();
match default_network {
Ok(network) => println!("Default network: {}", network.Name),
Err(error) => println!("Error: {}", error.message),
}
let mut config = new_cc.new_instance_config().await.unwrap();
config.hostname = "civo-rs".to_string();
let instance = new_cc.create_instance(config).await;
match instance {
Ok(instance) => println!("{:?}",serde_json::to_string(&instance)),
Err(error) => println!("Error: {}",&error),
}
println!("{}",serde_json::to_string(&config).unwrap());
let deleted_instance = new_cc.delete_instance("efd7c5ca-516a-494d-b8ac-8eabbc215fef");
println!("{}",deleted_instance.await.unwrap().result);
Ok(())
}
如果你觉得这个工具有用,请考虑给它加星或请我喝杯咖啡
依赖项
~8–21MB
~309K SLoC