1 unstable release

0.0.1 Sep 5, 2018

#94 in #namespaces

23 downloads per month

Apache-2.0

40KB
850 lines

A work in progress

This project may be forked from the kubernetes or it may not.

A Kubernetes API client library for Rust

Status

Experimental.

  • Get, put, list, and watch are implemented, using tokio futures/streams.
  • Client obeys ~/.kube/config (or $KUBECONFIG) by default, as per golang client. TLS is supported. Client certificates are the only currently supported method of client authentication.
  • API objects are currently manually defined and incomplete. Additional 3rd-party object types can be defined via traits.
  • API resources do not yet have a representation in Rust.
  • API error handling is very naive.

Example of listing all the pods in kube-system namespace. Results are streamed, limited to 20 results per page.

extern crate kubernetes;
extern crate tokio_core;

use std::default::Default;
use tokio_core::reactor::Core;

use kubernetes::api;
use kubernetes::client::{Client,ListOptions};
use kubernetes::api::core::v1::{Pod,PodList};

fn main() {
    let mut core = Core::new().unwrap();
    let client = Client::new(2, &core.handle()).unwrap();

    let pods = api::core::v1::GROUP_VERSION.with_resource("pods");
    let namespace = Some("kube-system");

    let opts = ListOptions{ limit: 20, ..Default::default() };
    let work = client.iter::<PodList,Pod>(&pods, namespace, opts)
        .for_each(|pod| {
           println!("pod is {}", pod.metadata.name.unwrap_or_default());
           Ok(())
        });

    core.run(work).unwrap()
}

Dependencies

~61MB
~1M SLoC