namespace KubernetesWorkflow
{
public interface IKnownLocations
{
///
/// Returns a known location given an index.
/// Each index guarantees a different location.
///
ILocation Get(int index);
int NumberOfLocations { get; }
///
/// Returns the location object for a specific kubernetes node. Throws if it doesn't exist.
///
ILocation Get(string kubeNodeName, bool allowPartialMatches = false);
}
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];
}
public ILocation Get(string kubeNodeName, bool allowPartialMatches = false)
{
if (allowPartialMatches)
{
return locations.Single(l => l.NodeLabel != null && l.NodeLabel.Value.Contains(kubeNodeName));
}
return locations.Single(l => l.NodeLabel != null && l.NodeLabel.Value == kubeNodeName);
}
}
}