mirror of
https://github.com/moghtech/komodo.git
synced 2025-12-05 19:17:36 -06:00
* setup network page * add Network, Image, Container * Docker ListItems and Inspects * frontend build * dev0 * network info working * fix cargo lock * dev1 * pages for the things * implement Active in dashboard * RunBuild update trigger list refresh * rename deployment executions to StartDeployment etc * add server level container control * dev2 * add Config field to Image * can get image labels from Config.Labels * mount container page * server show resource count * add GetContainerLog api * add _AllContainers api * dev3 * move ResourceTarget to entities mod * GetResourceMatchingContainer api * connect container to resource * dev4 add volume names to container list items * ts types * volume / image / network unused management * add image history to image page * fix PruneContainers incorret Operation * update cache for server for server after server actions * dev5 * add singapore to Hetzner * implement delete single network / image / volume api * dev6 * include "in use" on Docker Lists * add docker resource delete buttons * is nice * fix volume all in use * remove google font dependency * use host networking in test compose * implement Secret Variables (hidden in logs) * remove unneeded borrow * interpolate variables / secrets into extra args / onclone / onpull / command etc * validate empty strings before SelectItem * rename everything to Komodo * rename workspace to komodo * rc1
127 lines
3.2 KiB
Rust
127 lines
3.2 KiB
Rust
use anyhow::Context;
|
|
use formatting::format_serror;
|
|
use komodo_client::{
|
|
api::write::*,
|
|
entities::{
|
|
komodo_timestamp,
|
|
permission::PermissionLevel,
|
|
server::Server,
|
|
update::{Update, UpdateStatus},
|
|
user::User,
|
|
Operation,
|
|
},
|
|
};
|
|
use mungos::{by_id::update_one_by_id, mongodb::bson::doc};
|
|
use periphery_client::api;
|
|
use resolver_api::Resolve;
|
|
|
|
use crate::{
|
|
helpers::{
|
|
periphery_client,
|
|
update::{add_update, make_update, update_update},
|
|
},
|
|
resource,
|
|
state::{db_client, State},
|
|
};
|
|
|
|
impl Resolve<CreateServer, User> for State {
|
|
#[instrument(name = "CreateServer", skip(self, user))]
|
|
async fn resolve(
|
|
&self,
|
|
CreateServer { name, config }: CreateServer,
|
|
user: User,
|
|
) -> anyhow::Result<Server> {
|
|
resource::create::<Server>(&name, config, &user).await
|
|
}
|
|
}
|
|
|
|
impl Resolve<DeleteServer, User> for State {
|
|
#[instrument(name = "DeleteServer", skip(self, user))]
|
|
async fn resolve(
|
|
&self,
|
|
DeleteServer { id }: DeleteServer,
|
|
user: User,
|
|
) -> anyhow::Result<Server> {
|
|
resource::delete::<Server>(&id, &user).await
|
|
}
|
|
}
|
|
|
|
impl Resolve<UpdateServer, User> for State {
|
|
#[instrument(name = "UpdateServer", skip(self, user))]
|
|
async fn resolve(
|
|
&self,
|
|
UpdateServer { id, config }: UpdateServer,
|
|
user: User,
|
|
) -> anyhow::Result<Server> {
|
|
resource::update::<Server>(&id, config, &user).await
|
|
}
|
|
}
|
|
|
|
impl Resolve<RenameServer, User> for State {
|
|
#[instrument(name = "RenameServer", skip(self, user))]
|
|
async fn resolve(
|
|
&self,
|
|
RenameServer { id, name }: RenameServer,
|
|
user: User,
|
|
) -> anyhow::Result<Update> {
|
|
let server = resource::get_check_permissions::<Server>(
|
|
&id,
|
|
&user,
|
|
PermissionLevel::Write,
|
|
)
|
|
.await?;
|
|
let mut update =
|
|
make_update(&server, Operation::RenameServer, &user);
|
|
|
|
update_one_by_id(&db_client().await.servers, &id, mungos::update::Update::Set(doc! { "name": &name, "updated_at": komodo_timestamp() }), None)
|
|
.await
|
|
.context("failed to update server on db. this name may already be taken.")?;
|
|
update.push_simple_log(
|
|
"rename server",
|
|
format!("renamed server {id} from {} to {name}", server.name),
|
|
);
|
|
update.finalize();
|
|
update.id = add_update(update.clone()).await?;
|
|
Ok(update)
|
|
}
|
|
}
|
|
|
|
impl Resolve<CreateNetwork, User> for State {
|
|
#[instrument(name = "CreateNetwork", skip(self, user))]
|
|
async fn resolve(
|
|
&self,
|
|
CreateNetwork { server, name }: CreateNetwork,
|
|
user: User,
|
|
) -> anyhow::Result<Update> {
|
|
let server = resource::get_check_permissions::<Server>(
|
|
&server,
|
|
&user,
|
|
PermissionLevel::Write,
|
|
)
|
|
.await?;
|
|
|
|
let periphery = periphery_client(&server)?;
|
|
|
|
let mut update =
|
|
make_update(&server, Operation::CreateNetwork, &user);
|
|
update.status = UpdateStatus::InProgress;
|
|
update.id = add_update(update.clone()).await?;
|
|
|
|
match periphery
|
|
.request(api::network::CreateNetwork { name, driver: None })
|
|
.await
|
|
{
|
|
Ok(log) => update.logs.push(log),
|
|
Err(e) => update.push_error_log(
|
|
"create network",
|
|
format_serror(&e.context("failed to create network").into()),
|
|
),
|
|
};
|
|
|
|
update.finalize();
|
|
update_update(update.clone()).await?;
|
|
|
|
Ok(update)
|
|
}
|
|
}
|