From cf287173b807d8f0268a841f93fdac81d92dc921 Mon Sep 17 00:00:00 2001 From: Marcel Baumgartner Date: Wed, 12 Apr 2023 17:42:24 +0200 Subject: [PATCH] Implemented multi allocation --- Moonlight/App/Services/ServerService.cs | 52 ++++++++++----------- Moonlight/Shared/Views/Servers/Create.razor | 4 +- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/Moonlight/App/Services/ServerService.cs b/Moonlight/App/Services/ServerService.cs index bc22343d..ccde6026 100644 --- a/Moonlight/App/Services/ServerService.cs +++ b/Moonlight/App/Services/ServerService.cs @@ -195,7 +195,7 @@ public class ServerService ServerRepository.Update(serverData); await MessageService.Emit("wings.backups.delete", backup); - + await AuditLogService.Log(AuditLogType.DeleteBackup, x => { @@ -213,7 +213,7 @@ public class ServerService claims.Add("server_uuid", server.Uuid.ToString()); claims.Add("backup_uuid", serverBackup.Uuid.ToString()); }); - + await AuditLogService.Log(AuditLogType.DownloadBackup, x => { @@ -221,7 +221,10 @@ public class ServerService x.Add(serverBackup.Uuid); }); - return $"https://{server.Node.Fqdn}:{server.Node.HttpPort}/download/backup?token={token}"; + if (server.Node.Ssl) + return $"https://{server.Node.Fqdn}:{server.Node.HttpPort}/download/backup?token={token}"; + else + return $"http://{server.Node.Fqdn}:{server.Node.HttpPort}/download/backup?token={token}"; } public Task CreateFileAccess(Server s, User user) // We need the user to create the launch url @@ -240,7 +243,7 @@ public class ServerService } public async Task Create(string name, int cpu, long memory, long disk, User u, Image i, Node? n = null, - Action? modifyDetails = null) + Action? modifyDetails = null, int allocations = 1) { var user = UserRepository .Get() @@ -264,22 +267,27 @@ public class ServerService else node = n; - NodeAllocation freeAllo; + NodeAllocation[] freeAllocations; try { - freeAllo = node.Allocations.First(a => !ServerRepository.Get() - .SelectMany(s => s.Allocations) - .Any(b => b.Id == a.Id)); // Thank you ChatGPT <3 + freeAllocations = node.Allocations + .Where(a => !ServerRepository.Get() + .SelectMany(s => s.Allocations) + .Any(b => b.Id == a.Id)) + .Take(allocations).ToArray(); } catch (Exception) { throw new DisplayException("No allocation found"); } - if (freeAllo == null) + if (!freeAllocations.Any()) throw new DisplayException("No allocation found"); + if (freeAllocations.Length != allocations) + throw new DisplayException("Not enough allocations found"); + var server = new Server() { Cpu = cpu, @@ -290,11 +298,8 @@ public class ServerService Owner = user, Node = node, Uuid = Guid.NewGuid(), - MainAllocation = freeAllo, - Allocations = new() - { - freeAllo - }, + MainAllocation = freeAllocations.First(), + Allocations = freeAllocations.ToList(), Backups = new(), OverrideStartup = "", DockerImageIndex = image.DockerImages.FindIndex(x => x.Default) @@ -322,10 +327,7 @@ public class ServerService StartOnCompletion = false }); - await AuditLogService.Log(AuditLogType.CreateServer, x => - { - x.Add(newServerData.Uuid); - }); + await AuditLogService.Log(AuditLogType.CreateServer, x => { x.Add(newServerData.Uuid); }); return newServerData; } @@ -333,7 +335,7 @@ public class ServerService { await ErrorLogService.Log(e, x => { - x.Add(newServerData.Uuid); + x.Add(newServerData.Uuid); x.Add(node.Id); }); @@ -349,10 +351,7 @@ public class ServerService await WingsApiHelper.Post(server.Node, $"api/servers/{server.Uuid}/reinstall", null); - await AuditLogService.Log(AuditLogType.ReinstallServer, x => - { - x.Add(server.Uuid); - }); + await AuditLogService.Log(AuditLogType.ReinstallServer, x => { x.Add(server.Uuid); }); } public async Task SftpServerLogin(int serverId, int id, string password) @@ -361,10 +360,7 @@ public class ServerService if (server == null) { - await SecurityLogService.LogSystem(SecurityLogType.SftpBruteForce, x => - { - x.Add(id); - }); + await SecurityLogService.LogSystem(SecurityLogType.SftpBruteForce, x => { x.Add(id); }); throw new Exception("Server not found"); } @@ -393,7 +389,7 @@ public class ServerService var server = EnsureNodeData(s); await WingsApiHelper.Delete(server.Node, $"api/servers/{server.Uuid}", null); - + ServerRepository.Delete(s); } diff --git a/Moonlight/Shared/Views/Servers/Create.razor b/Moonlight/Shared/Views/Servers/Create.razor index bc372c1c..b6c6c318 100644 --- a/Moonlight/Shared/Views/Servers/Create.razor +++ b/Moonlight/Shared/Views/Servers/Create.razor @@ -209,7 +209,9 @@ disk, User, Model.Image, - DeployNode + DeployNode, + null, + Model.Image.Allocations ); NavigationManager.NavigateTo($"/server/{server.Uuid}");