use std::env;
use openstack::waiter::Waiter;
#[cfg(feature = "network")]
async fn display_port(port: &openstack::network::Port) {
println!(
"ID = {}, Name = {:?}, MAC = {}, UP = {}, Status = {}",
port.id(),
port.name(),
port.mac_address(),
port.admin_state_up(),
port.status()
);
println!(
"* Owner = {:?}, Server? {}",
port.device_owner(),
port.attached_to_server()
);
for ip in port.fixed_ips() {
let subnet = ip.subnet().await.expect("Cannot fetch subnet");
println!("* IP = {}, Subnet = {}", ip.ip_address, subnet.cidr());
}
let net = port.network().await.expect("Cannot fetch network");
println!("* Network: ID = {}, Name = {:?}", net.id(), net.name());
}
#[cfg(feature = "network")]
#[tokio::main(flavor = "current_thread")]
async fn main() {
env_logger::init();
let os = openstack::Cloud::from_env()
.await
.expect("Failed to create an identity provider from the environment");
let network = env::args().nth(1).expect("Provide a network");
let subnet = env::args().nth(2).expect("Provide a subnet");
let mut port = os
.new_port(network)
.with_name("example-port")
.with_fixed_ip(openstack::network::PortIpRequest::AnyIpFromSubnet(
subnet.into(),
))
.create()
.await
.expect("Cannot create a port");
display_port(&port).await;
os.get_port("example-port")
.await
.expect("Cannot find the port");
println!("Updating the port");
port.set_name("example-new-name");
port.save().await.expect("Cannot update port");
display_port(&port).await;
port.delete()
.await
.expect("Cannot request port deletion")
.wait()
.await
.expect("Port was not deleted");
}
#[cfg(not(feature = "network"))]
fn main() {
panic!("This example cannot run with 'network' feature disabled");
}