Working control of Docker containers
This commit is contained in:
parent
c9ffb1eac3
commit
0d8cfaf423
3 changed files with 30 additions and 15 deletions
|
|
@ -53,9 +53,11 @@ public static class IServiceCollectionExtensions
|
|||
services.AddScoped<IImporter<Data.Models.Server>, ServerImporter>();
|
||||
services.AddScoped<IImporter<Data.Models.Redistributable>, RedistributableImporter>();
|
||||
|
||||
// Register server engine
|
||||
// Register server engines
|
||||
services.AddSingleton<IServerEngine, LocalServerEngine>();
|
||||
services.AddSingleton<IServerEngine, DockerServerEngine>();
|
||||
|
||||
services.AddSingleton<DockerServerEngine>();
|
||||
services.AddSingleton<IServerEngine>(provider => provider.GetService<DockerServerEngine>());
|
||||
|
||||
services.AddSingleton<IPXRelayService>();
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public class DockerServerEngine(
|
|||
{
|
||||
private ServerEngineConfiguration _config;
|
||||
private Dictionary<Guid, DockerClient> _dockerClients = new();
|
||||
private Dictionary<Guid, (Guid HostId, string ContainerId)> _tracked { get; set; } = new();
|
||||
private Dictionary<Guid, DockerContainer> _tracked { get; set; } = new();
|
||||
public event EventHandler<ServerStatusUpdateEventArgs>? OnServerStatusUpdate;
|
||||
public event EventHandler<ServerLogEventArgs>? OnServerLog;
|
||||
|
||||
|
|
@ -46,22 +46,32 @@ public class DockerServerEngine(
|
|||
foreach (var server in servers)
|
||||
{
|
||||
if (server.DockerHostId.HasValue && _dockerClients.ContainsKey(server.DockerHostId.Value))
|
||||
_tracked[server.Id] = (server.DockerHostId.Value, server.ContainerId);
|
||||
_tracked[server.Id] = new DockerContainer
|
||||
{
|
||||
HostId = server.DockerHostId.Value,
|
||||
Id = server.ContainerId,
|
||||
Name = server.Name,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<ContainerListResponse>> GetContainersAsync(Guid dockerHostId)
|
||||
public async Task<IEnumerable<DockerContainer>> GetContainersAsync(Guid dockerHostId)
|
||||
{
|
||||
if (!_dockerClients.ContainsKey(dockerHostId))
|
||||
return Enumerable.Empty<ContainerListResponse>();
|
||||
return Enumerable.Empty<DockerContainer>();
|
||||
|
||||
var response = await _dockerClients[dockerHostId].Containers.ListContainersAsync(new ContainersListParameters()
|
||||
{
|
||||
All = true
|
||||
});
|
||||
|
||||
return response;
|
||||
return response.Where(i => i != null).Select(i => new DockerContainer
|
||||
{
|
||||
Id = i.ID,
|
||||
HostId = dockerHostId,
|
||||
Name = i.Names.FirstOrDefault()
|
||||
});
|
||||
}
|
||||
|
||||
public bool IsManaging(Guid serverId)
|
||||
|
|
@ -193,12 +203,17 @@ public class DockerServerEngine(
|
|||
if (String.IsNullOrWhiteSpace(server.ContainerId))
|
||||
return ServerProcessStatus.Stopped;
|
||||
|
||||
_tracked[serverId] = (server.DockerHostId.Value, server.ContainerId);
|
||||
_tracked[serverId] = new DockerContainer
|
||||
{
|
||||
Id = server.ContainerId,
|
||||
HostId = server.DockerHostId.Value,
|
||||
Name = server.Name,
|
||||
};
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var container = await _dockerClients[_tracked[serverId].HostId].Containers.InspectContainerAsync(_tracked[serverId].ContainerId);
|
||||
var container = await _dockerClients[_tracked[serverId].HostId].Containers.InspectContainerAsync(_tracked[serverId].Id);
|
||||
|
||||
if (container.State.Running)
|
||||
return ServerProcessStatus.Running;
|
||||
|
|
|
|||
|
|
@ -11,10 +11,10 @@
|
|||
@using LANCommander.Server.UI.Pages.Servers.Components
|
||||
@inject ServerService ServerService
|
||||
@inject GameService GameService
|
||||
@inject DockerServerEngine DockerServerEngine
|
||||
@inject NavigationManager NavigationManager
|
||||
@inject IMessageService MessageService
|
||||
@inject ILogger<General> Logger
|
||||
@inject IServiceProvider ServiceProvider
|
||||
|
||||
<ServerEditView Id="Id">
|
||||
<TitleTemplate>
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
|
||||
<FormItem Label="Container">
|
||||
<Select
|
||||
TItem="ContainerListResponse"
|
||||
TItem="DockerContainer"
|
||||
TItemValue="string"
|
||||
DataSource="Containers"
|
||||
Disabled="!Containers.Any()"
|
||||
|
|
@ -139,9 +139,8 @@
|
|||
[Parameter] public Guid Id { get; set; }
|
||||
|
||||
IEnumerable<Game> Games = new List<Game>();
|
||||
IEnumerable<ContainerListResponse> Containers = new List<ContainerListResponse>();
|
||||
|
||||
DockerServerEngine DockerServerEngine;
|
||||
IEnumerable<DockerContainer> Containers = new List<DockerContainer>();
|
||||
|
||||
Settings Settings = SettingService.GetSettings();
|
||||
|
||||
Guid GameId;
|
||||
|
|
@ -177,7 +176,6 @@
|
|||
|
||||
async Task ChangeDockerHost(ServerEngineConfiguration hostConfiguration)
|
||||
{
|
||||
DockerServerEngine = ServiceProvider.GetService<DockerServerEngine>();
|
||||
Containers = await DockerServerEngine.GetContainersAsync(hostConfiguration.Id);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue