aboutsummaryrefslogtreecommitdiffstats
path: root/src/k8splugin/internal/connection/connection.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/k8splugin/internal/connection/connection.go')
-rw-r--r--src/k8splugin/internal/connection/connection.go50
1 files changed, 39 insertions, 11 deletions
diff --git a/src/k8splugin/internal/connection/connection.go b/src/k8splugin/internal/connection/connection.go
index 3faa74bd..b2bdca32 100644
--- a/src/k8splugin/internal/connection/connection.go
+++ b/src/k8splugin/internal/connection/connection.go
@@ -17,7 +17,11 @@
package connection
import (
+ "encoding/base64"
"encoding/json"
+ "io/ioutil"
+ "path/filepath"
+
"k8splugin/internal/db"
pkgerrors "github.com/pkg/errors"
@@ -25,16 +29,15 @@ import (
// Connection contains the parameters needed for Connection information for a Cloud region
type Connection struct {
- ConnectionName string `json:"name"`
+ CloudRegion string `json:"cloud-region"`
CloudOwner string `json:"cloud-owner"`
- CloudRegionID string `json:"cloud-region-id"`
- Kubeconfig map[string]interface{} `json:"kubeconfig"`
+ Kubeconfig string `json:"kubeconfig"`
OtherConnectivityList map[string]interface{} `json:"other-connectivity-list"`
}
// ConnectionKey is the key structure that is used in the database
type ConnectionKey struct {
- ConnectionName string `json:"connection-name"`
+ CloudRegion string `json:"cloud-region"`
}
// We will use json marshalling to convert to string to
@@ -48,14 +51,14 @@ func (dk ConnectionKey) String() string {
return string(out)
}
-// ConnectionManager is an interface exposes the Connection functionality
+// ConnectionManager is an interface exposes the Connection functionality
type ConnectionManager interface {
Create(c Connection) (Connection, error)
Get(name string) (Connection, error)
Delete(name string) error
}
-// ConnectionClient implements the ConnectionManager
+// ConnectionClient implements the ConnectionManager
// It will also be used to maintain some localized state
type ConnectionClient struct {
storeName string
@@ -75,10 +78,10 @@ func NewConnectionClient() *ConnectionClient {
func (v *ConnectionClient) Create(c Connection) (Connection, error) {
//Construct composite key consisting of name
- key := ConnectionKey{ConnectionName: c.ConnectionName}
+ key := ConnectionKey{CloudRegion: c.CloudRegion}
//Check if this Connection already exists
- _, err := v.Get(c.ConnectionName)
+ _, err := v.Get(c.CloudRegion)
if err == nil {
return Connection{}, pkgerrors.New("Connection already exists")
}
@@ -95,7 +98,7 @@ func (v *ConnectionClient) Create(c Connection) (Connection, error) {
func (v *ConnectionClient) Get(name string) (Connection, error) {
//Construct the composite key to select the entry
- key := ConnectionKey{ConnectionName: name}
+ key := ConnectionKey{CloudRegion: name}
value, err := db.DBconn.Read(v.storeName, key, v.tagMeta)
if err != nil {
return Connection{}, pkgerrors.Wrap(err, "Get Connection")
@@ -114,14 +117,39 @@ func (v *ConnectionClient) Get(name string) (Connection, error) {
return Connection{}, pkgerrors.New("Error getting Connection")
}
-// Delete the Connection from database
+// Delete the Connection from database
func (v *ConnectionClient) Delete(name string) error {
//Construct the composite key to select the entry
- key := ConnectionKey{ConnectionName: name}
+ key := ConnectionKey{CloudRegion: name}
err := db.DBconn.Delete(v.storeName, key, v.tagMeta)
if err != nil {
return pkgerrors.Wrap(err, "Delete Connection")
}
return nil
}
+
+// Download the connection information onto a kubeconfig file
+// The file is named after the name of the connection and will
+// be placed in the provided parent directory
+func (v *ConnectionClient) Download(name string, parentdir string) (string, error) {
+
+ conn, err := v.Get(name)
+ if err != nil {
+ return "", pkgerrors.Wrap(err, "Getting Connection info")
+ }
+
+ //Decode the kubeconfig from base64 to string
+ kubeContent, err := base64.StdEncoding.DecodeString(conn.Kubeconfig)
+ if err != nil {
+ return "", pkgerrors.Wrap(err, "Converting from base64")
+ }
+
+ target := filepath.Join(parentdir, conn.CloudRegion)
+ err = ioutil.WriteFile(target, kubeContent, 0644)
+ if err != nil {
+ return "", pkgerrors.Wrap(err, "Writing kubeconfig to file")
+ }
+
+ return target, nil
+}