forked from LaconicNetwork/kompose
Prepare up/down for other providers
This commit is contained in:
parent
c593ff8e44
commit
799345a6f9
@ -25,16 +25,12 @@ import (
|
||||
// install kubernetes api
|
||||
_ "k8s.io/kubernetes/pkg/api/install"
|
||||
_ "k8s.io/kubernetes/pkg/apis/extensions/install"
|
||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||
|
||||
// install OpenShift apis
|
||||
_ "github.com/openshift/origin/pkg/deploy/api/install"
|
||||
|
||||
"github.com/skippbox/kompose/pkg/kobject"
|
||||
"github.com/skippbox/kompose/pkg/loader"
|
||||
"github.com/skippbox/kompose/pkg/loader/bundle"
|
||||
"github.com/skippbox/kompose/pkg/loader/compose"
|
||||
"github.com/skippbox/kompose/pkg/transformer"
|
||||
"github.com/skippbox/kompose/pkg/transformer/kubernetes"
|
||||
"github.com/skippbox/kompose/pkg/transformer/openshift"
|
||||
@ -151,14 +147,9 @@ func Convert(c *cli.Context) {
|
||||
validateFlags(opt, singleOutput, dabFile, inputFile)
|
||||
|
||||
// loader parses input from file into komposeObject.
|
||||
var l loader.Loader
|
||||
switch inputFormat {
|
||||
case "bundle":
|
||||
l = new(bundle.Bundle)
|
||||
case "compose":
|
||||
l = new(compose.Compose)
|
||||
default:
|
||||
logrus.Fatalf("Input file format is not supported")
|
||||
l, err := loader.GetLoader(inputFormat)
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
komposeObject = l.LoadFile(file)
|
||||
@ -179,20 +170,6 @@ func Convert(c *cli.Context) {
|
||||
|
||||
// Up brings up deployment, svc.
|
||||
func Up(c *cli.Context) {
|
||||
fmt.Println("We are going to create Kubernetes deployments and services 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)
|
||||
clientConfig, err := factory.ClientConfig()
|
||||
if err != nil {
|
||||
logrus.Fatalf("Failed to access the Kubernetes cluster. Make sure you have a Kubernetes cluster running: %v", err)
|
||||
}
|
||||
namespace, _, err := factory.DefaultNamespace()
|
||||
if err != nil {
|
||||
logrus.Fatalf("Failed to get Namespace")
|
||||
}
|
||||
client := client.NewOrDie(clientConfig)
|
||||
|
||||
inputFile := c.GlobalString("file")
|
||||
dabFile := c.GlobalString("bundle")
|
||||
|
||||
@ -214,35 +191,25 @@ func Up(c *cli.Context) {
|
||||
validateFlags(opt, false, dabFile, inputFile)
|
||||
|
||||
// loader parses input from file into komposeObject.
|
||||
var l loader.Loader
|
||||
switch inputFormat {
|
||||
case "bundle":
|
||||
l = new(bundle.Bundle)
|
||||
case "compose":
|
||||
l = new(compose.Compose)
|
||||
default:
|
||||
logrus.Fatalf("Input file format is not supported")
|
||||
l, err := loader.GetLoader(inputFormat)
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
komposeObject = l.LoadFile(file)
|
||||
|
||||
//get transfomer
|
||||
t := new(kubernetes.Kubernetes)
|
||||
|
||||
//Convert komposeObject to K8S controllers
|
||||
objects := t.Transform(komposeObject, opt)
|
||||
|
||||
//Submit objects to K8s endpoint
|
||||
kubernetes.CreateObjects(client, namespace, objects)
|
||||
//Submit objects provider
|
||||
errDeploy := t.Deploy(komposeObject, opt)
|
||||
if errDeploy != nil {
|
||||
logrus.Fatalf("Error while deploying application: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Down deletes all deployment, svc.
|
||||
func Down(c *cli.Context) {
|
||||
factory := cmdutil.NewFactory(nil)
|
||||
clientConfig, err := factory.ClientConfig()
|
||||
if err != nil {
|
||||
logrus.Fatalf("Failed to access the Kubernetes cluster. Make sure you have a Kubernetes running: %v", err)
|
||||
}
|
||||
client := client.NewOrDie(clientConfig)
|
||||
|
||||
inputFile := c.GlobalString("file")
|
||||
dabFile := c.GlobalString("bundle")
|
||||
|
||||
@ -256,25 +223,30 @@ func Down(c *cli.Context) {
|
||||
file = dabFile
|
||||
}
|
||||
|
||||
opt := kobject.ConvertOptions{}
|
||||
opt := kobject.ConvertOptions{
|
||||
Replicas: 1,
|
||||
CreateD: true,
|
||||
}
|
||||
|
||||
validateFlags(opt, false, dabFile, inputFile)
|
||||
|
||||
// loader parses input from file into komposeObject.
|
||||
var l loader.Loader
|
||||
switch inputFormat {
|
||||
case "bundle":
|
||||
l = new(bundle.Bundle)
|
||||
case "compose":
|
||||
l = new(compose.Compose)
|
||||
default:
|
||||
logrus.Fatalf("Input file format is not supported")
|
||||
l, err := loader.GetLoader(inputFormat)
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
komposeObject = l.LoadFile(file)
|
||||
|
||||
for k := range komposeObject.ServiceConfigs {
|
||||
kubernetes.DeleteObjects(client, k)
|
||||
// get transformer
|
||||
t := new(kubernetes.Kubernetes)
|
||||
|
||||
//Remove deployed application
|
||||
errUndeploy := t.Undeploy(komposeObject, opt)
|
||||
if errUndeploy != nil {
|
||||
logrus.Fatalf("Error while deleting application: %s", err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func askForConfirmation() bool {
|
||||
|
||||
@ -16,8 +16,32 @@ limitations under the License.
|
||||
|
||||
package loader
|
||||
|
||||
import "github.com/skippbox/kompose/pkg/kobject"
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/skippbox/kompose/pkg/kobject"
|
||||
"github.com/skippbox/kompose/pkg/loader/bundle"
|
||||
"github.com/skippbox/kompose/pkg/loader/compose"
|
||||
)
|
||||
|
||||
type Loader interface {
|
||||
LoadFile(file string) kobject.KomposeObject
|
||||
}
|
||||
|
||||
// GetLoader returns loader for given format
|
||||
func GetLoader(format string) (Loader, error) {
|
||||
var l Loader
|
||||
|
||||
switch format {
|
||||
case "bundle":
|
||||
l = new(bundle.Bundle)
|
||||
case "compose":
|
||||
l = new(compose.Compose)
|
||||
default:
|
||||
return nil, errors.New(fmt.Sprintf("Input file format %s is not supported", format))
|
||||
}
|
||||
|
||||
return l, nil
|
||||
|
||||
}
|
||||
|
||||
@ -25,10 +25,15 @@ import (
|
||||
"github.com/skippbox/kompose/pkg/kobject"
|
||||
"github.com/skippbox/kompose/pkg/transformer"
|
||||
|
||||
// install kubernetes api
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
_ "k8s.io/kubernetes/pkg/api/install"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
_ "k8s.io/kubernetes/pkg/apis/extensions/install"
|
||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
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"
|
||||
@ -281,36 +286,69 @@ func UpdateController(obj runtime.Object, updateTemplate func(*api.PodTemplateSp
|
||||
}
|
||||
|
||||
// Submit deployment and svc to k8s endpoint
|
||||
func CreateObjects(client *client.Client, namespace string, objects []runtime.Object) {
|
||||
func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error {
|
||||
//Convert komposeObject
|
||||
objects := k.Transform(komposeObject, opt)
|
||||
|
||||
fmt.Println("We are going to create Kubernetes deployments and services 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)
|
||||
clientConfig, err := factory.ClientConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
namespace, _, err := factory.DefaultNamespace()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
client := client.NewOrDie(clientConfig)
|
||||
|
||||
for _, v := range objects {
|
||||
switch t := v.(type) {
|
||||
case *extensions.Deployment:
|
||||
_, err := client.Deployments(namespace).Create(t)
|
||||
if err != nil {
|
||||
logrus.Fatalf("Error: '%v' while creating deployment: %s", err, t.Name)
|
||||
return err
|
||||
}
|
||||
logrus.Infof("Successfully created deployment: %s", t.Name)
|
||||
case *api.Service:
|
||||
_, err := client.Services(namespace).Create(t)
|
||||
if err != nil {
|
||||
logrus.Fatalf("Error: '%v' while creating service: %s", err, t.Name)
|
||||
return err
|
||||
}
|
||||
logrus.Infof("Successfully created service: %s", t.Name)
|
||||
}
|
||||
}
|
||||
fmt.Println("\nYour application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc,pods' for details.")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func DeleteObjects(client *client.Client, name string) {
|
||||
func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error {
|
||||
|
||||
factory := cmdutil.NewFactory(nil)
|
||||
clientConfig, err := factory.ClientConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
namespace, _, err := factory.DefaultNamespace()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
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 {
|
||||
logrus.Warningf("Can't get reaper for service due to '%v'", err)
|
||||
return err
|
||||
}
|
||||
//FIXME: timeout = 300s, gracePeriod is nil
|
||||
err = rpService.Stop(api.NamespaceDefault, name, 300*time.Second, nil)
|
||||
err = rpService.Stop(namespace, name, 300*time.Second, nil)
|
||||
if err != nil {
|
||||
logrus.Warningf("Can't delete service: %s due to '%v'", name, err)
|
||||
return err
|
||||
} else {
|
||||
logrus.Infof("Successfully deleted service: %s", name)
|
||||
}
|
||||
@ -318,13 +356,15 @@ func DeleteObjects(client *client.Client, name string) {
|
||||
//delete deployment
|
||||
rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client)
|
||||
if err != nil {
|
||||
logrus.Warningf("Can't get reaper for deployment due to '%v'", err)
|
||||
return err
|
||||
}
|
||||
//FIXME: timeout = 300s, gracePeriod is nil
|
||||
err = rpDeployment.Stop(api.NamespaceDefault, name, 300*time.Second, nil)
|
||||
err = rpDeployment.Stop(namespace, name, 300*time.Second, nil)
|
||||
if err != nil {
|
||||
logrus.Warningf("Can't delete deployment: %s due to '%v'", name, err)
|
||||
return err
|
||||
} else {
|
||||
logrus.Infof("Successfully deleted deployment: %s", name)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -17,6 +17,8 @@ limitations under the License.
|
||||
package openshift
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
deployapi "github.com/openshift/origin/pkg/deploy/api"
|
||||
"github.com/skippbox/kompose/pkg/kobject"
|
||||
"github.com/skippbox/kompose/pkg/transformer/kubernetes"
|
||||
@ -89,3 +91,11 @@ func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
|
||||
kubernetes.SortServicesFirst(&allobjects)
|
||||
return allobjects
|
||||
}
|
||||
|
||||
func (k *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error {
|
||||
return errors.New("Not Implemented")
|
||||
}
|
||||
|
||||
func (k *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error {
|
||||
return errors.New("Not Implemented")
|
||||
}
|
||||
|
||||
@ -22,5 +22,10 @@ import (
|
||||
)
|
||||
|
||||
type Transformer interface {
|
||||
// Transform converts KomposeObject to transformer specific objects.
|
||||
Transform(kobject.KomposeObject, kobject.ConvertOptions) []runtime.Object
|
||||
// Deploy deploys KomposeObject to provider
|
||||
Deploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error
|
||||
// Undeploy deletes/undeploys KomposeObject from provider
|
||||
Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user