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, ) -> Result, crate::RpcError>; } impl NzrClientExt for crate::NazrinClient { async fn new_mock_instance( &mut self, name: impl AsRef, ) -> Result, 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) } }