cs-codex-dist-tests/Framework/KubernetesWorkflow/RunningContainers.cs

85 lines
2.7 KiB
C#
Raw Normal View History

using Utils;
namespace KubernetesWorkflow
2023-04-12 11:53:55 +00:00
{
public class RunningContainers
{
public RunningContainers(StartupConfig startupConfig, RunningPod runningPod, RunningContainer[] containers)
{
StartupConfig = startupConfig;
RunningPod = runningPod;
Containers = containers;
}
public StartupConfig StartupConfig { get; }
public RunningPod RunningPod { get; }
public RunningContainer[] Containers { get; }
2023-04-13 12:36:17 +00:00
public string Describe()
{
return string.Join(",", Containers.Select(c => c.Name));
2023-04-13 12:36:17 +00:00
}
2023-04-12 11:53:55 +00:00
}
public class RunningContainer
{
public RunningContainer(RunningPod pod, ContainerRecipe recipe, Port[] servicePorts, string name, ContainerPort[] containerPorts)
2023-04-12 11:53:55 +00:00
{
Pod = pod;
Recipe = recipe;
ServicePorts = servicePorts;
Name = name;
ContainerPorts = containerPorts;
2023-04-12 11:53:55 +00:00
}
public string Name { get; }
2023-04-12 11:53:55 +00:00
public RunningPod Pod { get; }
public ContainerRecipe Recipe { get; }
public Port[] ServicePorts { get; }
public ContainerPort[] ContainerPorts { get; }
2023-08-15 09:01:18 +00:00
public ContainerPort GetContainerPort(string portTag)
{
return ContainerPorts.Single(c => c.Port.Tag == portTag);
}
public Address GetAddress(string portTag)
2023-09-11 14:57:57 +00:00
{
var containerPort = GetContainerPort(portTag);
if (RunnerLocationUtils.DetermineRunnerLocation(this) == RunnerLocation.InternalToCluster)
2023-09-11 14:57:57 +00:00
{
return containerPort.InternalAddress;
2023-09-11 14:57:57 +00:00
}
if (!containerPort.ExternalAddress.IsValid()) throw new Exception($"Getting address by tag {portTag} resulted in an invalid address.");
return containerPort.ExternalAddress;
2023-09-11 14:57:57 +00:00
}
2023-04-12 11:53:55 +00:00
}
public class ContainerPort
{
public ContainerPort(Port port, Address externalAddress, Address internalAddress)
{
Port = port;
ExternalAddress = externalAddress;
InternalAddress = internalAddress;
}
public Port Port { get; }
public Address ExternalAddress { get; }
public Address InternalAddress { get; }
}
public static class RunningContainersExtensions
{
public static RunningContainer[] Containers(this RunningContainers[] runningContainers)
{
return runningContainers.SelectMany(c => c.Containers).ToArray();
}
public static string Describe(this RunningContainers[] runningContainers)
{
return string.Join(",", runningContainers.Select(c => c.Describe()));
}
}
2023-04-12 11:53:55 +00:00
}