diff options
Diffstat (limited to 'src/k8splugin/internal/connection/connection.go')
-rw-r--r-- | src/k8splugin/internal/connection/connection.go | 50 |
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 +} |