create / delete docker network on server api

This commit is contained in:
mbecker20
2023-08-09 01:48:29 -04:00
parent f1aca3df4d
commit 29b31ffa1e
6 changed files with 78 additions and 5 deletions

View File

@@ -53,6 +53,8 @@ enum WriteRequest {
DeleteServer(DeleteServer),
UpdateServer(UpdateServer),
RenameServer(RenameServer),
CreateNetwork(CreateNetwork),
DeleteNetwork(DeleteNetwork),
// ==== DEPLOYMENT ====
CreateDeployment(CreateDeployment),

View File

@@ -10,9 +10,10 @@ use monitor_types::{
requests::write::*,
};
use mungos::mongodb::bson::{doc, to_bson};
use periphery_client::requests;
use resolver_api::Resolve;
use crate::{auth::RequestUser, resource::StateResource, state::State};
use crate::{auth::RequestUser, helpers::make_update, resource::StateResource, state::State};
#[async_trait]
impl Resolve<CreateServer, RequestUser> for State {
@@ -221,3 +222,65 @@ impl Resolve<RenameServer, RequestUser> for State {
Ok(update)
}
}
#[async_trait]
impl Resolve<CreateNetwork, RequestUser> for State {
async fn resolve(
&self,
CreateNetwork { server_id, name }: CreateNetwork,
user: RequestUser,
) -> anyhow::Result<Update> {
let server: Server = self
.get_resource_check_permissions(&server_id, &user, PermissionLevel::Update)
.await?;
let mut update = make_update(&server, Operation::CreateNetwork, &user);
update.status = UpdateStatus::InProgress;
update.id = self.add_update(update.clone()).await?;
match self
.periphery_client(&server)
.request(requests::CreateNetwork { name, driver: None })
.await
{
Ok(log) => update.logs.push(log),
Err(e) => update.push_error_log("create network", format!("{e:#?}")),
};
update.finalize();
self.update_update(update.clone()).await?;
Ok(update)
}
}
#[async_trait]
impl Resolve<DeleteNetwork, RequestUser> for State {
async fn resolve(
&self,
DeleteNetwork { server_id, name }: DeleteNetwork,
user: RequestUser,
) -> anyhow::Result<Update> {
let server: Server = self
.get_resource_check_permissions(&server_id, &user, PermissionLevel::Update)
.await?;
let mut update = make_update(&server, Operation::DeleteNetwork, &user);
update.status = UpdateStatus::InProgress;
update.id = self.add_update(update.clone()).await?;
match self
.periphery_client(&server)
.request(requests::DeleteNetwork { name })
.await
{
Ok(log) => update.logs.push(log),
Err(e) => update.push_error_log("delete network", format!("{e:#?}")),
};
update.finalize();
self.update_update(update.clone()).await?;
Ok(update)
}
}