aboutsummaryrefslogtreecommitdiffstats
path: root/src/k8splugin/csar
diff options
context:
space:
mode:
authorVictor Morales <victor.morales@intel.com>2019-01-24 17:46:43 -0800
committerVictor Morales <victor.morales@intel.com>2019-01-25 16:52:38 -0800
commit083465d10c8fdeaffa89aa7daa93def3eca77df1 (patch)
tree23135a724a1628e986f9c6748b82f275763cdf10 /src/k8splugin/csar
parent5c4e91705457dc4bdb5526e6f5210fa879ab659d (diff)
Use a standard Go project layout
This project wasn't following some Standard Go Project Layout guidelines(https://github.com/golang-standards/project-layout). This change pretends to organize the source code and following those guidelines. Change-Id: I61085ac20f28069cede013f83034bed06892d87c Signed-off-by: Victor Morales <victor.morales@intel.com> Issue-ID: MULTICLOUD-301
Diffstat (limited to 'src/k8splugin/csar')
-rw-r--r--src/k8splugin/csar/parser.go196
-rw-r--r--src/k8splugin/csar/parser_test.go133
2 files changed, 0 insertions, 329 deletions
diff --git a/src/k8splugin/csar/parser.go b/src/k8splugin/csar/parser.go
deleted file mode 100644
index c0dd6a79..00000000
--- a/src/k8splugin/csar/parser.go
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-Copyright 2018 Intel Corporation.
-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 csar
-
-import (
- "encoding/hex"
- "io/ioutil"
- "log"
- "math/rand"
- "os"
-
- "k8s.io/client-go/kubernetes"
-
- pkgerrors "github.com/pkg/errors"
- yaml "gopkg.in/yaml.v2"
-
- "k8splugin/krd"
-)
-
-func generateExternalVNFID() string {
- b := make([]byte, 2)
- rand.Read(b)
- return hex.EncodeToString(b)
-}
-
-func ensuresNamespace(namespace string, kubeclient kubernetes.Interface) error {
- namespacePlugin, ok := krd.LoadedPlugins["namespace"]
- if !ok {
- return pkgerrors.New("No plugin for namespace resource found")
- }
-
- symGetNamespaceFunc, err := namespacePlugin.Lookup("Get")
- if err != nil {
- return pkgerrors.Wrap(err, "Error fetching get namespace function")
- }
-
- ns, err := symGetNamespaceFunc.(func(string, string, kubernetes.Interface) (string, error))(
- namespace, namespace, kubeclient)
- if err != nil {
- return pkgerrors.Wrap(err, "An error ocurred during the get namespace execution")
- }
-
- if ns == "" {
- log.Println("Creating " + namespace + " namespace")
- symGetNamespaceFunc, err := namespacePlugin.Lookup("Create")
- if err != nil {
- return pkgerrors.Wrap(err, "Error fetching create namespace plugin")
- }
- namespaceResource := &krd.ResourceData{
- Namespace: namespace,
- }
-
- _, err = symGetNamespaceFunc.(func(*krd.ResourceData, kubernetes.Interface) (string, error))(
- namespaceResource, kubeclient)
- if err != nil {
- return pkgerrors.Wrap(err, "Error creating "+namespace+" namespace")
- }
- }
- return nil
-}
-
-// CreateVNF reads the CSAR files from the files system and creates them one by one
-var CreateVNF = func(csarID string, cloudRegionID string, namespace string, kubeclient *kubernetes.Clientset) (string, map[string][]string, error) {
- if err := ensuresNamespace(namespace, kubeclient); err != nil {
- return "", nil, pkgerrors.Wrap(err, "Error while ensuring namespace: "+namespace)
- }
- externalVNFID := generateExternalVNFID()
- internalVNFID := cloudRegionID + "-" + namespace + "-" + externalVNFID
-
- csarDirPath := os.Getenv("CSAR_DIR") + "/" + csarID
- metadataYAMLPath := csarDirPath + "/metadata.yaml"
-
- log.Println("Reading " + metadataYAMLPath + " file")
- metadataFile, err := ReadMetadataFile(metadataYAMLPath)
- if err != nil {
- return "", nil, pkgerrors.Wrap(err, "Error while reading Metadata File: "+metadataYAMLPath)
- }
-
- var path string
- resourceYAMLNameMap := make(map[string][]string)
- // Iterates over the resources defined in the metadata file to create kubernetes resources
- log.Println(string(len(metadataFile.ResourceTypePathMap)) + " resource(s) type(s) to be processed")
- for resource, fileNames := range metadataFile.ResourceTypePathMap {
- log.Println("Processing items of " + string(resource) + " resource")
- var resourcesCreated []string
- for _, filename := range fileNames {
- path = csarDirPath + "/" + filename
-
- if _, err := os.Stat(path); os.IsNotExist(err) {
- return "", nil, pkgerrors.New("File " + path + "does not exists")
- }
- log.Println("Processing file: " + path)
-
- genericKubeData := &krd.ResourceData{
- YamlFilePath: path,
- Namespace: namespace,
- VnfId: internalVNFID,
- }
-
- typePlugin, ok := krd.LoadedPlugins[resource]
- if !ok {
- return "", nil, pkgerrors.New("No plugin for resource " + resource + " found")
- }
-
- symCreateResourceFunc, err := typePlugin.Lookup("Create")
- if err != nil {
- return "", nil, pkgerrors.Wrap(err, "Error fetching "+resource+" plugin")
- }
-
- internalResourceName, err := symCreateResourceFunc.(func(*krd.ResourceData, kubernetes.Interface) (string, error))(
- genericKubeData, kubeclient)
- if err != nil {
- return "", nil, pkgerrors.Wrap(err, "Error in plugin "+resource+" plugin")
- }
- log.Print(internalResourceName + " succesful resource created")
- resourcesCreated = append(resourcesCreated, internalResourceName)
- }
- resourceYAMLNameMap[resource] = resourcesCreated
- }
-
- return externalVNFID, resourceYAMLNameMap, nil
-}
-
-// DestroyVNF deletes VNFs based on data passed
-var DestroyVNF = func(data map[string][]string, namespace string, kubeclient *kubernetes.Clientset) error {
- /* data:
- {
- "deployment": ["cloud1-default-uuid-sisedeploy1", "cloud1-default-uuid-sisedeploy2", ... ]
- "service": ["cloud1-default-uuid-sisesvc1", "cloud1-default-uuid-sisesvc2", ... ]
- },
- */
-
- for resourceName, resourceList := range data {
- typePlugin, ok := krd.LoadedPlugins[resourceName]
- if !ok {
- return pkgerrors.New("No plugin for resource " + resourceName + " found")
- }
-
- symDeleteResourceFunc, err := typePlugin.Lookup("Delete")
- if err != nil {
- return pkgerrors.Wrap(err, "Error fetching "+resourceName+" plugin")
- }
-
- for _, resourceName := range resourceList {
-
- log.Println("Deleting resource: " + resourceName)
-
- err = symDeleteResourceFunc.(func(string, string, kubernetes.Interface) error)(
- resourceName, namespace, kubeclient)
- if err != nil {
- return pkgerrors.Wrap(err, "Error destroying "+resourceName)
- }
- }
- }
-
- return nil
-}
-
-// MetadataFile stores the metadata of execution
-type MetadataFile struct {
- ResourceTypePathMap map[string][]string `yaml:"resources"`
-}
-
-// ReadMetadataFile reads the metadata yaml to return the order or reads
-var ReadMetadataFile = func(path string) (MetadataFile, error) {
- var metadataFile MetadataFile
-
- if _, err := os.Stat(path); os.IsNotExist(err) {
- return metadataFile, pkgerrors.Wrap(err, "Metadata YAML file does not exist")
- }
-
- log.Println("Reading metadata YAML: " + path)
- yamlFile, err := ioutil.ReadFile(path)
- if err != nil {
- return metadataFile, pkgerrors.Wrap(err, "Metadata YAML file read error")
- }
-
- err = yaml.Unmarshal(yamlFile, &metadataFile)
- if err != nil {
- return metadataFile, pkgerrors.Wrap(err, "Metadata YAML file unmarshal error")
- }
- log.Printf("metadata:\n%v", metadataFile)
-
- return metadataFile, nil
-}
diff --git a/src/k8splugin/csar/parser_test.go b/src/k8splugin/csar/parser_test.go
deleted file mode 100644
index 93473bc6..00000000
--- a/src/k8splugin/csar/parser_test.go
+++ /dev/null
@@ -1,133 +0,0 @@
-// +build integration
-
-/*
-Copyright 2018 Intel Corporation.
-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 csar
-
-import (
- "io/ioutil"
- "log"
- "os"
- "plugin"
- "testing"
-
- "k8s.io/client-go/kubernetes"
-
- pkgerrors "github.com/pkg/errors"
- "gopkg.in/yaml.v2"
-
- "k8splugin/krd"
-)
-
-func LoadMockPlugins(krdLoadedPlugins *map[string]*plugin.Plugin) error {
- if _, err := os.Stat("../mock_files/mock_plugins/mockplugin.so"); os.IsNotExist(err) {
- return pkgerrors.New("mockplugin.so does not exist. Please compile mockplugin.go to generate")
- }
-
- mockPlugin, err := plugin.Open("../mock_files/mock_plugins/mockplugin.so")
- if err != nil {
- return pkgerrors.Cause(err)
- }
-
- (*krdLoadedPlugins)["namespace"] = mockPlugin
- (*krdLoadedPlugins)["deployment"] = mockPlugin
- (*krdLoadedPlugins)["service"] = mockPlugin
-
- return nil
-}
-
-func TestCreateVNF(t *testing.T) {
- oldkrdPluginData := krd.LoadedPlugins
- oldReadMetadataFile := ReadMetadataFile
-
- defer func() {
- krd.LoadedPlugins = oldkrdPluginData
- ReadMetadataFile = oldReadMetadataFile
- }()
-
- err := LoadMockPlugins(&krd.LoadedPlugins)
- if err != nil {
- t.Fatalf("TestCreateVNF returned an error (%s)", err)
- }
-
- ReadMetadataFile = func(yamlFilePath string) (MetadataFile, error) {
- var seqFile MetadataFile
-
- if _, err := os.Stat(yamlFilePath); err == nil {
- rawBytes, err := ioutil.ReadFile("../mock_files/mock_yamls/metadata.yaml")
- if err != nil {
- return seqFile, pkgerrors.Wrap(err, "Metadata YAML file read error")
- }
-
- err = yaml.Unmarshal(rawBytes, &seqFile)
- if err != nil {
- return seqFile, pkgerrors.Wrap(err, "Metadata YAML file unmarshall error")
- }
- }
-
- return seqFile, nil
- }
-
- kubeclient := kubernetes.Clientset{}
-
- t.Run("Successfully create VNF", func(t *testing.T) {
- externaluuid, data, err := CreateVNF("uuid", "cloudregion1", "test", &kubeclient)
- if err != nil {
- t.Fatalf("TestCreateVNF returned an error (%s)", err)
- }
-
- log.Println(externaluuid)
-
- if data == nil {
- t.Fatalf("TestCreateVNF returned empty data (%s)", data)
- }
- })
-
-}
-
-func TestDeleteVNF(t *testing.T) {
- oldkrdPluginData := krd.LoadedPlugins
-
- defer func() {
- krd.LoadedPlugins = oldkrdPluginData
- }()
-
- err := LoadMockPlugins(&krd.LoadedPlugins)
- if err != nil {
- t.Fatalf("TestCreateVNF returned an error (%s)", err)
- }
-
- kubeclient := kubernetes.Clientset{}
-
- t.Run("Successfully delete VNF", func(t *testing.T) {
- data := map[string][]string{
- "deployment": []string{"cloud1-default-uuid-sisedeploy"},
- "service": []string{"cloud1-default-uuid-sisesvc"},
- }
-
- err := DestroyVNF(data, "test", &kubeclient)
- if err != nil {
- t.Fatalf("TestCreateVNF returned an error (%s)", err)
- }
- })
-}
-
-func TestReadMetadataFile(t *testing.T) {
- t.Run("Successfully read Metadata YAML file", func(t *testing.T) {
- _, err := ReadMetadataFile("../mock_files//mock_yamls/metadata.yaml")
- if err != nil {
- t.Fatalf("TestReadMetadataFile returned an error (%s)", err)
- }
- })
-}