diff options
| author | Stefan Majewsky <stefan.majewsky@sap.com> | 2017-08-21 10:23:33 +0200 |
|---|---|---|
| committer | Stefan Majewsky <stefan.majewsky@sap.com> | 2017-08-21 10:23:34 +0200 |
| commit | 3ab7fcc665e3975ed75aefb51e3df679a5422a64 (patch) | |
| tree | 6d8ea3a13458831f9ac2f73d598bbb71a340ecb4 | |
| parent | 6deecc0cd94367cf106832ed7e8c4e4b9891bcb7 (diff) | |
| download | gofu-3ab7fcc665e3975ed75aefb51e3df679a5422a64.tar.gz | |
prompt: add fields for active kubectl context and OpenStack credentials
| -rw-r--r-- | pkg/prompt/cloud.go | 83 | ||||
| -rw-r--r-- | pkg/prompt/main.go | 2 |
2 files changed, 85 insertions, 0 deletions
diff --git a/pkg/prompt/cloud.go b/pkg/prompt/cloud.go new file mode 100644 index 0000000..72bd6f9 --- /dev/null +++ b/pkg/prompt/cloud.go @@ -0,0 +1,83 @@ +/******************************************************************************* +* +* Copyright 2017 Stefan Majewsky <majewsky@gmx.net> +* +* This program is free software: you can redistribute it and/or modify it under +* the terms of the GNU General Public License as published by the Free Software +* Foundation, either version 3 of the License, or (at your option) any later +* version. +* +* This program is distributed in the hope that it will be useful, but WITHOUT ANY +* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +* A PARTICULAR PURPOSE. See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see <http://www.gnu.org/licenses/>. +* +*******************************************************************************/ + +package prompt + +import ( + "io/ioutil" + "os" + "path/filepath" + "strings" + + yaml "gopkg.in/yaml.v2" +) + +func getKubernetesField() string { + configPaths := filepath.SplitList(os.Getenv("KUBECONFIG")) + + var context string + for _, configPath := range configPaths { + context = getKubernetesContext(configPath) + if context != "" { + break + } + } + if context == "" { + return "" + } + + namespaceBytes, err := ioutil.ReadFile(filepath.Join(os.Getenv("HOME"), ".kubectl-namespace")) + namespace := strings.TrimSpace(string(namespaceBytes)) + if err != nil { + if !os.IsNotExist(err) { + handleError(err) + } + namespace = "" + } + if namespace != "" { + context += "/" + namespace + } + + return withType("kube", context) +} + +func getKubernetesContext(configPath string) string { + buf, err := ioutil.ReadFile(configPath) + if err != nil { + //non-existence is acceptable, just make the caller continue with the next configPath + if !os.IsNotExist(err) { + handleError(err) + } + return "" + } + + var data struct { + CurrentContext string `yaml:"current-context"` + } + err = yaml.Unmarshal(buf, &data) + handleError(err) + return strings.TrimSpace(data.CurrentContext) +} + +func getOpenstackField() string { + cloudName := os.Getenv("CURRENT_OS_CLOUD") + if cloudName == "" { + return "" + } + return withType("cloud", cloudName) +} diff --git a/pkg/prompt/main.go b/pkg/prompt/main.go index 419b704..1dcbbc7 100644 --- a/pkg/prompt/main.go +++ b/pkg/prompt/main.go @@ -39,6 +39,8 @@ func Exec(args []string) int { fields = appendUnlessEmpty(fields, getDeletedMessageField(cwd)) fields = appendUnlessEmpty(fields, getRepoStatusField(cwd.RepoRootPath)) fields = appendUnlessEmpty(fields, getTerminalField()) + fields = appendUnlessEmpty(fields, getOpenstackField()) + fields = appendUnlessEmpty(fields, getKubernetesField()) //this field should always be last if len(args) > 0 { fields = appendUnlessEmpty(fields, getExitCodeField(args[0])) |
