From 244499667d0552cd015804c4c875a9d67f4cb3b9 Mon Sep 17 00:00:00 2001 From: Suraj Deshmukh Date: Wed, 19 Oct 2016 22:03:42 +0530 Subject: [PATCH] kompose up/down create and delete pvc pvc will be parsed when passing objects via kube client to create various objects. Also while deleting pvc will be deleted. Fixes #218 --- pkg/transformer/kubernetes/kubernetes.go | 84 +++++++++++++++--------- pkg/transformer/openshift/openshift.go | 10 ++- 2 files changed, 61 insertions(+), 33 deletions(-) diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index bb66ef97f..549a14854 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -19,11 +19,12 @@ package kubernetes import ( "fmt" "strconv" + "time" "github.com/Sirupsen/logrus" - deployapi "github.com/openshift/origin/pkg/deploy/api" "github.com/kubernetes-incubator/kompose/pkg/kobject" "github.com/kubernetes-incubator/kompose/pkg/transformer" + deployapi "github.com/openshift/origin/pkg/deploy/api" // install kubernetes api "k8s.io/kubernetes/pkg/api" @@ -33,19 +34,21 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" _ "k8s.io/kubernetes/pkg/apis/extensions/install" client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/intstr" //"k8s.io/kubernetes/pkg/controller/daemon" - "time" - - "k8s.io/kubernetes/pkg/kubectl" ) type Kubernetes struct { } +// timeout is how long we'll wait for the termination of kubernetes resource to be successful +// used when undeploying resources from kubernetes +const TIMEOUT = 300 + // Init RC object func InitRC(name string, service kobject.ServiceConfig, replicas int) *api.ReplicationController { rc := &api.ReplicationController{ @@ -338,7 +341,7 @@ func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.Con //Convert komposeObject objects := k.Transform(komposeObject, opt) - fmt.Println("We are going to create Kubernetes deployments and services for your Dockerized application. \n" + + fmt.Println("We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application. \n" + "If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead. \n") factory := cmdutil.NewFactory(nil) @@ -366,14 +369,22 @@ func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.Con return err } logrus.Infof("Successfully created service: %s", t.Name) + case *api.PersistentVolumeClaim: + _, err := client.PersistentVolumeClaims(namespace).Create(t) + if err != nil { + return err + } + logrus.Infof("Successfully created persistentVolumeClaim: %s", t.Name) } } - fmt.Println("\nYour application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc,pods' for details.") + fmt.Println("\nYour application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc,pods,pvc' for details.") return nil } func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error { + //Convert komposeObject + objects := k.Transform(komposeObject, opt) factory := cmdutil.NewFactory(nil) clientConfig, err := factory.ClientConfig() @@ -386,33 +397,44 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C } client := client.NewOrDie(clientConfig) - // delete objects from kubernetes - for name := range komposeObject.ServiceConfigs { - //delete svc - rpService, err := kubectl.ReaperFor(api.Kind("Service"), client) - if err != nil { - return err - } - //FIXME: timeout = 300s, gracePeriod is nil - err = rpService.Stop(namespace, name, 300*time.Second, nil) - if err != nil { - return err - } else { - logrus.Infof("Successfully deleted service: %s", name) + for _, v := range objects { + switch t := v.(type) { + case *extensions.Deployment: + //delete deployment + rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client) + if err != nil { + return err + } + //FIXME: gracePeriod is nil + err = rpDeployment.Stop(namespace, t.Name, TIMEOUT*time.Second, nil) + if err != nil { + return err + } else { + logrus.Infof("Successfully deleted deployment: %s", t.Name) + } + case *api.Service: + //delete svc + rpService, err := kubectl.ReaperFor(api.Kind("Service"), client) + if err != nil { + return err + } + //FIXME: gracePeriod is nil + err = rpService.Stop(namespace, t.Name, TIMEOUT*time.Second, nil) + if err != nil { + return err + } else { + logrus.Infof("Successfully deleted service: %s", t.Name) + } + case *api.PersistentVolumeClaim: + // delete pvc + err = client.PersistentVolumeClaims(namespace).Delete(t.Name) + if err != nil { + return err + } else { + logrus.Infof("Successfully deleted PersistentVolumeClaim: %s", t.Name) + } } - //delete deployment - rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client) - if err != nil { - return err - } - //FIXME: timeout = 300s, gracePeriod is nil - err = rpDeployment.Stop(namespace, name, 300*time.Second, nil) - if err != nil { - return err - } else { - logrus.Infof("Successfully deleted deployment: %s", name) - } } return nil } diff --git a/pkg/transformer/openshift/openshift.go b/pkg/transformer/openshift/openshift.go index e921e2c03..f8cdd1283 100644 --- a/pkg/transformer/openshift/openshift.go +++ b/pkg/transformer/openshift/openshift.go @@ -169,7 +169,7 @@ func (k *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.Conv //Convert komposeObject objects := k.Transform(komposeObject, opt) - fmt.Println("We are going to create OpenShift DeploymentConfigs and Services for your Dockerized application. \n" + + fmt.Println("We are going to create OpenShift DeploymentConfigs, Services and PersistentVolumeClaims for your Dockerized application. \n" + "If you need different kind of resources, use the 'kompose convert' and 'oc create -f' commands instead. \n") // initialize OpenShift Client @@ -215,9 +215,15 @@ func (k *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.Conv return err } logrus.Infof("Successfully created service: %s", t.Name) + case *api.PersistentVolumeClaim: + _, err := kclient.PersistentVolumeClaims(namespace).Create(t) + if err != nil { + return err + } + logrus.Infof("Successfully created persistentVolumeClaim: %s", t.Name) } } - fmt.Println("\nYour application has been deployed to OpenShift. You can run 'oc get dc,svc,is' for details.") + fmt.Println("\nYour application has been deployed to OpenShift. You can run 'oc get dc,svc,is,pvc' for details.") return nil }