Replaces Pod types on codex plugin and starter interface

This commit is contained in:
ThatBen 2025-01-27 09:49:21 +01:00
parent 2586f4a756
commit 940b8122e7
No known key found for this signature in database
GPG Key ID: 62C543548433D43E
3 changed files with 27 additions and 25 deletions

View File

@ -1,7 +1,6 @@
using CodexClient;
using CodexClient.Hooks;
using Core;
using KubernetesWorkflow.Types;
namespace CodexPlugin
{
@ -34,16 +33,16 @@ namespace CodexPlugin
{
}
public RunningPod[] DeployCodexNodes(int numberOfNodes, Action<ICodexSetup> setup)
public ICodexInstance[] DeployCodexNodes(int numberOfNodes, Action<ICodexSetup> setup)
{
var codexSetup = GetSetup(numberOfNodes, setup);
return codexStarter.BringOnline(codexSetup);
}
public ICodexNodeGroup WrapCodexContainers(CoreInterface coreInterface, RunningPod[] containers)
public ICodexNodeGroup WrapCodexContainers(CoreInterface coreInterface, ICodexInstance[] instances)
{
containers = containers.Select(c => SerializeGate.Gate(c)).ToArray();
return codexStarter.WrapCodexContainers(coreInterface, containers);
instances = instances.Select(c => SerializeGate.Gate(c as CodexInstance)).ToArray();
return codexStarter.WrapCodexContainers(coreInterface, instances);
}
public void WireUpMarketplace(ICodexNodeGroup result, Action<ICodexSetup> setup)

View File

@ -13,7 +13,7 @@ namespace CodexPlugin
private readonly IPluginTools pluginTools;
private readonly CodexContainerRecipe recipe = new CodexContainerRecipe();
private readonly ApiChecker apiChecker;
private readonly Dictionary<ICodexInstance, RunningPod> podMap = new Dictionary<ICodexInstance, RunningPod>();
private readonly Dictionary<string, CodexContainerProcessControl> processControlMap = new Dictionary<string, CodexContainerProcessControl>();
private DebugInfoVersion? versionResponse;
public CodexStarter(IPluginTools pluginTools)
@ -27,14 +27,10 @@ namespace CodexPlugin
public IProcessControl CreateProcessControl(ICodexInstance instance)
{
var pod = podMap[instance];
return new CodexContainerProcessControl(pluginTools, pod, onStop: () =>
{
podMap.Remove(instance);
});
return processControlMap[instance.Name];
}
public RunningPod[] BringOnline(CodexSetup codexSetup)
public ICodexInstance[] BringOnline(CodexSetup codexSetup)
{
LogSeparator();
Log($"Starting {codexSetup.Describe()}...");
@ -54,10 +50,10 @@ namespace CodexPlugin
}
LogSeparator();
return containers;
return containers.Select(CreateInstance).ToArray();
}
public ICodexNodeGroup WrapCodexContainers(CoreInterface coreInterface, RunningPod[] containers)
public ICodexNodeGroup WrapCodexContainers(CoreInterface coreInterface, ICodexInstance[] instances)
{
var codexNodeFactory = new CodexNodeFactory(
log: pluginTools.GetLog(),
@ -66,7 +62,7 @@ namespace CodexPlugin
httpFactory: pluginTools,
processControlFactory: this);
var group = CreateCodexGroup(coreInterface, containers, codexNodeFactory);
var group = CreateCodexGroup(coreInterface, instances, codexNodeFactory);
Log($"Codex version: {group.Version}");
versionResponse = group.Version;
@ -114,9 +110,8 @@ namespace CodexPlugin
return workflow.GetPodInfo(rc);
}
private CodexNodeGroup CreateCodexGroup(CoreInterface coreInterface, RunningPod[] runningContainers, CodexNodeFactory codexNodeFactory)
private CodexNodeGroup CreateCodexGroup(CoreInterface coreInterface, ICodexInstance[] instances, CodexNodeFactory codexNodeFactory)
{
var instances = runningContainers.Select(CreateInstance).ToArray();
var nodes = instances.Select(codexNodeFactory.CreateCodexNode).ToArray();
var group = new CodexNodeGroup(pluginTools, nodes);
@ -126,7 +121,7 @@ namespace CodexPlugin
}
catch
{
CodexNodesNotOnline(coreInterface, runningContainers);
CodexNodesNotOnline(coreInterface, instances);
throw;
}
@ -136,14 +131,23 @@ namespace CodexPlugin
private ICodexInstance CreateInstance(RunningPod pod)
{
var instance = CodexInstanceContainerExtension.CreateFromPod(pod);
podMap.Add(instance, pod);
var processControl = new CodexContainerProcessControl(pluginTools, pod, onStop: () =>
{
processControlMap.Remove(instance.Name);
});
processControlMap.Add(instance.Name, processControl);
return instance;
}
private void CodexNodesNotOnline(CoreInterface coreInterface, RunningPod[] runningContainers)
private void CodexNodesNotOnline(CoreInterface coreInterface, ICodexInstance[] instances)
{
Log("Codex nodes failed to start");
foreach (var container in runningContainers.First().Containers) coreInterface.DownloadLog(container);
var log = pluginTools.GetLog();
foreach (var i in instances)
{
var pc = processControlMap[i.Name];
pc.DownloadLog(log.CreateSubfile(i.Name + "_failed_to_start"));
}
}
private void LogSeparator()

View File

@ -1,20 +1,19 @@
using CodexClient;
using CodexClient.Hooks;
using Core;
using KubernetesWorkflow.Types;
namespace CodexPlugin
{
public static class CoreInterfaceExtensions
{
public static RunningPod[] DeployCodexNodes(this CoreInterface ci, int number, Action<ICodexSetup> setup)
public static ICodexInstance[] DeployCodexNodes(this CoreInterface ci, int number, Action<ICodexSetup> setup)
{
return Plugin(ci).DeployCodexNodes(number, setup);
}
public static ICodexNodeGroup WrapCodexContainers(this CoreInterface ci, RunningPod[] containers)
public static ICodexNodeGroup WrapCodexContainers(this CoreInterface ci, ICodexInstance[] instances)
{
return Plugin(ci).WrapCodexContainers(ci, containers);
return Plugin(ci).WrapCodexContainers(ci, instances);
}
public static ICodexNode StartCodexNode(this CoreInterface ci)