14 个版本 (9 个重大变化)

0.10.0 2024年8月23日
0.8.0 2024年8月2日
0.7.0 2024年7月27日
0.3.0 2024年3月15日

#2 in #open-stack

Download history 138/week @ 2024-05-09 23/week @ 2024-05-16 16/week @ 2024-05-23 4/week @ 2024-05-30 14/week @ 2024-06-06 183/week @ 2024-06-13 46/week @ 2024-06-20 118/week @ 2024-06-27 116/week @ 2024-07-04 135/week @ 2024-07-11 28/week @ 2024-07-18 168/week @ 2024-07-25 152/week @ 2024-08-01 26/week @ 2024-08-08 153/week @ 2024-08-15

501 每月下载量
openstack_cli 中使用

Apache-2.0

9.5MB
216K SLoC

OpenStack API 绑定(SDK)

每个平台的API都需要为各种编程语言提供SDK绑定。Rust的OpenStack API绑定不是例外。OpenStack提供了一个名为openstack_sdk的crate,它提供了一个具有同步和异步接口的SDK。

API绑定是从相应服务的OpenAPI规范生成的。这意味着它们只是封装API,通常不提供额外的便利功能。主要好处是生成的代码不需要维护。一旦OpenStack服务更新了集成资源的OpenAPI规范,更改将立即在下一次生成时可用。

功能

  • 同步和异步接口
  • QueryFindPagination 接口实现了基本功能
  • RawQuery 接口提供了更高级的API调用控制,具有上传和下载功能。
  • 每个URL + http方法 + body模式组合都由一个专门的模块表示
  • 用户负责返回数据模式。

结构

每个API调用都由一个专门的模块表示,该模块实现REST Endpoint接口。这意味着与POST操作相比,GET操作是一个专门实现。如结构文档中所述,每个RPC-like操作和每个微版本都使用单个模块实现。

使用

一个简单的示例,演示如何列出计算类型

use openstack_sdk::api::{paged, Pagination, QueryAsync};
use openstack_sdk::{AsyncOpenStack, config::ConfigFile, OpenStackError};
use openstack_sdk::types::ServiceType;
use openstack_sdk::api::compute::v2::flavor::list;

async fn list_flavors() -> Result<(), OpenStackError> {
    // Get the builder for the listing Flavors Endpoint
    let mut ep_builder = list::Request::builder();
    // Set the `min_disk` query param
    ep_builder.min_disk("15");
    let ep = ep_builder.build().unwrap();

    let cfg = ConfigFile::new().unwrap();
    // Get connection config from clouds.yaml/secure.yaml
    let profile = cfg.get_cloud_config("devstack".to_string()).unwrap().unwrap();
    // Establish connection
    let mut session = AsyncOpenStack::new(&profile).await?;

    // Invoke service discovery when desired.
    session.discover_service_endpoint(&ServiceType::Compute).await?;

    // Execute the call with pagination limiting maximum amount of entries to 1000
    let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(1000))
        .query_async(&session)
        .await.unwrap();

    println!("Data = {:?}", data);
    Ok(())
}

文档

Crate文档在此发布

项目文档在此可用

依赖项

~14–30MB
~416K SLoC