19个版本 (11个重大更新)
新 0.12.3 | 2024年8月23日 |
---|---|
0.11.1 | 2024年8月19日 |
0.10.2 | 2024年7月24日 |
在 网络编程 中排名第 506
每月下载量 686
用于 buildfs
1MB
19K SLoC
podman-rest-client
提供查询Podman REST API的接口。大部分接口由官方Podman swagger文件生成。它可以连接到通过ssh到Unix套接字和直接到Unix套接字。在macOs上,容器运行时在可以通过ssh访问的虚拟机中运行时,SSH连接通常是必需的。
API兼容性
使用podman --version
确定您正在使用哪个版本的Podman。
v5支持
此crate主要与Podman API的版本5一起工作。版本3、4和5之间有足够的不同之处,许多调用在旧版本中无法工作。
v4支持(状况不佳)
虽然存在v4的支持,但由于官方Podman swagger文件缺少所有类型的定义,所以其状况相当糟糕。一些已手动创建,还有很多工作要做。
Podman套接字
请注意,Podman不像Docker那样以客户端/服务器模式运行,所以通常没有可以连接的套接字。您可能需要启用套接字以便库可以连接。例如,在Linux上,您可能需要运行以下内容
systemctl --user enable --now podman.socket // Enable the podman unix domain socket
在macOS上,您可能需要调用以下内容
podman machine init // Create your podman virtual machine
podman machine start // Start the machine
用法
Linux
在Linux上,您可能初始化一个客户端如下
use podman_rest_client::PodmanRestClient;
use podman_rest_client::Config;
// Initialize a client
let client = PodmanRestClient::new(Config {
uri: "unix:///run/user/501/podman/podman.sock".to_string(),
identity_file: None,
}).await.unwrap();
// Fetch a list of container images
let images = client.v5().images().image_list_libpod(None).await.unwrap();
MacOs
在macOs上,您可能使用ssh URL和身份文件初始化客户端如下
let client = PodmanRestClient::new(Config {
uri: "ssh://[email protected]:63169/run/user/501/podman/podman.sock".to_string(),
identity_file: Some("/path/to/identity_file".into()),
}).await.unwrap();
Config::guess
您还可以使用Config::guess()
,它会根据您所在的平台尝试找到Podman套接字默认路径。
// Setup the default configuration
let config = Config::guess().await.unwrap();
// Initialize a client
let client = PodmanRestClient::new(config).await.unwrap();
// Fetch a list of container images
let images = client.v5().images().image_list_libpod(None).await.unwrap();
客户端/API特质
如果您导入podman_rest_client::v5::Client
特质,您可以直接从客户端调用API函数。
use podman_rest_client::v5::Client;
client.images().image_list_libpod(None).await;
您还可以使用各种API特质,例如 podman_rest_client::v5::apis::Images
,并直接调用单个请求函数。
use podman_rest_client::v5::apis::Images;
client.image_list_libpod(None).await;
功能
默认功能集为 ["v5", "uds", "ssh"]
。
ssh
:支持通过SSH服务器连接到podman。uds
:支持通过Unix域套接字连接到podman。v5
:支持podman API的第5版v4
:支持podman API的第4版。v4还没有准备好使用。
v5 Swagger文件修改
podman项目生成的官方swagger文件存在许多问题,需要手动进行大量修改。您可以通过比较 swagger/swagger-v5.1.0.yaml 与 swagger/swagger-v5.1.0.modified.yaml 来查看更改。
重命名字段
definitions/Mount/properties/Target
重命名为Destination
缺少类型信息
definitions/ListContainer/properties/ExposedPorts
类型设置为object
可空字段
结果发现,golang对nil的处理比较宽松。以下字段被设置为可空
definitions/InspectNetworkSettings/properties/Ports/additionalProperties
definitions/InspectPodInfraConfig/properties/PortBindings/additionalProperties
definitions/PodRmReport/properties/RemovedCtrs/additionalProperties
我不确定,但在这个项目中,可能更合理地默认将所有哈希表值设置为可空。
客户端默认值
一些请求默认在响应中返回额外的流式数据。我们的客户端不支持此功能,因此我们设置了一些客户端覆盖,将这些请求上的 quiet
参数设置为true。
responses//libpod/images/pull/post/parameters
responses//libpod/images/scp/{name}/post/parameters
在遇到问题时,可能会有更多调整,应在此处进行记录。
变更日志
依赖项
~8–23MB
~307K SLoC