1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
//! Provides an interface for querying the Podman REST API. Most of the interface is generated from
//! the the official Podman swagger file. This crate adds a layer to make it possible to connect to
//! the podman rest api over ssh to a unix socket and directly to a unix socket. Connections over
//! ssh are commonly necessary on macOs where the container runtime runs in a virtual machine
//! accessible over ssh.
//!
//!
//! ## API Compatibility
//!
//! This crate currently only works with version 5 of the podman API. There are suffucient
//! differences between version 3, 4, and 5 that a lot of calls will not work in an older version.
//! `podman --version` will reveal what version you are using.
//!
//! ## Podman Socket
//!
//! Note that podman does not run in a client/server model like docker does so there usually isn't
//! a socket you can connect to by default. You might need to enable the socket for the library to
//! connect to. For example on linux you might need to run something like this:
//!
//! ```sh
//! systemctl --user enable --now podman.socket
//! ```
//!
//! ## Usage
//!
//! ### Linux
//!
//! On linux you might initialize a client like this
//!
//! ```no_run
//! # tokio_test::block_on(async {
//! 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.images_api().image_list_libpod(None,None).await.unwrap();
//! # })
//! ```
//! ### MacOs
//!
//! On macOs you might initialize a client like this with an ssh url and identity file
//!
//! ```no_run
//! # tokio_test::block_on(async {
//! # use podman_rest_client::PodmanRestClient;
//! # use podman_rest_client::Config;
//! let client = PodmanRestClient::new(Config {
//! uri: "ssh://core@127.0.0.1:63169/run/user/501/podman/podman.sock".to_string(),
//! identity_file: Some("/path/to/identity_file".into()),
//! }).await.unwrap();
//! # })
//! ```
//!
//! ### Config::guess
//!
//! You can also use `Config::guess()` which tries to find the default path to the podman
//! socket depending on the platform you are on.
//!
//! ```no_run
//! # tokio_test::block_on(async {
//! # use podman_rest_client::PodmanRestClient;
//! # use podman_rest_client::Config;
//! // 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.images_api().image_list_libpod(None,None).await.unwrap();
//! # })
//! ```
pub mod cli;
mod config;
mod error;
mod podman_rest_client;
mod ssh;
mod unix_socket;
pub use config::Config;
pub use error::Error;
pub use podman_autogen_api::apis;
pub use podman_autogen_api::models;
pub use podman_rest_client::PodmanRestClient;