Struct openstack::Cloud

source ·
pub struct Cloud { /* private fields */ }
Expand description

OpenStack cloud API.

Provides high-level API for working with OpenStack clouds.

Implementations§

source§

impl Cloud

source

pub async fn new<Auth: AuthType + 'static>(auth_type: Auth) -> Result<Cloud>

Create a new cloud object with a given authentication plugin.

See auth module for details on how to authenticate against OpenStack clouds.

Example
async fn cloud() -> openstack::Result<openstack::Cloud> {
    let scope = openstack::auth::Scope::Project {
        project: openstack::IdOrName::from_name("project1"),
        domain: Some(openstack::IdOrName::from_name("Default")),
    };
    let auth = openstack::auth::Password::new(
            "https://cloud.example.com",
            "user1", "pa$$word", "Default")
        .expect("Invalid authentication URL")
        .with_scope(scope);
    openstack::Cloud::new(auth).await
}
See Also
  • from_config to create a Cloud from clouds.yaml
  • from_env to create a Cloud from environment variables
source

pub async fn from_config<S: AsRef<str>>(cloud_name: S) -> Result<Cloud>

Create a new cloud object from a configuration file

Example
let os = openstack::Cloud::from_config("cloud-1").await?;
source

pub async fn from_env() -> Result<Cloud>

Create a new cloud object from environment variables.

Example
let os = openstack::Cloud::from_env().await?;
source

pub fn endpoint_filters(&self) -> &EndpointFilters

Endpoint filters for this cloud.

source

pub fn endpoint_filters_mut(&mut self) -> &mut EndpointFilters

Modify endpoint filters for this cloud.

Example
async fn cloud_from_env() -> openstack::Result<openstack::Cloud> {
    let mut cloud = openstack::Cloud::from_env().await?;
    {
        let mut filters = cloud.endpoint_filters_mut();
        filters.set_region("internal-1");
        // Give priority to internal endpoints.
        filters.set_interfaces(&[
            openstack::InterfaceType::Internal,
            openstack::InterfaceType::Public,
        ][..])
    }
    Ok(cloud)
}

Removes cached endpoint information and detaches this object from a shared Session.

source

pub fn with_endpoint_interface(self, endpoint_interface: InterfaceType) -> Cloud

Convert this cloud into one using the given endpoint interface.

Example
async fn cloud_from_env() -> openstack::Result<openstack::Cloud> {
    openstack::Cloud::from_env().await
        .map(|os| os.with_endpoint_interface(openstack::InterfaceType::Internal))
}

Removes cached endpoint information and detaches this object from a shared Session.

source

pub fn with_endpoint_filters(self, endpoint_filters: EndpointFilters) -> Cloud

Convert this cloud into one using the given endpoint filters.

Removes cached endpoint information and detaches this object from a shared Session.

source

pub async fn refresh(&mut self) -> Result<()>

Refresh this Cloud object (renew token, refetch service catalog, etc).

source

pub async fn create_container<Id: AsRef<str>>( &self, name: Id ) -> Result<Container>

Create a new container.

If the container already exists, this call returns successfully.

source

pub async fn create_object<C, Id, R>( &self, container: C, name: Id, body: R ) -> Result<Object>where C: Into<ContainerRef>, Id: AsRef<str>, R: AsyncRead + Send + Sync + 'static,

Create a new object.

source

pub fn find_containers(&self) -> ContainerQuery

Build a query against container list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_objects<C>(&self, container: C) -> ObjectQuerywhere C: Into<ContainerRef>,

Build a query against object list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_flavors(&self) -> FlavorQuery

Build a query against flavor list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_floating_ips(&self) -> FloatingIpQuery

Build a query against floating IP list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_images(&self) -> ImageQuery

Build a query against image list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_keypairs(&self) -> KeyPairQuery

Build a query against key pairs list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_networks(&self) -> NetworkQuery

Build a query against network list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_ports(&self) -> PortQuery

Build a query against port list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_routers(&self) -> RouterQuery

Build a query against router list.

The returned object is a builder that should be used to construct the query.

source

pub fn find_servers(&self) -> ServerQuery

Build a query against server list.

The returned object is a builder that should be used to construct the query.

Example

Sorting servers by access_ip_v4 and getting first 5 results:

use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let sorting = openstack::compute::ServerSortKey::AccessIpv4;
let server_list = os.find_servers()
    .sort_by(openstack::Sort::Asc(sorting)).with_limit(5)
    .all().await.expect("Unable to fetch servers");
source

pub fn find_subnets(&self) -> SubnetQuery

Build a query against subnet list.

The returned object is a builder that should be used to construct the query.

source

pub async fn get_container<Id: AsRef<str>>(&self, name: Id) -> Result<Container>

Get object container metadata by its name.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let ctr = os.get_container("www").await.expect("Unable to get a container");
source

pub async fn get_object<C, Id>(&self, container: C, name: Id) -> Result<Object>where C: Into<ContainerRef>, Id: AsRef<str>,

Get object metadata by its name.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let obj = os.get_object("www", "/foo/bar").await.expect("Unable to get an object");
source

pub async fn get_flavor<Id: AsRef<str>>(&self, id_or_name: Id) -> Result<Flavor>

Find a flavor by its name or ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server = os.get_flavor("m1.medium").await.expect("Unable to get a flavor");
source

pub async fn get_floating_ip<Id: AsRef<str>>(&self, id: Id) -> Result<FloatingIp>

Find a floating IP by its ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server = os.get_floating_ip("031e08c7-2ca7-4c0b-9923-030c8d946ba4")
    .await
    .expect("Unable to get a floating IP");
source

pub async fn get_image<Id: AsRef<str>>(&self, id_or_name: Id) -> Result<Image>

Find an image by its name or ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server = os.get_image("centos7").await.expect("Unable to get a image");
source

pub async fn get_keypair<Id: AsRef<str>>(&self, name: Id) -> Result<KeyPair>

Find a key pair by its name or ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server = os.get_keypair("default").await.expect("Unable to get a key pair");
source

pub async fn get_network<Id: AsRef<str>>( &self, id_or_name: Id ) -> Result<Network>

Find an network by its name or ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server = os.get_network("centos7").await.expect("Unable to get a network");
source

pub async fn get_port<Id: AsRef<str>>(&self, id_or_name: Id) -> Result<Port>

Find an port by its name or ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server = os.get_port("4d9c1710-fa02-49f9-8218-291024ef4140")
    .await
    .expect("Unable to get a port");
source

pub async fn get_router<Id: AsRef<str>>(&self, id_or_name: Id) -> Result<Router>

Find a router by its name or ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let router = os.get_router("router_name").await.expect("Unable to get a router");
source

pub async fn get_server<Id: AsRef<str>>(&self, id_or_name: Id) -> Result<Server>

Find a server by its name or ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server = os.get_server("8a1c355b-2e1e-440a-8aa8-f272df72bc32")
    .await
    .expect("Unable to get a server");
source

pub async fn get_subnet<Id: AsRef<str>>(&self, id_or_name: Id) -> Result<Subnet>

Find an subnet by its name or ID.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server = os.get_subnet("private-subnet")
    .await
    .expect("Unable to get a subnet");
source

pub async fn list_containers(&self) -> Result<Vec<Container>>

List all containers.

This call can yield a lot of results, use the find_containers call to limit the number of containers to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_containers().await.expect("Unable to fetch containers");
source

pub async fn list_objects<C>(&self, container: C) -> Result<Vec<Object>>where C: Into<ContainerRef>,

List all objects.

This call can yield a lot of results, use the find_objects call to limit the number of objects to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_objects("www").await.expect("Unable to fetch objects");
source

pub async fn list_flavors(&self) -> Result<Vec<FlavorSummary>>

List all flavors.

This call can yield a lot of results, use the find_flavors call to limit the number of flavors to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_flavors().await.expect("Unable to fetch flavors");
source

pub async fn list_floating_ips(&self) -> Result<Vec<FloatingIp>>

List all floating IPs

This call can yield a lot of results, use the find_floating_ips call to limit the number of networks to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_floating_ips().await.expect("Unable to fetch floating IPs");
source

pub async fn list_images(&self) -> Result<Vec<Image>>

List all images.

This call can yield a lot of results, use the find_images call to limit the number of images to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_images().await.expect("Unable to fetch images");
source

pub async fn list_keypairs(&self) -> Result<Vec<KeyPair>>

List all key pairs.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let result = os.list_keypairs().await.expect("Unable to fetch key pairs");
source

pub async fn list_networks(&self) -> Result<Vec<Network>>

List all networks.

This call can yield a lot of results, use the find_networks call to limit the number of networks to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_networks().await.expect("Unable to fetch networks");
source

pub async fn list_ports(&self) -> Result<Vec<Port>>

List all ports.

This call can yield a lot of results, use the find_ports call to limit the number of ports to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_ports().await.expect("Unable to fetch ports");
source

pub async fn list_routers(&self) -> Result<Vec<Router>>

List all routers.

This call can yield a lot of results, use the find_routers call to limit the number of routers to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let router_list = os.list_routers().await.expect("Unable to fetch routers");
source

pub async fn list_servers(&self) -> Result<Vec<ServerSummary>>

List all servers.

This call can yield a lot of results, use the find_servers call to limit the number of servers to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_servers().await.expect("Unable to fetch servers");
source

pub async fn list_subnets(&self) -> Result<Vec<Subnet>>

List all subnets.

This call can yield a lot of results, use the find_subnets call to limit the number of subnets to receive.

Example
use openstack;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let server_list = os.list_subnets().await.expect("Unable to fetch subnets");
source

pub fn new_object<C, O, B>(&self, container: C, object: O, body: B) -> NewObject<B>where C: Into<ContainerRef>, O: Into<String>, B: AsyncRead + Sync + Send + 'static,

Prepare a new object for creation.

This call returns a NewObject object, which is a builder to create object in object storage.

source

pub fn new_floating_ip<N>(&self, floating_network: N) -> NewFloatingIpwhere N: Into<NetworkRef>,

Prepare a new floating IP for creation.

This call returns a NewFloatingIp object, which is a builder to populate floating IP fields.

source

pub fn new_keypair<S>(&self, name: S) -> NewKeyPairwhere S: Into<String>,

Prepare a new key pair for creation.

This call returns a NewKeyPair object, which is a builder to populate key pair fields.

source

pub fn new_network(&self) -> NewNetwork

Prepare a new network for creation.

This call returns a NewNetwork object, which is a builder to populate network fields.

source

pub fn new_port<N>(&self, network: N) -> NewPortwhere N: Into<NetworkRef>,

Prepare a new port for creation.

This call returns a NewPort object, which is a builder to populate port fields.

source

pub fn new_router(&self) -> NewRouter

Prepare a new router for creation.

This call returns a NewRouter object, which is a builder to populate router fields.

source

pub fn new_server<S, F>(&self, name: S, flavor: F) -> NewServerwhere S: Into<String>, F: Into<FlavorRef>,

Prepare a new server for creation.

This call returns a NewServer object, which is a builder to populate server fields.

source

pub fn new_subnet<N>(&self, network: N, cidr: IpNet) -> NewSubnetwhere N: Into<NetworkRef>,

Prepare a new subnet for creation.

This call returns a NewSubnet object, which is a builder to populate subnet fields.

Example
extern crate ipnet;
extern crate openstack;
use std::net;

let os = openstack::Cloud::from_env().await.expect("Unable to authenticate");
let cidr = ipnet::Ipv4Net::new(net::Ipv4Addr::new(192, 168, 1, 0), 24)
    .unwrap().into();
let new_subnet = os.new_subnet("private-net", cidr)
    .with_name("private-subnet")
    .create().await.expect("Unable to create subnet");

Trait Implementations§

source§

impl Clone for Cloud

source§

fn clone(&self) -> Cloud

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Cloud

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Session> for Cloud

source§

fn from(value: Session) -> Cloud

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Cloud

§

impl Send for Cloud

§

impl Sync for Cloud

§

impl Unpin for Cloud

§

impl !UnwindSafe for Cloud

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more