[][src]Crate openstack

OpenStack SDK in Rust.

The goal of this project is to provide a simple API for working with OpenStack clouds.

Usage

Start with authentication, then create a Cloud object and use it for OpenStack API calls.

Examples

List servers

Get authentication parameters from the environment and get UUIDs of all servers.

extern crate openstack;

fn get_server_uuids() -> openstack::Result<Vec<String>> {
    let os = openstack::Cloud::from_env()?;
    let server_names = os
        .list_servers()?
        .into_iter()
        .map(|server| server.id().clone())
        .collect();
    Ok(server_names)
}

Find images

Find public images using Identity password authentication with the default region:

extern crate fallible_iterator;
extern crate openstack;

use fallible_iterator::FallibleIterator;

fn get_public_image_names() -> openstack::Result<Vec<String>> {
    let scope = openstack::auth::Scope::Project {
        project: openstack::IdOrName::from_name("project1"),
        domain: Some(openstack::IdOrName::from_id("default")),
    };
    let auth = openstack::auth::Password::new(
        "https://cloud.local/identity",
        "admin",
        "pa$$w0rd",
        "Default"
    )
    .expect("Invalid auth_url")
    .with_scope(scope);

    let os = openstack::Cloud::new(auth);
    let image_names = os
        .find_images()
        .with_visibility(openstack::image::ImageVisibility::Public)
        .into_iter()
        // This `map` comes from fallible-iterator, thus the closure returns a `Result`.
        .map(|image| Ok(image.name().clone()))
        .collect()?;
    Ok(image_names)
}

Notice the difference between list_* methods (return a result with a vector) and find_* methods (return a query builder that can be used to create a fallible iterator).

Create server

Create a server with authentication from a clouds.yaml file:

extern crate openstack;
extern crate waiter;

// Required for the `wait` call.
use waiter::Waiter;

fn create_server() -> openstack::Result<openstack::compute::Server> {
    openstack::Cloud::from_config("my-cloud-1")?
        .new_server("test-server-1", "x-large")
        .with_image("centos-7")
        .with_network("private")
        .with_keypair("default")
        .create()?
        .wait()
}

Requirements

This crate requires Rust 2018 edition and rustc version 1.43.0 or newer.

Modules

auth

Reimports of authentication bits from osauth.

common

Types and traits shared by all API parts.

compute

Compute API implementation bits.

image

Image API implementation bits.

network

Network API implementation bits.

object_storage

Object storage API implementation bits.

session

Reimport of the synchronous session from osauth.

Structs

Cloud

OpenStack cloud API.

EndpointFilters

Endpoint filters for looking up endpoints.

Error

Error from an OpenStack call.

ValidInterfaces

A list of acceptable interface types.

Enums

ErrorKind

Kind of an error.

IdOrName

A reference to a resource by its ID or name.

InterfaceType

Interface type: public, internal or admin.

Sort

Sorting request.

Traits

Refresh

Trait representing something that can be refreshed.

Type Definitions

Result

A result of an OpenStack operation.