diff --git a/ProjectPlugins/CodexPlugin/CodexPlugin.cs b/ProjectPlugins/CodexPlugin/CodexPlugin.cs index d47da7c7..57e68d09 100644 --- a/ProjectPlugins/CodexPlugin/CodexPlugin.cs +++ b/ProjectPlugins/CodexPlugin/CodexPlugin.cs @@ -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 setup) + public ICodexInstance[] DeployCodexNodes(int numberOfNodes, Action 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 setup) diff --git a/ProjectPlugins/CodexPlugin/CodexStarter.cs b/ProjectPlugins/CodexPlugin/CodexStarter.cs index 1e74a13e..08c31efd 100644 --- a/ProjectPlugins/CodexPlugin/CodexStarter.cs +++ b/ProjectPlugins/CodexPlugin/CodexStarter.cs @@ -13,7 +13,7 @@ namespace CodexPlugin private readonly IPluginTools pluginTools; private readonly CodexContainerRecipe recipe = new CodexContainerRecipe(); private readonly ApiChecker apiChecker; - private readonly Dictionary podMap = new Dictionary(); + private readonly Dictionary processControlMap = new Dictionary(); 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() diff --git a/ProjectPlugins/CodexPlugin/CoreInterfaceExtensions.cs b/ProjectPlugins/CodexPlugin/CoreInterfaceExtensions.cs index 91783e42..3542e52c 100644 --- a/ProjectPlugins/CodexPlugin/CoreInterfaceExtensions.cs +++ b/ProjectPlugins/CodexPlugin/CoreInterfaceExtensions.cs @@ -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 setup) + public static ICodexInstance[] DeployCodexNodes(this CoreInterface ci, int number, Action 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)