2023-09-25 06:47:19 +00:00
|
|
|
|
namespace KubernetesWorkflow
|
|
|
|
|
{
|
|
|
|
|
public interface IKnownLocations
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Returns a known location given an index.
|
|
|
|
|
/// Each index guarantees a different location.
|
|
|
|
|
/// </summary>
|
|
|
|
|
ILocation Get(int index);
|
|
|
|
|
int NumberOfLocations { get; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Returns the location object for a specific kubernetes node. Throws if it doesn't exist.
|
|
|
|
|
/// </summary>
|
2023-09-25 07:19:29 +00:00
|
|
|
|
ILocation Get(string kubeNodeName, bool allowPartialMatches = false);
|
2023-09-25 06:47:19 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class KnownLocations : IKnownLocations
|
|
|
|
|
{
|
|
|
|
|
private readonly Location[] locations;
|
|
|
|
|
|
|
|
|
|
public KnownLocations(Location[] locations)
|
|
|
|
|
{
|
|
|
|
|
this.locations = locations;
|
|
|
|
|
if (locations.Any(l => l.NodeLabel == null)) throw new Exception("Must not contain unspecified location");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static ILocation UnspecifiedLocation { get; } = new Location();
|
|
|
|
|
|
|
|
|
|
public int NumberOfLocations => locations.Length;
|
|
|
|
|
|
|
|
|
|
public ILocation Get(int index)
|
|
|
|
|
{
|
|
|
|
|
return locations[index];
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-25 07:19:29 +00:00
|
|
|
|
public ILocation Get(string kubeNodeName, bool allowPartialMatches = false)
|
2023-09-25 06:47:19 +00:00
|
|
|
|
{
|
2023-09-25 07:19:29 +00:00
|
|
|
|
if (allowPartialMatches)
|
|
|
|
|
{
|
|
|
|
|
return locations.Single(l => l.NodeLabel != null && l.NodeLabel.Value.Contains(kubeNodeName));
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-25 06:47:19 +00:00
|
|
|
|
return locations.Single(l => l.NodeLabel != null && l.NodeLabel.Value == kubeNodeName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|