Skip to content

Commit a5f0e06

Browse files
allantarginobrendandburns
authored andcommitted
support for string and stream config (kubernetes-client#83)
1 parent f17848d commit a5f0e06

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

src/KubernetesClientConfiguration.ConfigFile.cs

+79
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,58 @@ public static KubernetesClientConfiguration BuildConfigFromConfigFile(FileInfo k
5050
}
5151

5252
var k8SConfig = LoadKubeConfig(kubeconfig);
53+
var k8SConfiguration = GetKubernetesClientConfiguration(currentContext, masterUrl, k8SConfig);
54+
55+
return k8SConfiguration;
56+
}
57+
58+
/// <summary>
59+
/// </summary>
60+
/// <param name="kubeconfig">Fileinfo of the kubeconfig, cannot be null, whitespaced or empty</param>
61+
/// <param name="currentContext">override the context in config file, set null if do not want to override</param>
62+
/// <param name="masterUrl">overrider kube api server endpoint, set null if do not want to override</param>
63+
public static KubernetesClientConfiguration BuildConfigFromConfigFile(string kubeconfig,
64+
string currentContext = null, string masterUrl = null)
65+
{
66+
if (string.IsNullOrWhiteSpace(kubeconfig))
67+
{
68+
throw new NullReferenceException(nameof(kubeconfig));
69+
}
70+
71+
var k8SConfig = LoadKubeConfig(kubeconfig);
72+
var k8SConfiguration = GetKubernetesClientConfiguration(currentContext, masterUrl, k8SConfig);
73+
74+
return k8SConfiguration;
75+
}
76+
77+
/// <summary>
78+
/// </summary>
79+
/// <param name="kubeconfig">Fileinfo of the kubeconfig, cannot be null, whitespaced or empty</param>
80+
/// <param name="currentContext">override the context in config file, set null if do not want to override</param>
81+
/// <param name="masterUrl">overrider kube api server endpoint, set null if do not want to override</param>
82+
public static KubernetesClientConfiguration BuildConfigFromConfigFile(Stream kubeconfig,
83+
string currentContext = null, string masterUrl = null)
84+
{
85+
if (kubeconfig == null)
86+
{
87+
throw new NullReferenceException(nameof(kubeconfig));
88+
}
89+
90+
if (!kubeconfig.CanSeek)
91+
{
92+
throw new Exception("Stream don't support seeking!");
93+
}
94+
95+
kubeconfig.Position = 0;
96+
97+
var k8SConfig = LoadKubeConfig(kubeconfig);
98+
var k8SConfiguration = GetKubernetesClientConfiguration(currentContext, masterUrl, k8SConfig);
99+
100+
return k8SConfiguration;
101+
}
102+
103+
private static KubernetesClientConfiguration GetKubernetesClientConfiguration(string currentContext, string masterUrl, K8SConfiguration k8SConfig)
104+
{
53105
var k8SConfiguration = new KubernetesClientConfiguration();
54106

55107
currentContext = currentContext ?? k8SConfig.CurrentContext;
@@ -228,5 +280,32 @@ private static K8SConfiguration LoadKubeConfig(FileInfo kubeconfig)
228280
return deserializer.Deserialize<K8SConfiguration>(kubeConfigTextStream);
229281
}
230282
}
283+
284+
/// <summary>
285+
/// Loads Kube Config from string
286+
/// </summary>
287+
/// <param name="kubeconfig">Kube config file contents</param>
288+
/// <returns>Instance of the <see cref="K8SConfiguration"/> class</returns>
289+
private static K8SConfiguration LoadKubeConfig(string kubeconfig)
290+
{
291+
292+
var deserializeBuilder = new DeserializerBuilder();
293+
var deserializer = deserializeBuilder.Build();
294+
return deserializer.Deserialize<K8SConfiguration>(kubeconfig);
295+
}
296+
297+
/// <summary>
298+
/// Loads Kube Config from stream.
299+
/// </summary>
300+
/// <param name="kubeconfig">Kube config file contents</param>
301+
/// <returns>Instance of the <see cref="K8SConfiguration"/> class</returns>
302+
private static K8SConfiguration LoadKubeConfig(Stream kubeconfig)
303+
{
304+
using (var sr = new StreamReader(kubeconfig))
305+
{
306+
var strKubeConfig = sr.ReadToEnd();
307+
return LoadKubeConfig(strKubeConfig);
308+
}
309+
}
231310
}
232311
}

tests/KubernetesClientConfigurationTests.cs

+26
Original file line numberDiff line numberDiff line change
@@ -285,5 +285,31 @@ public void DeletedConfigurationFile()
285285
File.Delete(tempFileInfo.FullName);
286286
}
287287
}
288+
289+
/// <summary>
290+
/// Checks Host is loaded from the default configuration file as string
291+
/// </summary>
292+
[Fact]
293+
public void DefaultConfigurationAsStringLoaded()
294+
{
295+
var txt = File.ReadAllText("assets/kubeconfig.yml");
296+
297+
var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(txt, null, null);
298+
Assert.NotNull(cfg.Host);
299+
}
300+
301+
302+
/// <summary>
303+
/// Checks Host is loaded from the default configuration file as stream
304+
/// </summary>
305+
[Fact]
306+
public void DefaultConfigurationAsStreamLoaded()
307+
{
308+
using (var stream = File.OpenRead("assets/kubeconfig.yml"))
309+
{
310+
var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(stream);
311+
Assert.NotNull(cfg.Host);
312+
}
313+
}
288314
}
289315
}

0 commit comments

Comments
 (0)