diff --git a/src/KubernetesClientConfiguration.ConfigFile.cs b/src/KubernetesClientConfiguration.ConfigFile.cs
index 862414db6..0a103da9c 100644
--- a/src/KubernetesClientConfiguration.ConfigFile.cs
+++ b/src/KubernetesClientConfiguration.ConfigFile.cs
@@ -50,6 +50,58 @@ public static KubernetesClientConfiguration BuildConfigFromConfigFile(FileInfo k
}
var k8SConfig = LoadKubeConfig(kubeconfig);
+ var k8SConfiguration = GetKubernetesClientConfiguration(currentContext, masterUrl, k8SConfig);
+
+ return k8SConfiguration;
+ }
+
+ ///
+ ///
+ /// Fileinfo of the kubeconfig, cannot be null, whitespaced or empty
+ /// override the context in config file, set null if do not want to override
+ /// overrider kube api server endpoint, set null if do not want to override
+ 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;
+ }
+
+ ///
+ ///
+ /// Fileinfo of the kubeconfig, cannot be null, whitespaced or empty
+ /// override the context in config file, set null if do not want to override
+ /// overrider kube api server endpoint, set null if do not want to override
+ 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;
@@ -228,5 +280,32 @@ private static K8SConfiguration LoadKubeConfig(FileInfo kubeconfig)
return deserializer.Deserialize(kubeConfigTextStream);
}
}
+
+ ///
+ /// Loads Kube Config from string
+ ///
+ /// Kube config file contents
+ /// Instance of the class
+ private static K8SConfiguration LoadKubeConfig(string kubeconfig)
+ {
+
+ var deserializeBuilder = new DeserializerBuilder();
+ var deserializer = deserializeBuilder.Build();
+ return deserializer.Deserialize(kubeconfig);
+ }
+
+ ///
+ /// Loads Kube Config from stream.
+ ///
+ /// Kube config file contents
+ /// Instance of the class
+ private static K8SConfiguration LoadKubeConfig(Stream kubeconfig)
+ {
+ using (var sr = new StreamReader(kubeconfig))
+ {
+ var strKubeConfig = sr.ReadToEnd();
+ return LoadKubeConfig(strKubeConfig);
+ }
+ }
}
}
diff --git a/tests/KubernetesClientConfigurationTests.cs b/tests/KubernetesClientConfigurationTests.cs
index da4567770..11701aa0c 100755
--- a/tests/KubernetesClientConfigurationTests.cs
+++ b/tests/KubernetesClientConfigurationTests.cs
@@ -285,5 +285,31 @@ public void DeletedConfigurationFile()
File.Delete(tempFileInfo.FullName);
}
}
+
+ ///
+ /// Checks Host is loaded from the default configuration file as string
+ ///
+ [Fact]
+ public void DefaultConfigurationAsStringLoaded()
+ {
+ var txt = File.ReadAllText("assets/kubeconfig.yml");
+
+ var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(txt, null, null);
+ Assert.NotNull(cfg.Host);
+ }
+
+
+ ///
+ /// Checks Host is loaded from the default configuration file as stream
+ ///
+ [Fact]
+ public void DefaultConfigurationAsStreamLoaded()
+ {
+ using (var stream = File.OpenRead("assets/kubeconfig.yml"))
+ {
+ var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(stream);
+ Assert.NotNull(cfg.Host);
+ }
+ }
}
}