85 lines
2.6 KiB
C#
Raw Normal View History

2023-03-21 16:09:41 +01:00
namespace CodexDistTestCore
{
public interface IK8sManager
{
2023-03-22 09:22:18 +01:00
ICodexNodeGroup BringOnline(OfflineCodexNodes node);
IOfflineCodexNodes BringOffline(ICodexNodeGroup node);
}
public class K8sManager : IK8sManager
{
2023-03-21 16:09:41 +01:00
private readonly NumberSource onlineCodexNodeOrderNumberSource = new NumberSource(0);
2023-03-22 09:22:18 +01:00
private readonly List<CodexNodeGroup> onlineCodexNodes = new List<CodexNodeGroup>();
2023-03-21 16:09:41 +01:00
private readonly KnownK8sPods knownPods = new KnownK8sPods();
2023-03-22 09:22:18 +01:00
private readonly TestLog log;
2023-03-21 08:23:15 +01:00
private readonly IFileManager fileManager;
2023-03-22 09:22:18 +01:00
public K8sManager(TestLog log, IFileManager fileManager)
{
2023-03-22 09:22:18 +01:00
this.log = log;
this.fileManager = fileManager;
}
2023-03-22 09:22:18 +01:00
public ICodexNodeGroup BringOnline(OfflineCodexNodes offline)
{
2023-03-21 16:09:41 +01:00
var online = CreateOnlineCodexNodes(offline);
2023-03-21 16:09:41 +01:00
K8s().BringOnline(online, offline);
2023-03-22 09:22:18 +01:00
log.Log($"{online.Describe()} online.");
2023-03-21 15:17:48 +01:00
2023-03-21 16:09:41 +01:00
return online;
2023-03-21 15:44:21 +01:00
}
2023-03-22 09:22:18 +01:00
public IOfflineCodexNodes BringOffline(ICodexNodeGroup node)
{
2023-03-21 16:09:41 +01:00
var online = GetAndRemoveActiveNodeFor(node);
2023-03-21 16:09:41 +01:00
K8s().BringOffline(online);
2023-03-22 09:22:18 +01:00
log.Log($"{online.Describe()} offline.");
2023-03-21 16:09:41 +01:00
return online.Origin;
}
public void DeleteAllResources()
{
2023-03-21 16:09:41 +01:00
K8s().DeleteAllResources();
2023-03-21 15:17:48 +01:00
}
2023-03-21 16:09:41 +01:00
public void FetchAllPodsLogs(IPodLogsHandler logHandler)
2023-03-21 15:17:48 +01:00
{
2023-03-21 16:09:41 +01:00
K8s().FetchAllPodsLogs(onlineCodexNodes.ToArray(), logHandler);
}
2023-03-22 09:22:18 +01:00
private CodexNodeGroup CreateOnlineCodexNodes(OfflineCodexNodes offline)
{
2023-03-21 16:09:41 +01:00
var containers = CreateContainers(offline.NumberOfNodes);
2023-03-22 09:22:18 +01:00
var online = containers.Select(c => new OnlineCodexNode(log, fileManager, c)).ToArray();
var result = new CodexNodeGroup(onlineCodexNodeOrderNumberSource.GetNextNumber(), offline, this, online);
2023-03-21 16:09:41 +01:00
onlineCodexNodes.Add(result);
2023-03-21 15:17:48 +01:00
return result;
}
2023-03-21 16:09:41 +01:00
private CodexNodeContainer[] CreateContainers(int number)
{
2023-03-21 16:09:41 +01:00
var factory = new CodexNodeContainerFactory();
var containers = new List<CodexNodeContainer>();
for (var i = 0; i < number; i++) containers.Add(factory.CreateNext());
return containers.ToArray();
}
2023-03-22 09:22:18 +01:00
private CodexNodeGroup GetAndRemoveActiveNodeFor(ICodexNodeGroup node)
2023-03-19 11:40:05 +01:00
{
2023-03-22 09:22:18 +01:00
var n = (CodexNodeGroup)node;
2023-03-21 16:09:41 +01:00
onlineCodexNodes.Remove(n);
2023-03-21 15:44:21 +01:00
return n;
2023-03-19 11:40:05 +01:00
}
2023-03-21 16:09:41 +01:00
private K8sOperations K8s()
{
return new K8sOperations(knownPods);
}
}
}