Merge pull request #220 from surajssd/pvc-kompose-up

kompose up/down create and delete pvc
This commit is contained in:
Suraj Deshmukh 2016-10-22 09:33:53 +05:30 committed by GitHub
commit aea39b4e1e
2 changed files with 61 additions and 33 deletions

View File

@ -19,11 +19,12 @@ package kubernetes
import ( import (
"fmt" "fmt"
"strconv" "strconv"
"time"
"github.com/Sirupsen/logrus" "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/kobject"
"github.com/kubernetes-incubator/kompose/pkg/transformer" "github.com/kubernetes-incubator/kompose/pkg/transformer"
deployapi "github.com/openshift/origin/pkg/deploy/api"
// install kubernetes api // install kubernetes api
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
@ -33,19 +34,21 @@ import (
"k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions"
_ "k8s.io/kubernetes/pkg/apis/extensions/install" _ "k8s.io/kubernetes/pkg/apis/extensions/install"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util/intstr" "k8s.io/kubernetes/pkg/util/intstr"
//"k8s.io/kubernetes/pkg/controller/daemon" //"k8s.io/kubernetes/pkg/controller/daemon"
"time"
"k8s.io/kubernetes/pkg/kubectl"
) )
type Kubernetes struct { 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 // Init RC object
func InitRC(name string, service kobject.ServiceConfig, replicas int) *api.ReplicationController { func InitRC(name string, service kobject.ServiceConfig, replicas int) *api.ReplicationController {
rc := &api.ReplicationController{ rc := &api.ReplicationController{
@ -338,7 +341,7 @@ func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.Con
//Convert komposeObject //Convert komposeObject
objects := k.Transform(komposeObject, opt) 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") "If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead. \n")
factory := cmdutil.NewFactory(nil) factory := cmdutil.NewFactory(nil)
@ -366,14 +369,22 @@ func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.Con
return err return err
} }
logrus.Infof("Successfully created service: %s", t.Name) 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 return nil
} }
func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error { func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error {
//Convert komposeObject
objects := k.Transform(komposeObject, opt)
factory := cmdutil.NewFactory(nil) factory := cmdutil.NewFactory(nil)
clientConfig, err := factory.ClientConfig() clientConfig, err := factory.ClientConfig()
@ -386,33 +397,44 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
} }
client := client.NewOrDie(clientConfig) client := client.NewOrDie(clientConfig)
// delete objects from kubernetes for _, v := range objects {
for name := range komposeObject.ServiceConfigs { switch t := v.(type) {
//delete svc case *extensions.Deployment:
rpService, err := kubectl.ReaperFor(api.Kind("Service"), client) //delete deployment
if err != nil { rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client)
return err if err != nil {
} return err
//FIXME: timeout = 300s, gracePeriod is nil }
err = rpService.Stop(namespace, name, 300*time.Second, nil) //FIXME: gracePeriod is nil
if err != nil { err = rpDeployment.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
return err if err != nil {
} else { return err
logrus.Infof("Successfully deleted service: %s", name) } 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 return nil
} }

View File

@ -169,7 +169,7 @@ func (k *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.Conv
//Convert komposeObject //Convert komposeObject
objects := k.Transform(komposeObject, opt) 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") "If you need different kind of resources, use the 'kompose convert' and 'oc create -f' commands instead. \n")
// initialize OpenShift Client // initialize OpenShift Client
@ -215,9 +215,15 @@ func (k *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.Conv
return err return err
} }
logrus.Infof("Successfully created service: %s", t.Name) 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 return nil
} }