diff --git a/bin/core/src/requests/write/mod.rs b/bin/core/src/requests/write/mod.rs index 8ca62c11b..d8def03a1 100644 --- a/bin/core/src/requests/write/mod.rs +++ b/bin/core/src/requests/write/mod.rs @@ -53,6 +53,8 @@ enum WriteRequest { DeleteServer(DeleteServer), UpdateServer(UpdateServer), RenameServer(RenameServer), + CreateNetwork(CreateNetwork), + DeleteNetwork(DeleteNetwork), // ==== DEPLOYMENT ==== CreateDeployment(CreateDeployment), diff --git a/bin/core/src/requests/write/server.rs b/bin/core/src/requests/write/server.rs index 1435a194d..6d34237db 100644 --- a/bin/core/src/requests/write/server.rs +++ b/bin/core/src/requests/write/server.rs @@ -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 for State { @@ -221,3 +222,65 @@ impl Resolve for State { Ok(update) } } + +#[async_trait] +impl Resolve for State { + async fn resolve( + &self, + CreateNetwork { server_id, name }: CreateNetwork, + user: RequestUser, + ) -> anyhow::Result { + 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 for State { + async fn resolve( + &self, + DeleteNetwork { server_id, name }: DeleteNetwork, + user: RequestUser, + ) -> anyhow::Result { + 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) + } +} diff --git a/client/ts/src/responses.ts b/client/ts/src/responses.ts index 407e8b3ee..60243b33d 100644 --- a/client/ts/src/responses.ts +++ b/client/ts/src/responses.ts @@ -104,6 +104,8 @@ export type WriteResponses = { DeleteServer: Types.Server; UpdateServer: Types.Server; RenameServer: Types.Update; + CreateNetwork: Types.Update; + DeleteNetwork: Types.Update; // ==== DEPLOYMENT ==== CreateDeployment: Types.Deployment; diff --git a/client/ts/src/types.ts b/client/ts/src/types.ts index 9ca9f6cab..5622286de 100644 --- a/client/ts/src/types.ts +++ b/client/ts/src/types.ts @@ -512,6 +512,8 @@ export enum Operation { PruneImagesServer = "PruneImagesServer", PruneContainersServer = "PruneContainersServer", PruneNetworksServer = "PruneNetworksServer", + CreateNetwork = "CreateNetwork", + DeleteNetwork = "DeleteNetwork", CreateBuild = "CreateBuild", UpdateBuild = "UpdateBuild", DeleteBuild = "DeleteBuild", @@ -1238,12 +1240,12 @@ export interface RenameServer { } export interface CreateNetwork { - id: string; + server_id: string; name: string; } export interface DeleteNetwork { - id: string; + server_id: string; name: string; } @@ -1370,6 +1372,8 @@ export type WriteRequest = | { type: "DeleteServer", params: DeleteServer } | { type: "UpdateServer", params: UpdateServer } | { type: "RenameServer", params: RenameServer } + | { type: "CreateNetwork", params: CreateNetwork } + | { type: "DeleteNetwork", params: DeleteNetwork } | { type: "CreateDeployment", params: CreateDeployment } | { type: "CopyDeployment", params: CopyDeployment } | { type: "DeleteDeployment", params: DeleteDeployment } diff --git a/lib/types/src/entities/mod.rs b/lib/types/src/entities/mod.rs index 79a40e038..9cd07cefb 100644 --- a/lib/types/src/entities/mod.rs +++ b/lib/types/src/entities/mod.rs @@ -274,6 +274,8 @@ pub enum Operation { PruneImagesServer, PruneContainersServer, PruneNetworksServer, + CreateNetwork, + DeleteNetwork, // build CreateBuild, diff --git a/lib/types/src/requests/write/server.rs b/lib/types/src/requests/write/server.rs index 5c98f5be3..4edd388f3 100644 --- a/lib/types/src/requests/write/server.rs +++ b/lib/types/src/requests/write/server.rs @@ -55,7 +55,7 @@ pub struct RenameServer { #[derive(Serialize, Deserialize, Debug, Clone, Request)] #[response(Update)] pub struct CreateNetwork { - pub id: String, + pub server_id: String, pub name: String, } @@ -65,6 +65,6 @@ pub struct CreateNetwork { #[derive(Serialize, Deserialize, Debug, Clone, Request)] #[response(Update)] pub struct DeleteNetwork { - pub id: String, + pub server_id: String, pub name: String, }