diff options
author | Victor Morales <victor.morales@intel.com> | 2018-09-18 17:19:00 -0700 |
---|---|---|
committer | Victor Morales <victor.morales@intel.com> | 2018-09-18 17:19:00 -0700 |
commit | 05274b1b149139d91445ca10a73defe41f14824a (patch) | |
tree | 2ad5e9169a521d29d0c909a271f1ff23b35d2dac /src/k8splugin/plugins/deployment/plugin.go | |
parent | b368dfe25337494060eb8cd85a5becaf7a465643 (diff) |
Add UTs to plugins
Deployment, service and namespace are plugins which offers CRUD
operations to manage their resources. They haven't implemented
Unit Tests which makes fragile to change/refactor the source code.
This change adds their corresponding Unit Tests and defines a
standard interface.
Change-Id: I1e1eb40f1a18ba33c74069a117462c8df17767ac
Signed-off-by: Victor Morales <victor.morales@intel.com>
Issue-ID: MULTICLOUD-301
Diffstat (limited to 'src/k8splugin/plugins/deployment/plugin.go')
-rw-r--r-- | src/k8splugin/plugins/deployment/plugin.go | 75 |
1 files changed, 28 insertions, 47 deletions
diff --git a/src/k8splugin/plugins/deployment/plugin.go b/src/k8splugin/plugins/deployment/plugin.go index 2b4c7cb7..97330b5b 100644 --- a/src/k8splugin/plugins/deployment/plugin.go +++ b/src/k8splugin/plugins/deployment/plugin.go @@ -14,55 +14,36 @@ limitations under the License. package main import ( - "io/ioutil" "log" - "os" - - "k8s.io/client-go/kubernetes" pkgerrors "github.com/pkg/errors" appsV1 "k8s.io/api/apps/v1" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/kubernetes" "k8splugin/krd" ) -// CreateResource object in a specific Kubernetes Deployment -func CreateResource(kubedata *krd.GenericKubeResourceData, kubeclient *kubernetes.Clientset) (string, error) { - if kubedata.Namespace == "" { - kubedata.Namespace = "default" - } - - if _, err := os.Stat(kubedata.YamlFilePath); err != nil { - return "", pkgerrors.New("File " + kubedata.YamlFilePath + " not found") - } - - log.Println("Reading deployment YAML") - rawBytes, err := ioutil.ReadFile(kubedata.YamlFilePath) - if err != nil { - return "", pkgerrors.Wrap(err, "Deployment YAML file read error") +// Create deployment object in a specific Kubernetes cluster +func Create(data *krd.ResourceData, client kubernetes.Interface) (string, error) { + namespace := data.Namespace + if namespace == "" { + namespace = "default" } - - log.Println("Decoding deployment YAML") - decode := scheme.Codecs.UniversalDeserializer().Decode - obj, _, err := decode(rawBytes, nil, nil) + obj, err := krd.DecodeYAML(data.YamlFilePath) if err != nil { - return "", pkgerrors.Wrap(err, "Deserialize deployment error") + return "", pkgerrors.Wrap(err, "Decode deployment object error") } - switch o := obj.(type) { - case *appsV1.Deployment: - kubedata.DeploymentData = o - default: - return "", pkgerrors.New(kubedata.YamlFilePath + " contains another resource different than Deployment") + deployment, ok := obj.(*appsV1.Deployment) + if !ok { + return "", pkgerrors.New("Decoded object contains another resource different than Deployment") } + deployment.Namespace = namespace + deployment.Name = data.VnfId + "-" + deployment.Name - kubedata.DeploymentData.Namespace = kubedata.Namespace - kubedata.DeploymentData.Name = kubedata.InternalVNFID + "-" + kubedata.DeploymentData.Name - - result, err := kubeclient.AppsV1().Deployments(kubedata.Namespace).Create(kubedata.DeploymentData) + result, err := client.AppsV1().Deployments(namespace).Create(deployment) if err != nil { return "", pkgerrors.Wrap(err, "Create Deployment error") } @@ -70,14 +51,14 @@ func CreateResource(kubedata *krd.GenericKubeResourceData, kubeclient *kubernete return result.GetObjectMeta().GetName(), nil } -// ListResources of existing deployments hosted in a specific Kubernetes Deployment -func ListResources(limit int64, namespace string, kubeclient *kubernetes.Clientset) (*[]string, error) { +// List of existing deployments hosted in a specific Kubernetes cluster +func List(namespace string, kubeclient kubernetes.Interface) ([]string, error) { if namespace == "" { namespace = "default" } opts := metaV1.ListOptions{ - Limit: limit, + Limit: krd.ResourcesListLimit, } opts.APIVersion = "apps/v1" opts.Kind = "Deployment" @@ -87,38 +68,38 @@ func ListResources(limit int64, namespace string, kubeclient *kubernetes.Clients return nil, pkgerrors.Wrap(err, "Get Deployment list error") } - result := make([]string, 0, limit) + result := make([]string, 0, krd.ResourcesListLimit) if list != nil { for _, deployment := range list.Items { + log.Printf("%v", deployment.Name) result = append(result, deployment.Name) } } - return &result, nil + return result, nil } -// DeleteResource existing deployments hosting in a specific Kubernetes Deployment -func DeleteResource(name string, namespace string, kubeclient *kubernetes.Clientset) error { +// Delete an existing deployment hosted in a specific Kubernetes cluster +func Delete(name string, namespace string, kubeclient kubernetes.Interface) error { if namespace == "" { namespace = "default" } - log.Println("Deleting deployment: " + name) - deletePolicy := metaV1.DeletePropagationForeground - err := kubeclient.AppsV1().Deployments(namespace).Delete(name, &metaV1.DeleteOptions{ + opts := &metaV1.DeleteOptions{ PropagationPolicy: &deletePolicy, - }) + } - if err != nil { + log.Println("Deleting deployment: " + name) + if err := kubeclient.AppsV1().Deployments(namespace).Delete(name, opts); err != nil { return pkgerrors.Wrap(err, "Delete Deployment error") } return nil } -// GetResource existing deployment hosting in a specific Kubernetes Deployment -func GetResource(name string, namespace string, kubeclient *kubernetes.Clientset) (string, error) { +// Get an existing deployment hosted in a specific Kubernetes cluster +func Get(name string, namespace string, kubeclient kubernetes.Interface) (string, error) { if namespace == "" { namespace = "default" } |