From 5e034137da34c9feafaac5e251abb413589f69fe Mon Sep 17 00:00:00 2001 From: Fiete Ostkamp Date: Tue, 9 Dec 2025 08:36:08 +0100 Subject: [PATCH] Pass context.Context to the store implementations - this service defines a Store interface with implementations for mongo and consul - enhance the methods of this interface to require a context.Context parameter - this is the first step in being able to pass the (request) context from the handler to the mongo driver - the context propagation is needed for the tracing instrumenations to pick up the overall trace context - bump snapshot version to 0.12.0-SNAPSHOT Issue-ID: MULTICLOUD-1537 Change-Id: Ibfcdbab6b46bc18a425a8abb3835c35371044bbc Signed-off-by: Fiete Ostkamp --- deployments/build.sh | 2 +- src/k8splugin/internal/app/hook.go | 3 +- src/k8splugin/internal/app/instance.go | 66 +++++++++++----------- src/k8splugin/internal/app/subscription.go | 13 +++-- src/k8splugin/internal/connection/connection.go | 32 ++++++----- src/k8splugin/internal/db/consul.go | 14 +++-- src/k8splugin/internal/db/consul_test.go | 9 +-- src/k8splugin/internal/db/mongo.go | 26 ++++----- src/k8splugin/internal/db/mongo_test.go | 12 ++-- src/k8splugin/internal/db/store.go | 11 ++-- src/k8splugin/internal/db/testing.go | 17 +++--- src/k8splugin/internal/healthcheck/healthcheck.go | 15 ++--- .../internal/namegenerator/namegenerator.go | 7 ++- src/k8splugin/internal/rb/config_template.go | 29 +++++----- src/k8splugin/internal/rb/definition.go | 19 ++++--- src/k8splugin/internal/rb/profile.go | 23 ++++---- 16 files changed, 152 insertions(+), 146 deletions(-) diff --git a/deployments/build.sh b/deployments/build.sh index 88c34cc1..d0057772 100755 --- a/deployments/build.sh +++ b/deployments/build.sh @@ -13,7 +13,7 @@ set -o pipefail k8s_path="$(git rev-parse --show-toplevel)" -VERSION="0.11.0-SNAPSHOT" +VERSION="0.12.0-SNAPSHOT" GO_VERSION="1.16" export IMAGE_NAME="nexus3.onap.org:10003/onap/multicloud/k8s" diff --git a/src/k8splugin/internal/app/hook.go b/src/k8splugin/internal/app/hook.go index 3a4af8a9..9645adcd 100644 --- a/src/k8splugin/internal/app/hook.go +++ b/src/k8splugin/internal/app/hook.go @@ -14,6 +14,7 @@ limitations under the License. package app import ( + "context" "fmt" "log" "strings" @@ -98,7 +99,7 @@ func (hc *HookClient) ExecHook( //-> when it comes back, it will continue from next hook and consider that this one is done if dbData != nil { dbData.HookProgress = fmt.Sprintf("%d/%d", index+1, len(executingHooks)) - err := db.DBconn.Update(hc.dbStoreName, key, hc.dbTagInst, dbData) + err := db.DBconn.Update(context.TODO(), hc.dbStoreName, key, hc.dbTagInst, dbData) if err != nil { return err } diff --git a/src/k8splugin/internal/app/instance.go b/src/k8splugin/internal/app/instance.go index 9aab4a5e..9455e23f 100644 --- a/src/k8splugin/internal/app/instance.go +++ b/src/k8splugin/internal/app/instance.go @@ -335,7 +335,7 @@ func (v *InstanceClient) Create(i InstanceRequest, newId string) (InstanceRespon key := InstanceKey{ ID: finalId, } - err = db.DBconn.Create(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { namegenerator.Release(generatedId) return InstanceResponse{}, pkgerrors.Wrap(err, "Creating Instance DB Entry") @@ -355,7 +355,7 @@ func (v *InstanceClient) Create(i InstanceRequest, newId string) (InstanceRespon err = hookClient.ExecHook(k8sClient, hookList, release.HookPreInstall, hookTimeoutInfo.preInstallTimeOut, 0, &dbData) if err != nil { log.Printf("Error running preinstall hooks for release %s, Error: %s. Stop here", releaseName, err) - err2 := db.DBconn.Delete(v.storeName, key, v.tagInst) + err2 := db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagInst) if err2 != nil { log.Printf("Error cleaning failed instance in DB, please check DB.") } else { @@ -366,9 +366,9 @@ func (v *InstanceClient) Create(i InstanceRequest, newId string) (InstanceRespon } dbData.Status = "CREATING" - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { - err2 := db.DBconn.Delete(v.storeName, key, v.tagInst) + err2 := db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagInst) if err2 != nil { log.Printf("Delete Instance DB Entry for release %s has error.", releaseName) } else { @@ -386,7 +386,7 @@ func (v *InstanceClient) Create(i InstanceRequest, newId string) (InstanceRespon } log.Printf(" Instance: %s, Main rss are failed, skip post-install and remove instance in DB", finalId) //main rss creation failed -> remove instance in DB - err2 := db.DBconn.Delete(v.storeName, key, v.tagInst) + err2 := db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagInst) if err2 != nil { log.Printf("Delete Instance DB Entry for release %s has error.", releaseName) } else { @@ -397,7 +397,7 @@ func (v *InstanceClient) Create(i InstanceRequest, newId string) (InstanceRespon dbData.Status = "CREATED" dbData.Resources = createdResources - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { return InstanceResponse{}, pkgerrors.Wrap(err, "Update Instance DB Entry") } @@ -423,14 +423,14 @@ func (v *InstanceClient) Create(i InstanceRequest, newId string) (InstanceRespon } else { dbData.Status = "DONE" } - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", releaseName) } }() } else { dbData.Status = "DONE" - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", releaseName) } @@ -458,7 +458,7 @@ func (v *InstanceClient) Upgrade(id string, u UpgradeRequest) (InstanceResponse, key := InstanceKey{ ID: id, } - value, err := db.DBconn.Read(v.storeName, key, v.tagInst) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagInst) if err != nil { return InstanceResponse{}, pkgerrors.Wrap(err, "Upgrade Instance") } @@ -497,14 +497,14 @@ func (v *InstanceClient) Upgrade(id string, u UpgradeRequest) (InstanceResponse, oldKey := InstanceKey{ ID: newInstance.ID, } - err2 := db.DBconn.Delete(v.storeName, oldKey, v.tagInst) + err2 := db.DBconn.Delete(context.TODO(), v.storeName, oldKey, v.tagInst) if err2 != nil { log.Printf("Delete of the temporal instance from the DB has failed %s", err2.Error()) } namegenerator.Release(newInstance.ID) newInstanceDb.ID = id newInstance.ID = id - err = db.DBconn.Create(v.storeName, key, v.tagInst, newInstanceDb) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagInst, newInstanceDb) if err != nil { return newInstance, pkgerrors.Wrap(err, "Create Instance DB Entry after update failed") } @@ -584,7 +584,7 @@ func (v *InstanceClient) Upgrade(id string, u UpgradeRequest) (InstanceResponse, return InstanceResponse{}, pkgerrors.Wrap(err, "Creating Namespace") } - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { return InstanceResponse{}, pkgerrors.Wrap(err, "Updating Instance DB Entry") } @@ -608,7 +608,7 @@ func (v *InstanceClient) Upgrade(id string, u UpgradeRequest) (InstanceResponse, } dbData.Status = "UPGRADING" - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { return InstanceResponse{}, pkgerrors.Wrap(err, "Update Instance DB Entry") } @@ -659,7 +659,7 @@ func (v *InstanceClient) Upgrade(id string, u UpgradeRequest) (InstanceResponse, dbData.Status = "UPGRADED" dbData.Resources = upgradedResources - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { return InstanceResponse{}, pkgerrors.Wrap(err, "Update Instance DB Entry") } @@ -685,14 +685,14 @@ func (v *InstanceClient) Upgrade(id string, u UpgradeRequest) (InstanceResponse, } else { dbData.Status = "DONE" } - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", releaseName) } }() } else { dbData.Status = "DONE" - err = db.DBconn.Update(v.storeName, key, v.tagInst, dbData) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, dbData) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", releaseName) } @@ -706,7 +706,7 @@ func (v *InstanceClient) GetFull(id string) (InstanceDbData, error) { key := InstanceKey{ ID: id, } - value, err := db.DBconn.Read(v.storeName, key, v.tagInst) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagInst) if err != nil { return InstanceDbData{}, pkgerrors.Wrap(err, "Get Instance") } @@ -752,7 +752,7 @@ func (v *InstanceClient) Get(id string) (InstanceResponse, error) { key := InstanceKey{ ID: id, } - value, err := db.DBconn.Read(v.storeName, key, v.tagInst) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagInst) if err != nil { return InstanceResponse{}, pkgerrors.Wrap(err, "Get Instance") } @@ -778,7 +778,7 @@ func (v *InstanceClient) Query(id, apiVersion, kind, name, labels string) (Insta key := InstanceKey{ ID: id, } - value, err := db.DBconn.Read(v.storeName, key, v.tagInst) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagInst) if err != nil { return InstanceStatus{}, pkgerrors.Wrap(err, "Get Instance") } @@ -819,7 +819,7 @@ func (v *InstanceClient) Status(id string, checkReady bool) (InstanceStatus, err ID: id, } - value, err := db.DBconn.Read(v.storeName, key, v.tagInst) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagInst) if err != nil { return InstanceStatus{}, pkgerrors.Wrap(err, "Get Instance") } @@ -985,7 +985,7 @@ func (v *InstanceClient) checkRssStatus(rss helm.KubernetesResource, k8sClient K // Empty string returns all func (v *InstanceClient) List(rbname, rbversion, profilename string) ([]InstanceMiniResponse, error) { - dbres, err := db.DBconn.ReadAll(v.storeName, v.tagInst) + dbres, err := db.DBconn.ReadAll(context.TODO(), v.storeName, v.tagInst) if err != nil || len(dbres) == 0 { return []InstanceMiniResponse{}, pkgerrors.Wrap(err, "Listing Instances") } @@ -1081,7 +1081,7 @@ func (v *InstanceClient) Delete(id string) error { } if inst.Status == "DELETED" { //The instance is deleted when the plugin comes back -> just remove from Db - err = db.DBconn.Delete(v.storeName, key, v.tagInst) + err = db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagInst) if err != nil { log.Printf("Delete Instance DB Entry for release %s has error.", inst.ReleaseName) } @@ -1100,7 +1100,7 @@ func (v *InstanceClient) Delete(id string) error { inst.Status = "PRE-DELETE" inst.HookProgress = "" - err = db.DBconn.Update(v.storeName, key, v.tagInst, inst) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, inst) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", inst.ReleaseName) } @@ -1111,7 +1111,7 @@ func (v *InstanceClient) Delete(id string) error { if err != nil { log.Printf(" Instance: %s, Error running pre-delete hooks error: %s", id, err) inst.Status = "PRE-DELETE-FAILED" - err2 := db.DBconn.Update(v.storeName, key, v.tagInst, inst) + err2 := db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, inst) if err2 != nil { log.Printf("Update Instance DB Entry for release %s has error.", inst.ReleaseName) } @@ -1120,7 +1120,7 @@ func (v *InstanceClient) Delete(id string) error { } inst.Status = "DELETING" - err = db.DBconn.Update(v.storeName, key, v.tagInst, inst) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, inst) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", inst.ReleaseName) } @@ -1149,7 +1149,7 @@ func (v *InstanceClient) Delete(id string) error { log.Printf(err.Error()) } - err = db.DBconn.Delete(v.storeName, key, v.tagInst) + err = db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagInst) if err != nil { return pkgerrors.Wrap(err, "Delete Instance") } @@ -1178,7 +1178,7 @@ func (v *InstanceClient) RecoverCreateOrDelete(id string) error { log.Printf(" Resolving template for release %s", instance.Request.ReleaseName) _, _, hookList, _, err := rb.NewProfileClient().Resolve(instance.Request.RBName, instance.Request.RBVersion, instance.Request.ProfileName, overrideValues, instance.Request.ReleaseName) instance.Hooks = hookList - err = db.DBconn.Update(v.storeName, key, v.tagInst, instance) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, instance) if err != nil { return pkgerrors.Wrap(err, "Update Instance DB Entry") } @@ -1225,7 +1225,7 @@ func (v *InstanceClient) RecoverCreateOrDelete(id string) error { } else { instance.Status = "DONE" } - err = db.DBconn.Update(v.storeName, key, v.tagInst, instance) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, instance) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", instance.ReleaseName) } @@ -1238,7 +1238,7 @@ func (v *InstanceClient) RecoverCreateOrDelete(id string) error { if err != nil { log.Printf(" Instance: %s, Error running pre-delete hooks error: %s", id, err) instance.Status = "PRE-DELETE-FAILED" - err = db.DBconn.Update(v.storeName, key, v.tagInst, instance) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, instance) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", instance.ReleaseName) } @@ -1277,7 +1277,7 @@ func (v *InstanceClient) runPostDelete(k8sClient KubernetesClient, hookClient *H ID: instance.ID, } instance.Status = "POST-DELETE" - err := db.DBconn.Update(v.storeName, key, v.tagInst, instance) + err := db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, instance) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", instance.ReleaseName) } @@ -1286,7 +1286,7 @@ func (v *InstanceClient) runPostDelete(k8sClient KubernetesClient, hookClient *H //If this case happen, user should clean the cluster log.Printf(" Instance: %s, Error running post-delete hooks error: %s", instance.ID, err) instance.Status = "POST-DELETE-FAILED" - err2 := db.DBconn.Update(v.storeName, key, v.tagInst, instance) + err2 := db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, instance) if err2 != nil { log.Printf("Update Instance DB Entry for release %s has error.", instance.ReleaseName) return pkgerrors.Wrap(err2, "Delete Instance DB Entry") @@ -1299,14 +1299,14 @@ func (v *InstanceClient) runPostDelete(k8sClient KubernetesClient, hookClient *H if err != nil { log.Printf(err.Error()) } - err = db.DBconn.Delete(v.storeName, key, v.tagInst) + err = db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagInst) if err != nil { log.Printf("Delete Instance DB Entry for release %s has error.", instance.ReleaseName) return pkgerrors.Wrap(err, "Delete Instance DB Entry") } } else { instance.Status = "DELETED" - err := db.DBconn.Update(v.storeName, key, v.tagInst, instance) + err := db.DBconn.Update(context.TODO(), v.storeName, key, v.tagInst, instance) if err != nil { log.Printf("Update Instance DB Entry for release %s has error.", instance.ReleaseName) return pkgerrors.Wrap(err, "Update Instance DB Entry") diff --git a/src/k8splugin/internal/app/subscription.go b/src/k8splugin/internal/app/subscription.go index 9b4a1aaf..ff2cec4d 100644 --- a/src/k8splugin/internal/app/subscription.go +++ b/src/k8splugin/internal/app/subscription.go @@ -18,6 +18,7 @@ package app import ( "bytes" + "context" "encoding/json" "io/ioutil" "net" @@ -181,7 +182,7 @@ func (iss *InstanceStatusSubClient) Create(instanceId string, subDetails Subscri lock.Lock() defer lock.Unlock() - err = db.DBconn.Create(iss.storeName, key, iss.tagInst, sub) + err = db.DBconn.Create(context.TODO(), iss.storeName, key, iss.tagInst, sub) if err != nil { return sub, pkgerrors.Wrap(err, "Creating Status Subscription DB Entry") } @@ -205,7 +206,7 @@ func (iss *InstanceStatusSubClient) Get(instanceId, subId string) (StatusSubscri InstanceId: instanceId, SubscriptionName: subId, } - DBResp, err := db.DBconn.Read(iss.storeName, key, iss.tagInst) + DBResp, err := db.DBconn.Read(context.TODO(), iss.storeName, key, iss.tagInst) if err != nil || DBResp == nil { return StatusSubscription{}, pkgerrors.Wrap(err, "Error retrieving Subscription data") } @@ -247,7 +248,7 @@ func (iss *InstanceStatusSubClient) Update(instanceId, subId string, subDetails lock.Lock() defer lock.Unlock() - err = db.DBconn.Update(iss.storeName, key, iss.tagInst, sub) + err = db.DBconn.Update(context.TODO(), iss.storeName, key, iss.tagInst, sub) if err != nil { return sub, pkgerrors.Wrap(err, "Updating Status Subscription DB Entry") } @@ -267,7 +268,7 @@ func (iss *InstanceStatusSubClient) List(instanceId string) ([]StatusSubscriptio lock.Lock() defer lock.Unlock() // Retrieve info about created status subscriptions - dbResp, err := db.DBconn.ReadAll(iss.storeName, iss.tagInst) + dbResp, err := db.DBconn.ReadAll(context.TODO(), iss.storeName, iss.tagInst) if err != nil { if !strings.Contains(err.Error(), "Did not find any objects with tag") { return []StatusSubscription{}, pkgerrors.Wrap(err, "Getting Status Subscription data") @@ -322,7 +323,7 @@ func (iss *InstanceStatusSubClient) Delete(instanceId, subId string) error { InstanceId: instanceId, SubscriptionName: subId, } - err = db.DBconn.Delete(iss.storeName, key, iss.tagInst) + err = db.DBconn.Delete(context.TODO(), iss.storeName, key, iss.tagInst) if err != nil { return pkgerrors.Wrap(err, "Removing Status Subscription in DB") } @@ -704,7 +705,7 @@ func runNotifyThread(instanceId, subName string) { }) currentSub.LastNotifyStatus = notifyResult.result currentSub.LastNotifyTime = notifyResult.time - err = db.DBconn.Update(iss.storeName, key, iss.tagInst, currentSub) + err = db.DBconn.Update(context.TODO(), iss.storeName, key, iss.tagInst, currentSub) if err != nil { log.Error("Error updating subscription status", log.Fields{ "error": err.Error(), diff --git a/src/k8splugin/internal/connection/connection.go b/src/k8splugin/internal/connection/connection.go index df1400b5..a3cee20d 100644 --- a/src/k8splugin/internal/connection/connection.go +++ b/src/k8splugin/internal/connection/connection.go @@ -17,6 +17,7 @@ package connection import ( + "context" "encoding/base64" "encoding/json" "io/ioutil" @@ -92,7 +93,7 @@ func (v *ConnectionClient) Create(c Connection) (Connection, error) { return Connection{}, pkgerrors.New("Connection already exists") } - err = db.DBconn.Create(v.storeName, key, v.tagMeta, c) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagMeta, c) if err != nil { return Connection{}, pkgerrors.Wrap(err, "Creating DB Entry") } @@ -105,7 +106,7 @@ func (v *ConnectionClient) Get(name string) (Connection, error) { //Construct the composite key to select the entry key := ConnectionKey{CloudRegion: name} - value, err := db.DBconn.Read(v.storeName, key, v.tagMeta) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagMeta) if err != nil { return Connection{}, pkgerrors.Wrap(err, "Get Connection") } @@ -126,18 +127,19 @@ func (v *ConnectionClient) Get(name string) (Connection, error) { // GetConnectivityRecordByName returns Connection for corresponding to name // JSON example: // "connectivity-records" : -// [ -// { -// “connectivity-record-name” : “”, // example: OVN -// “FQDN-or-ip” : “”, -// “ca-cert-to-verify-server” : “”, -// “ssl-initiator” : “, -// “user-name”: “”, //valid if ssl-initator is false -// “password” : “”, // valid if ssl-initiator is false -// “private-key” : “”, // valid if ssl-initiator is true -// “cert-to-present” : “” , //valid if ssl-initiator is true -// }, -// ] +// +// [ +// { +// “connectivity-record-name” : “”, // example: OVN +// “FQDN-or-ip” : “”, +// “ca-cert-to-verify-server” : “”, +// “ssl-initiator” : “, +// “user-name”: “”, //valid if ssl-initator is false +// “password” : “”, // valid if ssl-initiator is false +// “private-key” : “”, // valid if ssl-initiator is true +// “cert-to-present” : “” , //valid if ssl-initiator is true +// }, +// ] func (v *ConnectionClient) GetConnectivityRecordByName(connectionName string, connectivityRecordName string) (map[string]string, error) { @@ -160,7 +162,7 @@ func (v *ConnectionClient) Delete(name string) error { //Construct the composite key to select the entry key := ConnectionKey{CloudRegion: name} - err := db.DBconn.Delete(v.storeName, key, v.tagMeta) + err := db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagMeta) if err != nil { return pkgerrors.Wrap(err, "Delete Connection") } diff --git a/src/k8splugin/internal/db/consul.go b/src/k8splugin/internal/db/consul.go index 40978b69..6c1367a0 100644 --- a/src/k8splugin/internal/db/consul.go +++ b/src/k8splugin/internal/db/consul.go @@ -14,6 +14,8 @@ limitations under the License. package db import ( + "context" + k8sconfig "github.com/onap/multicloud-k8s/src/k8splugin/internal/config" "github.com/hashicorp/consul/api" @@ -67,7 +69,7 @@ func (c *ConsulStore) Unmarshal(inp []byte, out interface{}) error { } // Create is used to create a DB entry -func (c *ConsulStore) Create(root string, key Key, tag string, data interface{}) error { +func (c *ConsulStore) Create(ctx context.Context, root string, key Key, tag string, data interface{}) error { //Convert to string as Consul only supports string based keys k := key.String() @@ -89,12 +91,12 @@ func (c *ConsulStore) Create(root string, key Key, tag string, data interface{}) } // Update is used to update a DB entry -func (c *ConsulStore) Update(root string, key Key, tag string, data interface{}) error { - return c.Create(root, key, tag, data) +func (c *ConsulStore) Update(ctx context.Context, root string, key Key, tag string, data interface{}) error { + return c.Create(ctx, root, key, tag, data) } // Read method returns the internalID for a particular externalID -func (c *ConsulStore) Read(root string, key Key, tag string) ([]byte, error) { +func (c *ConsulStore) Read(ctx context.Context, root string, key Key, tag string) ([]byte, error) { //Convert to string as Consul only supports string based keys k := key.String() @@ -114,7 +116,7 @@ func (c *ConsulStore) Read(root string, key Key, tag string) ([]byte, error) { } // Delete method removes an internalID from the Database -func (c *ConsulStore) Delete(root string, key Key, tag string) error { +func (c *ConsulStore) Delete(ctx context.Context, root string, key Key, tag string) error { //Convert to string as Consul only supports string based keys k := key.String() @@ -126,7 +128,7 @@ func (c *ConsulStore) Delete(root string, key Key, tag string) error { } // ReadAll is used to get all ExternalIDs in a namespace -func (c *ConsulStore) ReadAll(root string, tag string) (map[string][]byte, error) { +func (c *ConsulStore) ReadAll(ctx context.Context, root string, tag string) (map[string][]byte, error) { pairs, _, err := c.client.List(root, nil) if err != nil { return nil, err diff --git a/src/k8splugin/internal/db/consul_test.go b/src/k8splugin/internal/db/consul_test.go index 139d4f8b..ec7078f9 100644 --- a/src/k8splugin/internal/db/consul_test.go +++ b/src/k8splugin/internal/db/consul_test.go @@ -14,6 +14,7 @@ limitations under the License. package db import ( + "context" "reflect" "strings" "testing" @@ -124,7 +125,7 @@ func TestConsulCreate(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.label, func(t *testing.T) { client, _ := NewConsulStore(testCase.mock) - err := client.Create(testCase.input["root"], testCase.key, + err := client.Create(context.TODO(), testCase.input["root"], testCase.key, testCase.input["tag"], testCase.input["value"]) if err != nil { if testCase.expectedError == "" { @@ -181,7 +182,7 @@ func TestConsulRead(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.label, func(t *testing.T) { client, _ := NewConsulStore(testCase.mock) - result, err := client.Read(testCase.input["root"], testCase.key, + result, err := client.Read(context.TODO(), testCase.input["root"], testCase.key, testCase.input["tag"]) if err != nil { if testCase.expectedError == "" { @@ -230,7 +231,7 @@ func TestConsulDelete(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.label, func(t *testing.T) { client, _ := NewConsulStore(testCase.mock) - err := client.Delete(testCase.input["root"], testCase.key, + err := client.Delete(context.TODO(), testCase.input["root"], testCase.key, testCase.input["tag"]) if err != nil { if testCase.expectedError == "" { @@ -292,7 +293,7 @@ func TestConsulReadAll(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.label, func(t *testing.T) { client, _ := NewConsulStore(testCase.mock) - result, err := client.ReadAll(testCase.input["root"], + result, err := client.ReadAll(context.TODO(), testCase.input["root"], testCase.input["tag"]) if err != nil { if testCase.expectedError == "" { diff --git a/src/k8splugin/internal/db/mongo.go b/src/k8splugin/internal/db/mongo.go index db326bbf..cf78fe00 100644 --- a/src/k8splugin/internal/db/mongo.go +++ b/src/k8splugin/internal/db/mongo.go @@ -130,13 +130,12 @@ func (m *MongoStore) validateParams(args ...interface{}) bool { } // Create is used to create a DB entry -func (m *MongoStore) Create(coll string, key Key, tag string, data interface{}) error { +func (m *MongoStore) Create(ctx context.Context, coll string, key Key, tag string, data interface{}) error { if data == nil || !m.validateParams(coll, key, tag) { return pkgerrors.New("No Data to store") } c := getCollection(coll, m) - ctx := context.Background() //Insert the data and then add the objectID to the masterTable res, err := c.InsertOne(ctx, bson.D{ @@ -169,17 +168,16 @@ func (m *MongoStore) Create(coll string, key Key, tag string, data interface{}) } // Update is used to update a DB entry -func (m *MongoStore) Update(coll string, key Key, tag string, data interface{}) error { +func (m *MongoStore) Update(ctx context.Context, coll string, key Key, tag string, data interface{}) error { if data == nil || !m.validateParams(coll, key, tag) { return pkgerrors.New("No Data to update") } c := getCollection(coll, m) - ctx := context.Background() //Get the masterkey document based on given key filter := bson.D{{"key", key}} - keydata, err := decodeBytes(c.FindOne(context.Background(), filter)) + keydata, err := decodeBytes(c.FindOne(ctx, filter)) if err != nil { return pkgerrors.Errorf("Error finding master table: %s", err.Error()) } @@ -222,17 +220,16 @@ func (m *MongoStore) Unmarshal(inp []byte, out interface{}) error { } // Read method returns the data stored for this key and for this particular tag -func (m *MongoStore) Read(coll string, key Key, tag string) ([]byte, error) { +func (m *MongoStore) Read(ctx context.Context, coll string, key Key, tag string) ([]byte, error) { if !m.validateParams(coll, key, tag) { return nil, pkgerrors.New("Mandatory fields are missing") } c := getCollection(coll, m) - ctx := context.Background() //Get the masterkey document based on given key filter := bson.D{{"key", key}} - keydata, err := decodeBytes(c.FindOne(context.Background(), filter)) + keydata, err := decodeBytes(c.FindOne(ctx, filter)) if err != nil { return nil, pkgerrors.Errorf("Error finding master table: %s", err.Error()) } @@ -261,10 +258,9 @@ func (m *MongoStore) Read(coll string, key Key, tag string) ([]byte, error) { } // Helper function that deletes an object by its ID -func (m *MongoStore) deleteObjectByID(coll string, objID primitive.ObjectID) error { +func (m *MongoStore) deleteObjectByID(ctx context.Context, coll string, objID primitive.ObjectID) error { c := getCollection(coll, m) - ctx := context.Background() _, err := c.DeleteOne(ctx, bson.D{{"_id", objID}}) if err != nil { @@ -277,13 +273,12 @@ func (m *MongoStore) deleteObjectByID(coll string, objID primitive.ObjectID) err // Delete method removes a document from the Database that matches key // TODO: delete all referenced docs if tag is empty string -func (m *MongoStore) Delete(coll string, key Key, tag string) error { +func (m *MongoStore) Delete(ctx context.Context, coll string, key Key, tag string) error { if !m.validateParams(coll, key, tag) { return pkgerrors.New("Mandatory fields are missing") } c := getCollection(coll, m) - ctx := context.Background() //Get the masterkey document based on given key filter := bson.D{{"key", key}} @@ -319,7 +314,7 @@ func (m *MongoStore) Delete(coll string, key Key, tag string) error { } //Use tag objectID to read the data from store - err = m.deleteObjectByID(coll, tagoid) + err = m.deleteObjectByID(ctx, coll, tagoid) if err != nil { return pkgerrors.Errorf("Error deleting from database: %s", err.Error()) } @@ -332,7 +327,7 @@ func (m *MongoStore) Delete(coll string, key Key, tag string) error { if !ok { return pkgerrors.Errorf("Error finding objectID for key %s", key) } - err = m.deleteObjectByID(coll, keyid) + err = m.deleteObjectByID(ctx, coll, keyid) if err != nil { return pkgerrors.Errorf("Error deleting master table from database: %s", err.Error()) } @@ -342,13 +337,12 @@ func (m *MongoStore) Delete(coll string, key Key, tag string) error { } // ReadAll is used to get all documents in db of a particular tag -func (m *MongoStore) ReadAll(coll, tag string) (map[string][]byte, error) { +func (m *MongoStore) ReadAll(ctx context.Context, coll, tag string) (map[string][]byte, error) { if !m.validateParams(coll, tag) { return nil, pkgerrors.New("Missing collection or tag name") } c := getCollection(coll, m) - ctx := context.Background() //Get all master tables in this collection filter := bson.D{ diff --git a/src/k8splugin/internal/db/mongo_test.go b/src/k8splugin/internal/db/mongo_test.go index 171c908f..27b7e85b 100644 --- a/src/k8splugin/internal/db/mongo_test.go +++ b/src/k8splugin/internal/db/mongo_test.go @@ -29,7 +29,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -//Implements the functions used currently in mongo.go +// Implements the functions used currently in mongo.go type mockCollection struct { Err error mCursor *mongo.Cursor @@ -127,7 +127,7 @@ func TestCreate(t *testing.T) { return testCase.bson, testCase.mockColl.Err } - err := m.Create(testCase.input["coll"].(string), testCase.input["key"].(Key), + err := m.Create(context.TODO(), testCase.input["coll"].(string), testCase.input["key"].(Key), testCase.input["tag"].(string), testCase.input["data"]) if err != nil { if testCase.expectedError == "" { @@ -205,7 +205,7 @@ func TestUpdate(t *testing.T) { return testCase.bson, testCase.mockColl.Err } - err := m.Update(testCase.input["coll"].(string), testCase.input["key"].(Key), + err := m.Update(context.TODO(), testCase.input["coll"].(string), testCase.input["key"].(Key), testCase.input["tag"].(string), testCase.input["data"]) if err != nil { if testCase.expectedError == "" { @@ -322,7 +322,7 @@ func TestRead(t *testing.T) { decodeBytes = func(sr *mongo.SingleResult) (bson.Raw, error) { return testCase.bson, testCase.mockColl.Err } - got, err := m.Read(testCase.input["coll"].(string), testCase.input["key"].(Key), + got, err := m.Read(context.TODO(), testCase.input["coll"].(string), testCase.input["key"].(Key), testCase.input["tag"].(string)) if err != nil { if testCase.expectedError == "" { @@ -441,7 +441,7 @@ func TestDelete(t *testing.T) { decodeBytes = func(sr *mongo.SingleResult) (bson.Raw, error) { return testCase.bson, testCase.mockColl.Err } - err := m.Delete(testCase.input["coll"].(string), testCase.input["key"].(Key), + err := m.Delete(context.TODO(), testCase.input["coll"].(string), testCase.input["key"].(Key), testCase.input["tag"].(string)) if err != nil { if testCase.expectedError == "" { @@ -578,7 +578,7 @@ func TestReadAll(t *testing.T) { return nil } - got, err := m.ReadAll(testCase.input["coll"].(string), testCase.input["tag"].(string)) + got, err := m.ReadAll(context.TODO(), testCase.input["coll"].(string), testCase.input["tag"].(string)) if err != nil { if testCase.expectedError == "" { t.Fatalf("Readall method returned an un-expected (%s)", err) diff --git a/src/k8splugin/internal/db/store.go b/src/k8splugin/internal/db/store.go index 0b869c0c..325d4890 100644 --- a/src/k8splugin/internal/db/store.go +++ b/src/k8splugin/internal/db/store.go @@ -14,6 +14,7 @@ limitations under the License. package db import ( + "context" "encoding/json" "reflect" @@ -40,20 +41,20 @@ type Store interface { // Creates a new master table with key and links data with tag and // creates a pointer to the newly added data in the master table - Create(table string, key Key, tag string, data interface{}) error + Create(ctx context.Context, table string, key Key, tag string, data interface{}) error // Reads data for a particular key with specific tag. - Read(table string, key Key, tag string) ([]byte, error) + Read(ctx context.Context, table string, key Key, tag string) ([]byte, error) // Update data for particular key with specific tag - Update(table string, key Key, tag string, data interface{}) error + Update(ctx context.Context, table string, key Key, tag string, data interface{}) error // Deletes a specific tag data for key. // TODO: If tag is empty, it will delete all tags under key. - Delete(table string, key Key, tag string) error + Delete(ctx context.Context, table string, key Key, tag string) error // Reads all master tables and data from the specified tag in table - ReadAll(table string, tag string) (map[string][]byte, error) + ReadAll(ctx context.Context, table string, tag string) (map[string][]byte, error) } // CreateDBClient creates the DB client diff --git a/src/k8splugin/internal/db/testing.go b/src/k8splugin/internal/db/testing.go index 9a427e03..4c719cdc 100644 --- a/src/k8splugin/internal/db/testing.go +++ b/src/k8splugin/internal/db/testing.go @@ -14,6 +14,7 @@ limitations under the License. package db import ( + "context" "encoding/json" pkgerrors "github.com/pkg/errors" @@ -27,9 +28,9 @@ func (m MockKey) String() string { return m.Key } -//Creating an embedded interface via anonymous variable -//This allows us to make mockDB satisfy the DatabaseConnection -//interface even if we are not implementing all the methods in it +// Creating an embedded interface via anonymous variable +// This allows us to make mockDB satisfy the DatabaseConnection +// interface even if we are not implementing all the methods in it type MockDB struct { Store Items map[string]map[string][]byte @@ -40,7 +41,7 @@ func (m *MockDB) HealthCheck() error { return m.Err } -func (m *MockDB) Create(table string, key Key, tag string, data interface{}) error { +func (m *MockDB) Create(ctx context.Context, table string, key Key, tag string, data interface{}) error { djs, err := json.Marshal(data) if err != nil { return err @@ -57,7 +58,7 @@ func (m *MockDB) Create(table string, key Key, tag string, data interface{}) err return m.Err } -func (m *MockDB) Update(table string, key Key, tag string, data interface{}) error { +func (m *MockDB) Update(ctx context.Context, table string, key Key, tag string, data interface{}) error { return m.Err } @@ -70,7 +71,7 @@ func (m *MockDB) Unmarshal(inp []byte, out interface{}) error { return nil } -func (m *MockDB) Read(table string, key Key, tag string) ([]byte, error) { +func (m *MockDB) Read(ctx context.Context, table string, key Key, tag string) ([]byte, error) { if m.Err != nil { return nil, m.Err } @@ -84,11 +85,11 @@ func (m *MockDB) Read(table string, key Key, tag string) ([]byte, error) { return nil, m.Err } -func (m *MockDB) Delete(table string, key Key, tag string) error { +func (m *MockDB) Delete(ctx context.Context, table string, key Key, tag string) error { return m.Err } -func (m *MockDB) ReadAll(table string, tag string) (map[string][]byte, error) { +func (m *MockDB) ReadAll(ctx context.Context, table string, tag string) (map[string][]byte, error) { if m.Err != nil { return nil, m.Err } diff --git a/src/k8splugin/internal/healthcheck/healthcheck.go b/src/k8splugin/internal/healthcheck/healthcheck.go index 70f5bec2..328bdcab 100644 --- a/src/k8splugin/internal/healthcheck/healthcheck.go +++ b/src/k8splugin/internal/healthcheck/healthcheck.go @@ -14,6 +14,7 @@ limitations under the License. package healthcheck import ( + "context" "encoding/json" "strings" "sync" @@ -162,7 +163,7 @@ func (ihc InstanceHCClient) Create(instanceId string) (InstanceMiniHCStatus, err retErr := "Starting hook " + h.Status.Name // Dump to DB - err = db.DBconn.Create(ihc.storeName, key, ihc.tagInst, ihcs) + err = db.DBconn.Create(context.TODO(), ihc.storeName, key, ihc.tagInst, ihcs) if err != nil { retErr = retErr + " and couldn't save to DB" } @@ -174,7 +175,7 @@ func (ihc InstanceHCClient) Create(instanceId string) (InstanceMiniHCStatus, err h.Status.KR = kr } } - err = db.DBconn.Create(ihc.storeName, key, ihc.tagInst, ihcs) + err = db.DBconn.Create(context.TODO(), ihc.storeName, key, ihc.tagInst, ihcs) if err != nil { return instanceMiniHCStatusFromStatus(ihcs), pkgerrors.Wrap(err, "Creating Instance DB Entry") @@ -221,7 +222,7 @@ func (ihc InstanceHCClient) Create(instanceId string) (InstanceMiniHCStatus, err "Reason": map[bool]string{true: "Hook finished", false: "All hooks finished"}[b], }) if b { //Some hook finished - need to update DB - err = db.DBconn.Update(ihc.storeName, key, ihc.tagInst, ihcs) + err = db.DBconn.Update(context.TODO(), ihc.storeName, key, ihc.tagInst, ihcs) if err != nil { log.Error("Couldn't update database", log.Fields{ "Store": ihc.storeName, @@ -248,7 +249,7 @@ func (ihc InstanceHCClient) Create(instanceId string) (InstanceMiniHCStatus, err } } ihcs.Status = finalResult - err = db.DBconn.Update(ihc.storeName, key, ihc.tagInst, ihcs) + err = db.DBconn.Update(context.TODO(), ihc.storeName, key, ihc.tagInst, ihcs) if err != nil { log.Error("Couldn't update database", log.Fields{ "Store": ihc.storeName, @@ -269,7 +270,7 @@ func (ihc InstanceHCClient) Get(instanceId, healthcheckId string) (InstanceHCSta InstanceId: instanceId, HealthcheckId: healthcheckId, } - DBResp, err := db.DBconn.Read(ihc.storeName, key, ihc.tagInst) + DBResp, err := db.DBconn.Read(context.TODO(), ihc.storeName, key, ihc.tagInst) if err != nil || DBResp == nil { return InstanceHCStatus{}, pkgerrors.Wrap(err, "Error retrieving Healthcheck data") } @@ -309,7 +310,7 @@ func (ihc InstanceHCClient) Delete(instanceId, healthcheckId string) error { if cumulatedErr != "" { return pkgerrors.New("Removing hooks failed with errors:\n" + cumulatedErr) } - err = db.DBconn.Delete(ihc.storeName, key, ihc.tagInst) + err = db.DBconn.Delete(context.TODO(), ihc.storeName, key, ihc.tagInst) if err != nil { return pkgerrors.Wrap(err, "Removing Healthcheck in DB") } @@ -330,7 +331,7 @@ func (ihc InstanceHCClient) List(instanceId string) (InstanceHCOverview, error) ihco.Hooks = instance.Hooks // Retrieve info about running/completed healthchecks - dbResp, err := db.DBconn.ReadAll(ihc.storeName, ihc.tagInst) + dbResp, err := db.DBconn.ReadAll(context.TODO(), ihc.storeName, ihc.tagInst) if err != nil { if !strings.Contains(err.Error(), "Did not find any objects with tag") { return ihco, pkgerrors.Wrap(err, "Getting Healthcheck data") diff --git a/src/k8splugin/internal/namegenerator/namegenerator.go b/src/k8splugin/internal/namegenerator/namegenerator.go index 8eb89546..856a60f6 100644 --- a/src/k8splugin/internal/namegenerator/namegenerator.go +++ b/src/k8splugin/internal/namegenerator/namegenerator.go @@ -17,6 +17,7 @@ package namegenerator import ( + "context" "encoding/json" "log" "strings" @@ -83,7 +84,7 @@ func (c *cache) isAlreadyUsed(name string) bool { func (c *cache) readCacheFromDB() error { // Read the latest from cache - data, err := db.DBconn.Read(storeName, cacheKeyGlobal, tag) + data, err := db.DBconn.Read(context.TODO(), storeName, cacheKeyGlobal, tag) if err != nil { log.Println("Error reading name cache from Database: ", err) return pkgerrors.Wrap(err, "Reading cache from DB") @@ -102,11 +103,11 @@ func (c *cache) readCacheFromDB() error { func (c *cache) writeCacheToDB() { //Update the database as well - err := db.DBconn.Update(storeName, cacheKeyGlobal, tag, c.cache) + err := db.DBconn.Update(context.TODO(), storeName, cacheKeyGlobal, tag, c.cache) if err != nil { // TODO: Replace with DBconn variable if strings.Contains(err.Error(), "Error finding master table") { - err = db.DBconn.Create(storeName, cacheKeyGlobal, tag, c.cache) + err = db.DBconn.Create(context.TODO(), storeName, cacheKeyGlobal, tag, c.cache) if err != nil { log.Println("Error creating the entry in DB. Will try later...") return diff --git a/src/k8splugin/internal/rb/config_template.go b/src/k8splugin/internal/rb/config_template.go index 06576e5d..225f256d 100644 --- a/src/k8splugin/internal/rb/config_template.go +++ b/src/k8splugin/internal/rb/config_template.go @@ -18,17 +18,16 @@ package rb import ( "bytes" + "context" + "encoding/base64" "encoding/json" "io/ioutil" + "log" "os" "path/filepath" "github.com/onap/multicloud-k8s/src/k8splugin/internal/db" - "encoding/base64" - - "log" - pkgerrors "github.com/pkg/errors" ) @@ -123,14 +122,14 @@ func (v *ConfigTemplateClient) CreateOrUpdate(rbName, rbVersion string, p Config if update { p.ChartName = prev.ChartName p.HasContent = prev.HasContent - err = db.DBconn.Update(v.storeName, key, v.tagMeta, p) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagMeta, p) if err != nil { return pkgerrors.Wrap(err, "Updating ConfigTemplate DB Entry") } } else { p.ChartName = rbDef.ChartName p.HasContent = false - err = db.DBconn.Create(v.storeName, key, v.tagMeta, p) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagMeta, p) if err != nil { return pkgerrors.Wrap(err, "Creating ConfigTemplate DB Entry") } @@ -146,7 +145,7 @@ func (v *ConfigTemplateClient) Get(rbName, rbVersion, templateName string) (Conf RBVersion: rbVersion, TemplateName: templateName, } - value, err := db.DBconn.Read(v.storeName, key, v.tagMeta) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagMeta) if err != nil { return ConfigTemplate{}, pkgerrors.Wrap(err, "Get ConfigTemplate") } @@ -168,7 +167,7 @@ func (v *ConfigTemplateClient) Get(rbName, rbVersion, templateName string) (Conf func (v *ConfigTemplateClient) List(rbName, rbVersion string) ([]ConfigTemplateList, error) { //Get all config templates - dbres, err := db.DBconn.ReadAll(v.storeName, v.tagMeta) + dbres, err := db.DBconn.ReadAll(context.TODO(), v.storeName, v.tagMeta) if err != nil || len(dbres) == 0 { return []ConfigTemplateList{}, pkgerrors.Wrap(err, "No Config Templates Found") } @@ -188,7 +187,7 @@ func (v *ConfigTemplateClient) List(rbName, rbVersion string) ([]ConfigTemplateL RBVersion: rbVersion, TemplateName: tmp.TemplateName, } - _, err := db.DBconn.Read(v.storeName, keyTmp, v.tagMeta) + _, err := db.DBconn.Read(context.TODO(), v.storeName, keyTmp, v.tagMeta) if err == nil && keyTmp.RBName == rbName && keyTmp.RBVersion == rbVersion { results = append(results, tmp) } @@ -209,12 +208,12 @@ func (v *ConfigTemplateClient) Delete(rbName, rbVersion, templateName string) er RBVersion: rbVersion, TemplateName: templateName, } - err := db.DBconn.Delete(v.storeName, key, v.tagMeta) + err := db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagMeta) if err != nil { return pkgerrors.Wrap(err, "Delete ConfigTemplate") } - err = db.DBconn.Delete(v.storeName, key, v.tagContent) + err = db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagContent) if err != nil { return pkgerrors.Wrap(err, "Delete ConfigTemplate Content") } @@ -266,19 +265,19 @@ func (v *ConfigTemplateClient) Upload(rbName, rbVersion, templateName string, in return pkgerrors.New("Invalid template no Chart.yaml file found") } - err = db.DBconn.Create(v.storeName, key, v.tagMeta, t) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagMeta, t) if err != nil { return pkgerrors.Wrap(err, "Creating ConfigTemplate DB Entry") } //Encode given byte stream to text for storage encodedStr := base64.StdEncoding.EncodeToString(inp) - err = db.DBconn.Create(v.storeName, key, v.tagContent, encodedStr) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagContent, encodedStr) if err != nil { return pkgerrors.Errorf("Error uploading data to db %s", err.Error()) } t.HasContent = true - err = db.DBconn.Update(v.storeName, key, v.tagMeta, t) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagMeta, t) if err != nil { return pkgerrors.Wrap(err, "Updating ConfigTemplate DB Entry") } @@ -303,7 +302,7 @@ func (v *ConfigTemplateClient) Download(rbName, rbVersion, templateName string) RBVersion: rbVersion, TemplateName: templateName, } - value, err := db.DBconn.Read(v.storeName, key, v.tagContent) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagContent) if err != nil { return nil, pkgerrors.Wrap(err, "Get Resource ConfigTemplate content") } diff --git a/src/k8splugin/internal/rb/definition.go b/src/k8splugin/internal/rb/definition.go index aa76afaa..7e8d8dbf 100644 --- a/src/k8splugin/internal/rb/definition.go +++ b/src/k8splugin/internal/rb/definition.go @@ -18,6 +18,7 @@ package rb import ( "bytes" + "context" "encoding/base64" "encoding/json" "io/ioutil" @@ -98,7 +99,7 @@ func (v *DefinitionClient) Create(def Definition) (Definition, error) { return Definition{}, pkgerrors.New("Definition already exists") } - err = db.DBconn.Create(v.storeName, key, v.tagMeta, def) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagMeta, def) if err != nil { return Definition{}, pkgerrors.Wrap(err, "Creating DB Entry") } @@ -152,7 +153,7 @@ func (v *DefinitionClient) Update(def Definition) (Definition, error) { return Definition{}, pkgerrors.New("Definition does not exists") } - err = db.DBconn.Update(v.storeName, key, v.tagMeta, def) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagMeta, def) if err != nil { return Definition{}, pkgerrors.Wrap(err, "Updating DB Entry") } @@ -162,7 +163,7 @@ func (v *DefinitionClient) Update(def Definition) (Definition, error) { // List all resource entry's versions in the database func (v *DefinitionClient) List(name string) ([]Definition, error) { - res, err := db.DBconn.ReadAll(v.storeName, v.tagMeta) + res, err := db.DBconn.ReadAll(context.TODO(), v.storeName, v.tagMeta) if err != nil || len(res) == 0 { return []Definition{}, pkgerrors.Wrap(err, "Listing Resource Bundle Definitions") } @@ -195,7 +196,7 @@ func (v *DefinitionClient) Get(name string, version string) (Definition, error) //Construct the composite key to select the entry key := DefinitionKey{RBName: name, RBVersion: version} - value, err := db.DBconn.Read(v.storeName, key, v.tagMeta) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagMeta) if err != nil { return Definition{}, pkgerrors.Wrap(err, "Get Resource Bundle definition") } @@ -218,13 +219,13 @@ func (v *DefinitionClient) Delete(name string, version string) error { //Construct the composite key to select the entry key := DefinitionKey{RBName: name, RBVersion: version} - err := db.DBconn.Delete(v.storeName, key, v.tagMeta) + err := db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagMeta) if err != nil { return pkgerrors.Wrap(err, "Delete Resource Bundle Definition") } //Delete the content when the delete operation happens - err = db.DBconn.Delete(v.storeName, key, v.tagContent) + err = db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagContent) if err != nil { return pkgerrors.Wrap(err, "Delete Resource Bundle Definition Content") } @@ -290,7 +291,7 @@ func (v *DefinitionClient) Upload(name string, version string, inp []byte) error } //TODO: Use db update api once db supports it. - err = db.DBconn.Create(v.storeName, key, v.tagMeta, def) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagMeta, def) if err != nil { return pkgerrors.Wrap(err, "Storing updated chart metadata") } @@ -298,7 +299,7 @@ func (v *DefinitionClient) Upload(name string, version string, inp []byte) error //Encode given byte stream to text for storage encodedStr := base64.StdEncoding.EncodeToString(inp) - err = db.DBconn.Create(v.storeName, key, v.tagContent, encodedStr) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagContent, encodedStr) if err != nil { return pkgerrors.Errorf("Error uploading data to db: %s", err.Error()) } @@ -320,7 +321,7 @@ func (v *DefinitionClient) Download(name string, version string) ([]byte, error) //Construct the composite key to select the entry key := DefinitionKey{RBName: name, RBVersion: version} - value, err := db.DBconn.Read(v.storeName, key, v.tagContent) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagContent) if err != nil { return nil, pkgerrors.Wrap(err, "Get Resource Bundle definition content") } diff --git a/src/k8splugin/internal/rb/profile.go b/src/k8splugin/internal/rb/profile.go index ac90a63b..2723ba43 100644 --- a/src/k8splugin/internal/rb/profile.go +++ b/src/k8splugin/internal/rb/profile.go @@ -19,6 +19,7 @@ package rb import ( "bytes" + "context" "encoding/base64" "encoding/json" "log" @@ -123,12 +124,12 @@ func (v *ProfileClient) CreateOrUpdate(p Profile, update bool) (Profile, error) } if update { - err = db.DBconn.Update(v.storeName, key, v.tagMeta, p) + err = db.DBconn.Update(context.TODO(), v.storeName, key, v.tagMeta, p) if err != nil { return Profile{}, pkgerrors.Wrap(err, "Updating Profile DB Entry") } } else { - err = db.DBconn.Create(v.storeName, key, v.tagMeta, p) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagMeta, p) if err != nil { return Profile{}, pkgerrors.Wrap(err, "Creating Profile DB Entry") } @@ -144,7 +145,7 @@ func (v *ProfileClient) Get(rbName, rbVersion, prName string) (Profile, error) { RBVersion: rbVersion, ProfileName: prName, } - value, err := db.DBconn.Read(v.storeName, key, v.tagMeta) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagMeta) if err != nil { return Profile{}, pkgerrors.Wrap(err, "Get Resource Bundle Profile") } @@ -166,7 +167,7 @@ func (v *ProfileClient) Get(rbName, rbVersion, prName string) (Profile, error) { func (v *ProfileClient) List(rbName, rbVersion string) ([]Profile, error) { //Get all profiles - dbres, err := db.DBconn.ReadAll(v.storeName, v.tagMeta) + dbres, err := db.DBconn.ReadAll(context.TODO(), v.storeName, v.tagMeta) if err != nil || len(dbres) == 0 { return []Profile{}, pkgerrors.Wrap(err, "No Profiles Found") } @@ -201,12 +202,12 @@ func (v *ProfileClient) Delete(rbName, rbVersion, prName string) error { RBVersion: rbVersion, ProfileName: prName, } - err := db.DBconn.Delete(v.storeName, key, v.tagMeta) + err := db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagMeta) if err != nil { return pkgerrors.Wrap(err, "Delete Resource Bundle Profile") } - err = db.DBconn.Delete(v.storeName, key, v.tagContent) + err = db.DBconn.Delete(context.TODO(), v.storeName, key, v.tagContent) if err != nil { return pkgerrors.Wrap(err, "Delete Resource Bundle Profile Content") } @@ -235,7 +236,7 @@ func (v *ProfileClient) Upload(rbName, rbVersion, prName string, inp []byte) err } //Encode given byte stream to text for storage encodedStr := base64.StdEncoding.EncodeToString(inp) - err = db.DBconn.Create(v.storeName, key, v.tagContent, encodedStr) + err = db.DBconn.Create(context.TODO(), v.storeName, key, v.tagContent, encodedStr) if err != nil { return pkgerrors.Errorf("Error uploading data to db %s", err.Error()) } @@ -260,7 +261,7 @@ func (v *ProfileClient) Download(rbName, rbVersion, prName string) ([]byte, erro RBVersion: rbVersion, ProfileName: prName, } - value, err := db.DBconn.Read(v.storeName, key, v.tagContent) + value, err := db.DBconn.Read(context.TODO(), v.storeName, key, v.tagContent) if err != nil { return nil, pkgerrors.Wrap(err, "Get Resource Bundle Profile content") } @@ -279,7 +280,7 @@ func (v *ProfileClient) Download(rbName, rbVersion, prName string) ([]byte, erro return nil, pkgerrors.New("Error downloading Profile content") } -//GetYamlClient GEt Yaml Files client for profile +// GetYamlClient GEt Yaml Files client for profile func (v *ProfileClient) GetYamlClient(rbName string, rbVersion string, profileName string) (ProfileYamlClient, error) { prData, err := v.Download(rbName, rbVersion, profileName) if err != nil { @@ -298,8 +299,8 @@ func (v *ProfileClient) GetYamlClient(rbName string, rbVersion string, profileNa return prYamlClient, nil } -//Resolve returns the path where the helm chart merged with -//configuration overrides resides and final ReleaseName picked for instantiation +// Resolve returns the path where the helm chart merged with +// configuration overrides resides and final ReleaseName picked for instantiation func (v *ProfileClient) Resolve(rbName string, rbVersion string, profileName string, values []string, overrideReleaseName string) ([]helm.KubernetesResourceTemplate, []helm.KubernetesResourceTemplate, []*helm.Hook, string, error) { -- 2.16.6