5 个版本 (有破坏性更新)
0.5.0 | 2023年4月17日 |
---|---|
0.4.0 | 2023年1月13日 |
0.3.0 | 2022年9月5日 |
0.2.0 | 2022年5月8日 |
0.1.0 | 2022年3月18日 |
#895 在 开发工具
225KB
5.5K SLoC
Podtender
Podman REST API 的异步 Rust 客户端库。
使用方法
示例
use tokio;
use podtender::podman_service::PodmanService;
#[tokio::main]
async fn main() {
let podman_service = PodmanService::new("path/to/podman/socket");
let podtender_result = podman_service.system().get_info().await.unwrap();
println!("{podtender_result:?}");
}
集成测试(integration tests)也作为如何使用该库的示例。
Podman 设置
在可以使用该库之前,需要设置 Podman 服务。
# Set up podman service
podman system service unix:///home/`whoami`/podman.sock --log-level=debug --time=50
# Test if the socket is up and running
curl --unix-socket /home/`whoami`/podman.sock http://d/v4.0.0/libpod/info
支持的 Podman 版本
我们旨在仅支持最新版本的 Podman。目前这是 4.5.x。
库功能
通过 derive builder 实现构建器模式
builder
功能为请求类型启用构建器模式。这是通过 builder derive 宏 实现的。由宏创建的代码在 IDE 中的支持可能有限。
// with builder feature
let create_volume_parameter = CreateVolumeParameterBuilder::default()
.driver("local".to_owned())
.volume_name("some_volume_name".to_owned())
.options(some_previously_created_hashmap)
.build()
.expect("Error building CreateVolumeParameter");
// without builder feature
let create_volume_parameter = CreateVolumeParameter {
driver: Some("local".to_owned()),
labels: None,
volume_name: Some("some_volume_name".to_owned())
options: Some(some_previously_created_hashmap),
}
测试中使用的示例参数
examples
功能通过 ExampleValues
特性启用初始化参数。这主要用于测试和展示每个 API 操作的可使用示例参数。
跟踪
tracing
启用由 Tokio 的 tracing crate 提供的日志/跟踪。
要求
Podtender 使用 hyper 和 tokio。需要活动的 Podman 套接字才能与 Podman 通信。
测试
要运行集成测试,需要tracing
和examples
功能。为了便于测试,测试被定义为Cargo.toml文件中的目标,可以使用以下命令运行:cargo test --test {target-name} --features="examples tracing"
其中{target-name}
是指定的目标之一(例如:containers-test
)。
项目结构
Podman套接字和网络操作由PodmanService
结构体内部管理。
Podman API将端点分为多个部分。本库基于该结构。pods模块包含实现的所有pods API端点的API调用函数、参数类型和响应类型。
每个端点类别模块包含以下内容:
- 用于配置请求的参数类型
- 用于发起请求的API调用函数
- 将响应反序列化的响应类型
要启动一个pod,您需要配置podtender::pods::parameter_types::PodStatsParameter
,使用它通过podman_service.pods().start(parameter).await
并期待podtender::pods::response_types::StartPodResponse
。
注意
- 目前仅支持Unix套接字
- 由于tokio仅在Linux上构建对Unix套接字的支持,Podtender目前仅在Linux上构建
- 将Podman(API)视为可信的,并在测试中将它作为真实来源
- 要创建桥接网络模式的容器,以此作为起点
CreateContainerParameter { netns: Some(Namespace { nsmode: Some("bridge".to_owned()), value: None, }), ..Default::default() };
- 以下错误表明Podman套接字不可用。如果测试中出现这种情况,重新运行将重新创建套接字,对于定义的TTL应该可以消除错误。
HyperError( hyper::Error( Connect, Os { code: 2, kind: NotFound, message: "No such file or directory", }, ), )
connect_container_to_network_from_example
测试需要机器上执行测试的192.168.123.0/24
子网未被使用。- Podman支持
2021-05-26T10:42:00+02:00
时间戳,但本库目前仅支持作为字符串的日期。 - Podman仅支持以下格式的查询数组:
containers=container1&containers=container2
- 测试将在
unix:///home/{user}/{socket_name}.sock
创建Podman服务套接字,socket_name
可以在tests/utils中进行更改。 - 测试从test_container中的Dockerfile构建镜像。
致谢
- 本工作是在达姆施塔特工业大学和平与安全技术(PEASEC)创建的,并由德国政府特别目的基金资助,该基金存放在农业信用银行,项目为Geobox-II和AgriRegio。
- 该基金下的贡献者
- Julian Schindel
- Franz Kuntke
- 该基金下的贡献者
- 本crate的整体结构受到了shiplift的启发,该结构由softprops (Doug Tangren)创建。
许可
您可以选择根据Apache License, Version 2.0或MIT license进行许可。
除非您明确说明,否则您提交给podtender
的任何有意贡献,如Apache-2.0许可中定义,将如上双许可,不附加任何额外的条款或条件。
当前状态
目前支持的API端点
- 容器
- 提交
- 删除容器
- 将文件复制到容器中
- 连接到容器
- 报告容器文件系统的更改;添加、删除或修改
- 检查点容器(目前未测试,CRIU需要root权限)
- 检查容器是否存在
- 导出容器
- 运行容器的健康检查
- 初始化容器
- 检查容器
- 杀死容器
- 获取容器日志
- 挂载容器
- 暂停容器
- 重命名现有容器
- 调整容器的TTY大小
- 重启容器
- 恢复容器
- 启动容器
- 获取容器的统计信息(已弃用,使用“获取一个或多个容器的统计信息”)
- 停止容器
- 列出进程
- 流式传输
- 非流式传输
- 卸载容器
- 取消暂停容器
- 等待容器
- 创建容器
- 列出容器
- 删除已停止的容器
- 显示挂载的容器
- 获取一个或多个容器的统计信息
- 流式传输
- 非流式传输
- 生成Kubernetes YAML文件
- 从play kube中移除Pod
- 播放Kubernetes YAML文件
- 执行
- 创建执行实例
- 检查执行实例
- 调整执行实例的大小
- 启动执行实例
- 镜像
- 创建镜像
- 从本地存储中删除镜像
- 报告镜像文件系统的更改;添加、删除或修改
- 镜像存在
- 导出镜像
- 镜像的历史
- 检查镜像
- 推送镜像
- 标记镜像
- 镜像树
- 取消标记镜像
- 导出多个镜像
- 导入镜像
- 列出镜像
- 加载镜像
- 修剪未使用的镜像
- 拉取镜像
- 从存储中删除一个或多个镜像
- 搜索镜像
- 清单
- 删除
- 添加镜像
- 存在
- 检查
- 推送
- 创建
- 网络
- 删除网络
- 将容器连接到网络
- 将容器从网络断开连接
- 网络存在
- 检查网络
- 创建网络
- 列出网络
- 删除未使用的网络
- Pods
- 生成Systemd单元
- 生成Kubernetes YAML文件
- 删除Pod
- Pod存在
- 检查Pod
- 杀死Pod
- 暂停Pod
- 重启Pod
- 启动Pod
- 停止Pod
- 列出进程
- 流式传输
- 非流式传输
- 恢复Pod
- 创建Pod
- 列出Pods
- 清理未使用的Pods
- 获取一个或多个Pod的状态
- 卷
- 删除卷
- 卷存在
- 检查卷
- 创建卷
- 列出卷
- 清理未使用的卷
- 机密
- 删除机密
- 检查机密
- 创建机密
- 列出机密
- 系统
- ping服务
- 获取事件
- 流式传输
- 非流式传输
- 获取信息
- 显示磁盘使用情况
- 清理未使用的数据
- 组件版本信息
计划中的功能
- 支持DateTime Json字段(目前表示为String)
- 完全支持Podman API(Docker兼容性不在范围内)
依赖项
~6–19MB
~207K SLoC