aboutsummaryrefslogtreecommitdiffstats
path: root/src/dcm/pkg/module/keyvalue.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/dcm/pkg/module/keyvalue.go')
-rw-r--r--src/dcm/pkg/module/keyvalue.go259
1 files changed, 129 insertions, 130 deletions
diff --git a/src/dcm/pkg/module/keyvalue.go b/src/dcm/pkg/module/keyvalue.go
index 4e3e0fab..0127a6f4 100644
--- a/src/dcm/pkg/module/keyvalue.go
+++ b/src/dcm/pkg/module/keyvalue.go
@@ -12,194 +12,193 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-*/
+ */
package module
import (
- pkgerrors "github.com/pkg/errors"
+ pkgerrors "github.com/pkg/errors"
)
// KeyValue contains the parameters needed for a key value
type KeyValue struct {
- MetaData KVMetaDataList `json:"metadata"`
- Specification KVSpec `json:"spec"`
+ MetaData KVMetaDataList `json:"metadata"`
+ Specification KVSpec `json:"spec"`
}
-
// MetaData contains the parameters needed for metadata
type KVMetaDataList struct {
- KeyValueName string `json:"name"`
- Description string `json:"description"`
- UserData1 string `json:"userData1"`
- UserData2 string `json:"userData2"`
+ KeyValueName string `json:"name"`
+ Description string `json:"description"`
+ UserData1 string `json:"userData1"`
+ UserData2 string `json:"userData2"`
}
// Spec contains the parameters needed for spec
type KVSpec struct {
- Kv []map[string]interface{} `json:"kv"`
+ Kv []map[string]interface{} `json:"kv"`
}
// KeyValueKey is the key structure that is used in the database
type KeyValueKey struct {
- Project string `json:"project"`
- LogicalCloudName string `json:"logical-cloud-name"`
- KeyValueName string `json:"kvname"`
+ Project string `json:"project"`
+ LogicalCloudName string `json:"logical-cloud-name"`
+ KeyValueName string `json:"kvname"`
}
// KeyValueManager is an interface that exposes the connection
// functionality
type KeyValueManager interface {
- CreateKVPair(project, logicalCloud string, c KeyValue) (KeyValue, error)
- GetKVPair(project, logicalCloud, name string) (KeyValue, error)
- GetAllKVPairs(project, logicalCloud string) ([]KeyValue, error)
- DeleteKVPair(project, logicalCloud, name string) error
- UpdateKVPair(project, logicalCloud, name string, c KeyValue) (KeyValue, error)
+ CreateKVPair(project, logicalCloud string, c KeyValue) (KeyValue, error)
+ GetKVPair(project, logicalCloud, name string) (KeyValue, error)
+ GetAllKVPairs(project, logicalCloud string) ([]KeyValue, error)
+ DeleteKVPair(project, logicalCloud, name string) error
+ UpdateKVPair(project, logicalCloud, name string, c KeyValue) (KeyValue, error)
}
// KeyValueClient implements the KeyValueManager
// It will also be used to maintain some localized state
type KeyValueClient struct {
- storeName string
- tagMeta string
- util Utility
+ storeName string
+ tagMeta string
+ util Utility
}
// KeyValueClient returns an instance of the KeyValueClient
// which implements the KeyValueManager
func NewKeyValueClient() *KeyValueClient {
- service := DBService{}
- return &KeyValueClient{
- storeName: "orchestrator",
- tagMeta: "keyvalue",
- util: service,
- }
+ service := DBService{}
+ return &KeyValueClient{
+ storeName: "orchestrator",
+ tagMeta: "keyvalue",
+ util: service,
+ }
}
// Create entry for the key value resource in the database
func (v *KeyValueClient) CreateKVPair(project, logicalCloud string, c KeyValue) (KeyValue, error) {
- //Construct key consisting of name
- key := KeyValueKey{
- Project: project,
- LogicalCloudName: logicalCloud,
- KeyValueName: c.MetaData.KeyValueName,
- }
-
- //Check if project exist
- err := v.util.CheckProject(project)
- if err != nil {
- return KeyValue{}, pkgerrors.New("Unable to find the project")
- }
- //check if logical cloud exists
- err = v.util.CheckLogicalCloud(project, logicalCloud)
- if err != nil {
- return KeyValue{}, pkgerrors.New("Unable to find the logical cloud")
- }
- //Check if this Key Value already exists
- _, err = v.GetKVPair(project, logicalCloud, c.MetaData.KeyValueName)
- if err == nil {
- return KeyValue{}, pkgerrors.New("Key Value already exists")
- }
-
- err = v.util.DBInsert(v.storeName, key, nil, v.tagMeta, c)
- if err != nil {
- return KeyValue{}, pkgerrors.Wrap(err, "Creating DB Entry")
- }
-
- return c, nil
+ //Construct key consisting of name
+ key := KeyValueKey{
+ Project: project,
+ LogicalCloudName: logicalCloud,
+ KeyValueName: c.MetaData.KeyValueName,
+ }
+
+ //Check if project exist
+ err := v.util.CheckProject(project)
+ if err != nil {
+ return KeyValue{}, pkgerrors.New("Unable to find the project")
+ }
+ //check if logical cloud exists
+ err = v.util.CheckLogicalCloud(project, logicalCloud)
+ if err != nil {
+ return KeyValue{}, pkgerrors.New("Unable to find the logical cloud")
+ }
+ //Check if this Key Value already exists
+ _, err = v.GetKVPair(project, logicalCloud, c.MetaData.KeyValueName)
+ if err == nil {
+ return KeyValue{}, pkgerrors.New("Key Value already exists")
+ }
+
+ err = v.util.DBInsert(v.storeName, key, nil, v.tagMeta, c)
+ if err != nil {
+ return KeyValue{}, pkgerrors.Wrap(err, "Creating DB Entry")
+ }
+
+ return c, nil
}
// Get returns Key Value for correspondin name
func (v *KeyValueClient) GetKVPair(project, logicalCloud, kvPairName string) (KeyValue, error) {
- //Construct the composite key to select the entry
- key := KeyValueKey{
- Project: project,
- LogicalCloudName: logicalCloud,
- KeyValueName: kvPairName,
- }
- value, err := v.util.DBFind(v.storeName, key, v.tagMeta)
- if err != nil {
- return KeyValue{}, pkgerrors.Wrap(err, "Get Key Value")
- }
-
- //value is a byte array
- if value != nil {
- kv := KeyValue{}
- err = v.util.DBUnmarshal(value[0], &kv)
- if err != nil {
- return KeyValue{}, pkgerrors.Wrap(err, "Unmarshaling value")
- }
- return kv, nil
- }
-
- return KeyValue{}, pkgerrors.New("Error getting Key Value")
+ //Construct the composite key to select the entry
+ key := KeyValueKey{
+ Project: project,
+ LogicalCloudName: logicalCloud,
+ KeyValueName: kvPairName,
+ }
+ value, err := v.util.DBFind(v.storeName, key, v.tagMeta)
+ if err != nil {
+ return KeyValue{}, pkgerrors.Wrap(err, "Get Key Value")
+ }
+
+ //value is a byte array
+ if value != nil {
+ kv := KeyValue{}
+ err = v.util.DBUnmarshal(value[0], &kv)
+ if err != nil {
+ return KeyValue{}, pkgerrors.Wrap(err, "Unmarshaling value")
+ }
+ return kv, nil
+ }
+
+ return KeyValue{}, pkgerrors.New("Key Value does not exist")
}
// Get All lists all key value pairs
func (v *KeyValueClient) GetAllKVPairs(project, logicalCloud string) ([]KeyValue, error) {
- //Construct the composite key to select the entry
- key := KeyValueKey{
- Project: project,
- LogicalCloudName: logicalCloud,
- KeyValueName: "",
- }
- var resp []KeyValue
- values, err := v.util.DBFind(v.storeName, key, v.tagMeta)
- if err != nil {
- return []KeyValue{}, pkgerrors.Wrap(err, "Get Key Value")
- }
-
- for _, value := range values {
- kv := KeyValue{}
- err = v.util.DBUnmarshal(value, &kv)
- if err != nil {
- return []KeyValue{}, pkgerrors.Wrap(err, "Unmarshaling value")
- }
- resp = append(resp, kv)
- }
-
- return resp, nil
+ //Construct the composite key to select the entry
+ key := KeyValueKey{
+ Project: project,
+ LogicalCloudName: logicalCloud,
+ KeyValueName: "",
+ }
+ var resp []KeyValue
+ values, err := v.util.DBFind(v.storeName, key, v.tagMeta)
+ if err != nil {
+ return []KeyValue{}, pkgerrors.Wrap(err, "Get Key Value")
+ }
+
+ for _, value := range values {
+ kv := KeyValue{}
+ err = v.util.DBUnmarshal(value, &kv)
+ if err != nil {
+ return []KeyValue{}, pkgerrors.Wrap(err, "Unmarshaling value")
+ }
+ resp = append(resp, kv)
+ }
+
+ return resp, nil
}
// Delete the Key Value entry from database
func (v *KeyValueClient) DeleteKVPair(project, logicalCloud, kvPairName string) error {
- //Construct the composite key to select the entry
- key := KeyValueKey{
- Project: project,
- LogicalCloudName: logicalCloud,
- KeyValueName: kvPairName,
- }
- err := v.util.DBRemove(v.storeName, key)
- if err != nil {
- return pkgerrors.Wrap(err, "Delete Key Value")
- }
- return nil
+ //Construct the composite key to select the entry
+ key := KeyValueKey{
+ Project: project,
+ LogicalCloudName: logicalCloud,
+ KeyValueName: kvPairName,
+ }
+ err := v.util.DBRemove(v.storeName, key)
+ if err != nil {
+ return pkgerrors.Wrap(err, "Delete Key Value")
+ }
+ return nil
}
// Update an entry for the Key Value in the database
func (v *KeyValueClient) UpdateKVPair(project, logicalCloud, kvPairName string, c KeyValue) (KeyValue, error) {
- key := KeyValueKey{
- Project: project,
- LogicalCloudName: logicalCloud,
- KeyValueName: kvPairName,
- }
- //Check if KV pair URl name is the same name in json
- if c.MetaData.KeyValueName != kvPairName {
- return KeyValue{}, pkgerrors.New("Update Error - KV pair name mismatch")
- }
- //Check if this Key Value exists
- _, err := v.GetKVPair(project, logicalCloud, kvPairName)
- if err != nil {
- return KeyValue{}, pkgerrors.New("Update Error - Key Value Pair doesn't exist")
- }
- err = v.util.DBInsert(v.storeName, key, nil, v.tagMeta, c)
- if err != nil {
- return KeyValue{}, pkgerrors.Wrap(err, "Updating DB Entry")
- }
- return c, nil
+ key := KeyValueKey{
+ Project: project,
+ LogicalCloudName: logicalCloud,
+ KeyValueName: kvPairName,
+ }
+ //Check if KV pair URl name is the same name in json
+ if c.MetaData.KeyValueName != kvPairName {
+ return KeyValue{}, pkgerrors.New("Update Error - KV pair name mismatch")
+ }
+ //Check if this Key Value exists
+ _, err := v.GetKVPair(project, logicalCloud, kvPairName)
+ if err != nil {
+ return KeyValue{}, pkgerrors.New("KV Pair does not exist")
+ }
+ err = v.util.DBInsert(v.storeName, key, nil, v.tagMeta, c)
+ if err != nil {
+ return KeyValue{}, pkgerrors.Wrap(err, "Updating DB Entry")
+ }
+ return c, nil
}