1个不稳定版本

0.1.0 2023年1月23日

#88#go

MIT 许可证

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(())
}

如果你觉得这个工具有用,请考虑给它加星或请我喝杯咖啡

Buy Me A Coffee

依赖项

~8–21MB
~309K SLoC