Skip to content

Commit

Permalink
support for string and stream config (kubernetes-client#83)
Browse files Browse the repository at this point in the history
  • Loading branch information
allantargino authored and brendandburns committed Feb 1, 2018
1 parent f17848d commit a5f0e06
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 0 deletions.
79 changes: 79 additions & 0 deletions src/KubernetesClientConfiguration.ConfigFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,58 @@ public static KubernetesClientConfiguration BuildConfigFromConfigFile(FileInfo k
}

var k8SConfig = LoadKubeConfig(kubeconfig);
var k8SConfiguration = GetKubernetesClientConfiguration(currentContext, masterUrl, k8SConfig);

return k8SConfiguration;
}

/// <summary>
/// </summary>
/// <param name="kubeconfig">Fileinfo of the kubeconfig, cannot be null, whitespaced or empty</param>
/// <param name="currentContext">override the context in config file, set null if do not want to override</param>
/// <param name="masterUrl">overrider kube api server endpoint, set null if do not want to override</param>
public static KubernetesClientConfiguration BuildConfigFromConfigFile(string kubeconfig,
string currentContext = null, string masterUrl = null)
{
if (string.IsNullOrWhiteSpace(kubeconfig))
{
throw new NullReferenceException(nameof(kubeconfig));
}

var k8SConfig = LoadKubeConfig(kubeconfig);
var k8SConfiguration = GetKubernetesClientConfiguration(currentContext, masterUrl, k8SConfig);

return k8SConfiguration;
}

/// <summary>
/// </summary>
/// <param name="kubeconfig">Fileinfo of the kubeconfig, cannot be null, whitespaced or empty</param>
/// <param name="currentContext">override the context in config file, set null if do not want to override</param>
/// <param name="masterUrl">overrider kube api server endpoint, set null if do not want to override</param>
public static KubernetesClientConfiguration BuildConfigFromConfigFile(Stream kubeconfig,
string currentContext = null, string masterUrl = null)
{
if (kubeconfig == null)
{
throw new NullReferenceException(nameof(kubeconfig));
}

if (!kubeconfig.CanSeek)
{
throw new Exception("Stream don't support seeking!");
}

kubeconfig.Position = 0;

var k8SConfig = LoadKubeConfig(kubeconfig);
var k8SConfiguration = GetKubernetesClientConfiguration(currentContext, masterUrl, k8SConfig);

return k8SConfiguration;
}

private static KubernetesClientConfiguration GetKubernetesClientConfiguration(string currentContext, string masterUrl, K8SConfiguration k8SConfig)
{
var k8SConfiguration = new KubernetesClientConfiguration();

currentContext = currentContext ?? k8SConfig.CurrentContext;
Expand Down Expand Up @@ -228,5 +280,32 @@ private static K8SConfiguration LoadKubeConfig(FileInfo kubeconfig)
return deserializer.Deserialize<K8SConfiguration>(kubeConfigTextStream);
}
}

/// <summary>
/// Loads Kube Config from string
/// </summary>
/// <param name="kubeconfig">Kube config file contents</param>
/// <returns>Instance of the <see cref="K8SConfiguration"/> class</returns>
private static K8SConfiguration LoadKubeConfig(string kubeconfig)
{

var deserializeBuilder = new DeserializerBuilder();
var deserializer = deserializeBuilder.Build();
return deserializer.Deserialize<K8SConfiguration>(kubeconfig);
}

/// <summary>
/// Loads Kube Config from stream.
/// </summary>
/// <param name="kubeconfig">Kube config file contents</param>
/// <returns>Instance of the <see cref="K8SConfiguration"/> class</returns>
private static K8SConfiguration LoadKubeConfig(Stream kubeconfig)
{
using (var sr = new StreamReader(kubeconfig))
{
var strKubeConfig = sr.ReadToEnd();
return LoadKubeConfig(strKubeConfig);
}
}
}
}
26 changes: 26 additions & 0 deletions tests/KubernetesClientConfigurationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,5 +285,31 @@ public void DeletedConfigurationFile()
File.Delete(tempFileInfo.FullName);
}
}

/// <summary>
/// Checks Host is loaded from the default configuration file as string
/// </summary>
[Fact]
public void DefaultConfigurationAsStringLoaded()
{
var txt = File.ReadAllText("assets/kubeconfig.yml");

var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(txt, null, null);
Assert.NotNull(cfg.Host);
}


/// <summary>
/// Checks Host is loaded from the default configuration file as stream
/// </summary>
[Fact]
public void DefaultConfigurationAsStreamLoaded()
{
using (var stream = File.OpenRead("assets/kubeconfig.yml"))
{
var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(stream);
Assert.NotNull(cfg.Host);
}
}
}
}

0 comments on commit a5f0e06

Please sign in to comment.