70 lines
2.2 KiB
Rust
70 lines
2.2 KiB
Rust
use std::net::Ipv4Addr;
|
|
|
|
use crate::{args, model, net::cidr::CidrV4};
|
|
|
|
pub trait NzrClientExt {
|
|
#[allow(async_fn_in_trait)]
|
|
async fn new_mock_instance(
|
|
&mut self,
|
|
name: impl AsRef<str>,
|
|
) -> Result<Result<model::Instance, String>, crate::RpcError>;
|
|
}
|
|
|
|
impl NzrClientExt for crate::NazrinClient {
|
|
async fn new_mock_instance(
|
|
&mut self,
|
|
name: impl AsRef<str>,
|
|
) -> Result<Result<model::Instance, String>, crate::RpcError> {
|
|
let name = name.as_ref().to_owned();
|
|
|
|
let subnet = self
|
|
.new_subnet(
|
|
crate::default_ctx(),
|
|
model::Subnet {
|
|
name: "mock".to_owned(),
|
|
data: model::SubnetData {
|
|
ifname: "eth0".to_string(),
|
|
network: CidrV4::new(Ipv4Addr::new(192, 0, 2, 0), 24),
|
|
start_host: Ipv4Addr::new(192, 0, 2, 10),
|
|
end_host: Ipv4Addr::new(192, 0, 2, 254),
|
|
gateway4: Some(Ipv4Addr::new(192, 0, 2, 1)),
|
|
dns: vec![Ipv4Addr::new(192, 0, 2, 5)],
|
|
domain_name: None,
|
|
vlan_id: None,
|
|
},
|
|
},
|
|
)
|
|
.await
|
|
.unwrap()
|
|
.ok();
|
|
|
|
let uuid = self
|
|
.new_instance(
|
|
crate::default_ctx(),
|
|
args::NewInstance {
|
|
name: name.clone(),
|
|
title: None,
|
|
description: None,
|
|
subnet: subnet.map_or_else(|| "mock".to_owned(), |m| m.name),
|
|
base_image: "linux2".to_owned(),
|
|
cores: 2,
|
|
memory: 1024,
|
|
disk_sizes: (10, None),
|
|
ci_userdata: None,
|
|
},
|
|
)
|
|
.await?
|
|
.unwrap();
|
|
// poll to "complete"
|
|
self.poll_new_instance(crate::default_ctx(), uuid)
|
|
.await?
|
|
.unwrap();
|
|
|
|
let inst = self
|
|
.poll_new_instance(crate::default_ctx(), uuid)
|
|
.await?
|
|
.and_then(|cs| cs.result)
|
|
.unwrap();
|
|
Ok(inst)
|
|
}
|
|
}
|