summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Majewsky <stefan.majewsky@sap.com>2017-08-21 10:23:33 +0200
committerStefan Majewsky <stefan.majewsky@sap.com>2017-08-21 10:23:34 +0200
commit3ab7fcc665e3975ed75aefb51e3df679a5422a64 (patch)
tree6d8ea3a13458831f9ac2f73d598bbb71a340ecb4
parent6deecc0cd94367cf106832ed7e8c4e4b9891bcb7 (diff)
downloadgofu-3ab7fcc665e3975ed75aefb51e3df679a5422a64.tar.gz
prompt: add fields for active kubectl context and OpenStack credentials
-rw-r--r--pkg/prompt/cloud.go83
-rw-r--r--pkg/prompt/main.go2
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]))