Skip to content

Commit ae7aa47

Browse files
committed
Adding KubeConfig form stream and removed code duplication
1 parent f68ceee commit ae7aa47

File tree

2 files changed

+63
-26
lines changed

2 files changed

+63
-26
lines changed

src/KubernetesClientConfiguration.ConfigFile.cs

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,24 +49,27 @@ public static KubernetesClientConfiguration BuildConfigFromConfigFile(FileInfo k
4949
throw new NullReferenceException(nameof(kubeconfig));
5050
}
5151

52-
var k8SConfig = LoadKubeConfig(kubeconfig);
53-
var k8SConfiguration = new KubernetesClientConfiguration();
54-
55-
currentContext = currentContext ?? k8SConfig.CurrentContext;
56-
// only init context if context if set
57-
if (currentContext != null)
58-
{
59-
k8SConfiguration.InitializeContext(k8SConfig, currentContext);
60-
}
61-
if (!string.IsNullOrWhiteSpace(masterUrl))
52+
var k8SConfig = LoadKubeConfig(kubeconfig);
53+
var k8SConfiguration = GetKubernetesClientConfiguration(ref 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))
6267
{
63-
k8SConfiguration.Host = masterUrl;
68+
throw new NullReferenceException(nameof(kubeconfig));
6469
}
6570

66-
if (string.IsNullOrWhiteSpace(k8SConfiguration.Host))
67-
{
68-
throw new KubeConfigException("Cannot infer server host url either from context or masterUrl");
69-
}
71+
var k8SConfig = LoadKubeConfig(kubeconfig);
72+
var k8SConfiguration = GetKubernetesClientConfiguration(ref currentContext, masterUrl, k8SConfig);
7073

7174
return k8SConfiguration;
7275
}
@@ -76,15 +79,22 @@ public static KubernetesClientConfiguration BuildConfigFromConfigFile(FileInfo k
7679
/// <param name="kubeconfig">Fileinfo of the kubeconfig, cannot be null, whitespaced or empty</param>
7780
/// <param name="currentContext">override the context in config file, set null if do not want to override</param>
7881
/// <param name="masterUrl">overrider kube api server endpoint, set null if do not want to override</param>
79-
public static KubernetesClientConfiguration BuildConfigFromConfigFileString(string kubeconfig,
82+
public static KubernetesClientConfiguration BuildConfigFromConfigFile(Stream kubeconfig,
8083
string currentContext = null, string masterUrl = null)
8184
{
82-
if (string.IsNullOrWhiteSpace(kubeconfig))
85+
if (kubeconfig == null && kubeconfig.Length == 0)
8386
{
8487
throw new NullReferenceException(nameof(kubeconfig));
8588
}
8689

8790
var k8SConfig = LoadKubeConfig(kubeconfig);
91+
var k8SConfiguration = GetKubernetesClientConfiguration(ref currentContext, masterUrl, k8SConfig);
92+
93+
return k8SConfiguration;
94+
}
95+
96+
private static KubernetesClientConfiguration GetKubernetesClientConfiguration(ref string currentContext, string masterUrl, K8SConfiguration k8SConfig)
97+
{
8898
var k8SConfiguration = new KubernetesClientConfiguration();
8999

90100
currentContext = currentContext ?? k8SConfig.CurrentContext;
@@ -101,11 +111,11 @@ public static KubernetesClientConfiguration BuildConfigFromConfigFileString(stri
101111
if (string.IsNullOrWhiteSpace(k8SConfiguration.Host))
102112
{
103113
throw new KubeConfigException("Cannot infer server host url either from context or masterUrl");
104-
}
105-
106-
return k8SConfiguration;
107-
}
108-
114+
}
115+
116+
return k8SConfiguration;
117+
}
118+
109119
/// <summary>
110120
/// Validates and Intializes Client Configuration
111121
/// </summary>
@@ -275,6 +285,18 @@ private static K8SConfiguration LoadKubeConfig(string kubeconfig)
275285
var deserializeBuilder = new DeserializerBuilder();
276286
var deserializer = deserializeBuilder.Build();
277287
return deserializer.Deserialize<K8SConfiguration>(kubeconfig);
288+
}
289+
290+
/// <summary>
291+
/// Loads Kube Config from stream.
292+
/// </summary>
293+
/// <param name="kubeconfig">Kube config file contents</param>
294+
/// <returns>Instance of the <see cref="K8SConfiguration"/> class</returns>
295+
private static K8SConfiguration LoadKubeConfig(Stream kubeconfig)
296+
{
297+
StreamReader sr = new StreamReader(kubeconfig);
298+
string strKubeConfig = sr.ReadToEnd();
299+
return LoadKubeConfig(strKubeConfig);
278300
}
279301
}
280302
}

tests/KubernetesClientConfigurationTests.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,17 +284,32 @@ public void DeletedConfigurationFile()
284284
{
285285
File.Delete(tempFileInfo.FullName);
286286
}
287-
}
288-
287+
}
288+
289289
/// <summary>
290290
/// Checks Host is loaded from the default configuration file as a string
291291
/// </summary>
292292
[Fact]
293293
public void DefaultConfigurationAsStringLoaded()
294-
{
294+
{
295295
var txt = File.ReadAllText("assets/kubeconfig.yml");
296-
var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFileString(txt);
296+
297+
var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(txt, null, null);
297298
Assert.NotNull(cfg.Host);
299+
}
300+
301+
302+
/// <summary>
303+
/// Checks Host is loaded from the default configuration file as a 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+
}
298313
}
299314
}
300315
}

0 commit comments

Comments
 (0)