summaryrefslogtreecommitdiffstats
path: root/src/k8splugin/vnfd/vnfd.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/k8splugin/vnfd/vnfd.go')
-rw-r--r--src/k8splugin/vnfd/vnfd.go134
1 files changed, 134 insertions, 0 deletions
diff --git a/src/k8splugin/vnfd/vnfd.go b/src/k8splugin/vnfd/vnfd.go
new file mode 100644
index 00000000..322b2d78
--- /dev/null
+++ b/src/k8splugin/vnfd/vnfd.go
@@ -0,0 +1,134 @@
+/*
+ * 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 vnfd
+
+import (
+ "k8splugin/db"
+ "log"
+
+ uuid "github.com/hashicorp/go-uuid"
+ pkgerrors "github.com/pkg/errors"
+)
+
+// VNFDefinition contains the parameters needed for VNF Definitions
+// It implements the interface for managing the definitions
+type VNFDefinition struct {
+ Name string `json:"name"`
+ Description string `json:"description"`
+ UUID string `json:"uuid,omitempty"`
+ ServiceType string `json:"service-type"`
+}
+
+// VNFDefinitionInterface is an interface exposes the VNFDefinition functionality
+type VNFDefinitionInterface interface {
+ Create(vnfd VNFDefinition) (VNFDefinition, error)
+ List() ([]VNFDefinition, error)
+ Get(vnfID string) (VNFDefinition, error)
+ Delete(vnfID string) error
+}
+
+// VNFDefinitionClient implements the VNFDefinitionInterface
+// It will also be used to maintain some localized state
+type VNFDefinitionClient struct {
+ keyPrefix string
+}
+
+// GetVNFDClient Returns an instance of the VNFDefinitionClient
+// which implements the VNFDefinitionInterface interface
+func GetVNFDClient() *VNFDefinitionClient {
+ return &VNFDefinitionClient{
+ keyPrefix: "vnfd/"}
+}
+
+// Create creates an entry for the VNF in the database
+func (v *VNFDefinitionClient) Create(vnfd VNFDefinition) (VNFDefinition, error) {
+ // If UUID is empty, we will generate one
+ if vnfd.UUID == "" {
+ vnfd.UUID, _ = uuid.GenerateUUID()
+ }
+ key := v.keyPrefix + vnfd.UUID
+
+ serData, err := db.Serialize(v)
+ if err != nil {
+ return VNFDefinition{}, pkgerrors.Wrap(err, "Serialize VNF Definition")
+ }
+
+ err = db.DBconn.CreateEntry(key, serData)
+ if err != nil {
+ return VNFDefinition{}, pkgerrors.Wrap(err, "Creating DB Entry")
+ }
+
+ return vnfd, nil
+}
+
+// List lists all vnf entries in the database
+func (v *VNFDefinitionClient) List() ([]VNFDefinition, error) {
+ strArray, err := db.DBconn.ReadAll(v.keyPrefix)
+ if err != nil {
+ return []VNFDefinition{}, pkgerrors.Wrap(err, "Listing VNF Definitions")
+ }
+
+ var retData []VNFDefinition
+
+ for _, key := range strArray {
+ value, ok, err := db.DBconn.ReadEntry(key)
+ if err != nil {
+ log.Printf("Error Reading Key: %s", key)
+ continue
+ }
+ if ok {
+ vnfd := VNFDefinition{}
+ err = db.DeSerialize(value, &vnfd)
+ if err != nil {
+ log.Printf("Error Deserializing Value: %s", value)
+ continue
+ }
+ retData = append(retData, vnfd)
+ }
+ }
+
+ return retData, nil
+}
+
+// Get returns the VNF Definition for corresponding ID
+func (v *VNFDefinitionClient) Get(vnfID string) (VNFDefinition, error) {
+ value, ok, err := db.DBconn.ReadEntry(v.keyPrefix + vnfID)
+ if err != nil {
+ return VNFDefinition{}, pkgerrors.Wrap(err, "Get VNF Definitions")
+ }
+
+ if ok {
+ vnfd := VNFDefinition{}
+ err = db.DeSerialize(value, &vnfd)
+ if err != nil {
+ return VNFDefinition{}, pkgerrors.Wrap(err, "Deserializing Value")
+ }
+ return vnfd, nil
+ }
+
+ return VNFDefinition{}, pkgerrors.New("Error getting VNF Definition")
+}
+
+// Delete deletes the VNF Definition from database
+func (v *VNFDefinitionClient) Delete(vnfID string) error {
+ err := db.DBconn.DeleteEntry(v.keyPrefix + vnfID)
+ if err != nil {
+ return pkgerrors.Wrap(err, "Delete VNF Definitions")
+ }
+
+ return nil
+}