summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas O'Donnell <andytom@users.noreply.github.com>2019-11-12 06:34:01 +0100
committerMatan Kushner <hello@matchai.me>2019-11-12 14:34:01 +0900
commitfc2f644237f7fc7effa22aa334c9211679227595 (patch)
tree988a756bfbc8859fd3ddfe3addceb89dd98ccecc
parentc7cbaa155ea81f763ce50bd49119b8b16a61a6f1 (diff)
fix: Add support for multiple Kubeconfig files (#635)
This adds support for having multiple Kubeconfig file set as part of the `KUBECONFIG` env var.
-rw-r--r--src/modules/kubernetes.rs20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/modules/kubernetes.rs b/src/modules/kubernetes.rs
index 16336d37c..c8d55be1e 100644
--- a/src/modules/kubernetes.rs
+++ b/src/modules/kubernetes.rs
@@ -38,15 +38,23 @@ fn get_kube_context(contents: &str) -> Option<(String, String)> {
Some((current_ctx.to_string(), ns.to_string()))
}
+fn parse_kubectl_file(filename: &path::PathBuf) -> Option<(String, String)> {
+ let contents = utils::read_file(filename).ok()?;
+ get_kube_context(&contents)
+}
+
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
- let filename = match env::var("KUBECONFIG") {
- Ok(path) => path::PathBuf::from(path),
- Err(_) => dirs::home_dir()?.join(".kube").join("config"),
+ let kube_cfg = match env::var("KUBECONFIG") {
+ Ok(paths) => env::split_paths(&paths)
+ .filter_map(|filename| parse_kubectl_file(&filename))
+ .nth(0),
+ Err(_) => {
+ let filename = dirs::home_dir()?.join(".kube").join("config");
+ parse_kubectl_file(&filename)
+ }
};
- let contents = utils::read_file(filename).ok()?;
-
- match get_kube_context(&contents) {
+ match kube_cfg {
Some(kube_cfg) => {
let (kube_ctx, kube_ns) = kube_cfg;