diff options
author | Kiran Kamineni <kiran.k.kamineni@intel.com> | 2018-11-15 17:09:54 -0800 |
---|---|---|
committer | Victor Morales <victor.morales@intel.com> | 2018-11-19 14:41:49 -0800 |
commit | 3f780f7973081903f1ab6ea01a855fb6c5512a48 (patch) | |
tree | 93c596d4b438df56fc9894162b1f5a2292ea0068 /src/k8splugin/rb/definition.go | |
parent | 1b76b8fada122365b9adf99cc305721cc114d30a (diff) |
Reconcile names in code and Jira items
k8splugin manages deployment of resource bundles
and these are not restricted to vnfs.
This names' change is to reflect that functionality.
P2: using rb instead of resource bundle
Issue-ID: MULTICLOUD-410
Change-Id: I09e0b92a8fc13562e1c6bb17dc8bc13de97264d7
Signed-off-by: Kiran Kamineni <kiran.k.kamineni@intel.com>
Diffstat (limited to 'src/k8splugin/rb/definition.go')
-rw-r--r-- | src/k8splugin/rb/definition.go | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/src/k8splugin/rb/definition.go b/src/k8splugin/rb/definition.go new file mode 100644 index 00000000..03fffdda --- /dev/null +++ b/src/k8splugin/rb/definition.go @@ -0,0 +1,135 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * 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 rb + +import ( + "k8splugin/db" + "log" + + uuid "github.com/hashicorp/go-uuid" + pkgerrors "github.com/pkg/errors" +) + +// Definition contains the parameters needed for resource bundle (rb) definitions +// It implements the interface for managing the definitions +type Definition struct { + Name string `json:"name"` + Description string `json:"description"` + UUID string `json:"uuid,omitempty"` + ServiceType string `json:"service-type"` +} + +// DefinitionManager is an interface exposes the resource bundle definition functionality +type DefinitionManager interface { + Create(def Definition) (Definition, error) + List() ([]Definition, error) + Get(resID string) (Definition, error) + Delete(resID string) error +} + +// DefinitionClient implements the DefinitionManager +// It will also be used to maintain some localized state +type DefinitionClient struct { + keyPrefix string +} + +// NewDefinitionClient returns an instance of the DefinitionClient +// which implements the DefinitionManager +// Uses rb/def prefix +func NewDefinitionClient() *DefinitionClient { + return &DefinitionClient{ + keyPrefix: "rb/def/"} +} + +// Create an entry for the resource in the database +func (v *DefinitionClient) Create(def Definition) (Definition, error) { + // If UUID is empty, we will generate one + if def.UUID == "" { + def.UUID, _ = uuid.GenerateUUID() + } + key := v.keyPrefix + def.UUID + + serData, err := db.Serialize(v) + if err != nil { + return Definition{}, pkgerrors.Wrap(err, "Serialize Resource Bundle Definition") + } + + err = db.DBconn.Create(key, serData) + if err != nil { + return Definition{}, pkgerrors.Wrap(err, "Creating DB Entry") + } + + return def, nil +} + +// List all resource entries in the database +func (v *DefinitionClient) List() ([]Definition, error) { + strArray, err := db.DBconn.ReadAll(v.keyPrefix) + if err != nil { + return []Definition{}, pkgerrors.Wrap(err, "Listing Resource Bundle Definitions") + } + + var retData []Definition + + for _, key := range strArray { + value, err := db.DBconn.Read(key) + if err != nil { + log.Printf("Error Reading Key: %s", key) + continue + } + if value != "" { + def := Definition{} + err = db.DeSerialize(value, &def) + if err != nil { + log.Printf("Error Deserializing Value: %s", value) + continue + } + retData = append(retData, def) + } + } + + return retData, nil +} + +// Get returns the Resource Bundle Definition for corresponding ID +func (v *DefinitionClient) Get(id string) (Definition, error) { + value, err := db.DBconn.Read(v.keyPrefix + id) + if err != nil { + return Definition{}, pkgerrors.Wrap(err, "Get Resource Bundle definition") + } + + if value != "" { + def := Definition{} + err = db.DeSerialize(value, &def) + if err != nil { + return Definition{}, pkgerrors.Wrap(err, "Deserializing Value") + } + return def, nil + } + + return Definition{}, pkgerrors.New("Error getting Resource Bundle Definition") +} + +// Delete the Resource Bundle definition from database +func (v *DefinitionClient) Delete(id string) error { + err := db.DBconn.Delete(v.keyPrefix + id) + if err != nil { + return pkgerrors.Wrap(err, "Delete Resource Bundle Definitions") + } + + return nil +} |