support kompose up

This commit is contained in:
Tuna 2016-08-04 19:13:02 +07:00
parent c4d62c99ee
commit 8a8a063703
2 changed files with 82 additions and 82 deletions

View File

@ -43,8 +43,8 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/extensions"
//client "k8s.io/kubernetes/pkg/client/unversioned"
//cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
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"
@ -908,7 +908,7 @@ type convertOptions struct {
}
// Convert komposeObject to K8S controllers
func komposeConvert(komposeObject KomposeObject, opt convertOptions) {
func komposeConvert(komposeObject KomposeObject, opt convertOptions) (map[string][]byte, map[string][]byte, map[string][]byte, map[string][]byte, map[string][]byte, []string) {
mServices := make(map[string][]byte)
mReplicationControllers := make(map[string][]byte)
mDeployments := make(map[string][]byte)
@ -916,9 +916,6 @@ func komposeConvert(komposeObject KomposeObject, opt convertOptions) {
// OpenShift DeploymentConfigs
mDeploymentConfigs := make(map[string][]byte)
f := createOutFile(opt.outFile)
defer f.Close()
var svcnames []string
for name, service := range komposeObject.ServiceConfigs {
@ -1041,6 +1038,10 @@ func komposeConvert(komposeObject KomposeObject, opt convertOptions) {
mDeploymentConfigs[name] = dataDeploymentConfig
}
return mServices, mDeployments, mDaemonSets, mReplicationControllers, mDeploymentConfigs, svcnames
}
func printControllers(mServices, mDeployments, mDaemonSets, mReplicationControllers, mDeploymentConfigs map[string][]byte, svcnames []string, opt convertOptions, f *os.File) {
for k, v := range mServices {
if v != nil {
print(k, "svc", v, opt.toStdout, opt.generateYaml, f)
@ -1138,7 +1139,6 @@ func Convert(c *cli.Context) {
komposeObject := KomposeObject{}
file := inputFile
// Convert komposeObject to K8S controllers
opt := convertOptions{
toStdout: toStdout,
createD: createD,
@ -1159,7 +1159,14 @@ func Convert(c *cli.Context) {
komposeObject = loadComposeFile(inputFile, opt)
}
komposeConvert(komposeObject, opt)
// Convert komposeObject to K8S controllers
mServices, mDeployments, mDaemonSets, mReplicationControllers, mDeploymentConfigs, svcnames := komposeConvert(komposeObject, opt)
f := createOutFile(opt.outFile)
defer f.Close()
// Print output
printControllers(mServices, mDeployments, mDaemonSets, mReplicationControllers, mDeploymentConfigs, svcnames, opt, f)
}
func checkUnsupportedKey(service interface{}) {
@ -1202,80 +1209,60 @@ func print(name, trailing string, data []byte, toStdout, generateYaml bool, f *o
// Up brings up rc, svc.
func Up(c *cli.Context) {
//factory := cmdutil.NewFactory(nil)
//clientConfig, err := factory.ClientConfig()
//if err != nil {
// logrus.Fatalf("Failed to get Kubernetes client config: %v", err)
//}
//client := client.NewOrDie(clientConfig)
//
//files, err := ioutil.ReadDir(".")
//if err != nil {
// logrus.Fatalf("Failed to load rc, svc manifest files: %s\n", err)
//}
//
//// submit svc first
//sc := &api.Service{}
//for _, file := range files {
// if strings.Contains(file.Name(), "svc") {
// datasvc, err := ioutil.ReadFile(file.Name())
//
// if err != nil {
// logrus.Fatalf("Failed to load %s: %s\n", file.Name(), err)
// }
//
// if strings.Contains(file.Name(), "json") {
// err := json.Unmarshal(datasvc, &sc)
// if err != nil {
// logrus.Fatalf("Failed to unmarshal file %s to svc object: %s\n", file.Name(), err)
// }
// }
// if strings.Contains(file.Name(), "yaml") {
// err := yaml.Unmarshal(datasvc, &sc)
// if err != nil {
// logrus.Fatalf("Failed to unmarshal file %s to svc object: %s\n", file.Name(), err)
// }
// }
// // submit sc to k8s
// scCreated, err := client.Services(api.NamespaceDefault).Create(sc)
// if err != nil {
// fmt.Println(err)
// }
// logrus.Debugf("%s\n", scCreated)
// }
//}
//
//// then submit rc
//rc := &api.ReplicationController{}
//for _, file := range files {
// if strings.Contains(file.Name(), "rc") {
// datarc, err := ioutil.ReadFile(file.Name())
//
// if err != nil {
// logrus.Fatalf("Failed to load %s: %s\n", file.Name(), err)
// }
//
// if strings.Contains(file.Name(), "json") {
// err := json.Unmarshal(datarc, &rc)
// if err != nil {
// logrus.Fatalf("Failed to unmarshal file %s to rc object: %s\n", file.Name(), err)
// }
// }
// if strings.Contains(file.Name(), "yaml") {
// err := yaml.Unmarshal(datarc, &rc)
// if err != nil {
// logrus.Fatalf("Failed to unmarshal file %s to rc object: %s\n", file.Name(), err)
// }
// }
// // submit rc to k8s
// rcCreated, err := client.ReplicationControllers(api.NamespaceDefault).Create(rc)
// if err != nil {
// fmt.Println(err)
// }
// logrus.Debugf("%s\n", rcCreated)
// }
//}
logrus.Infof("We are going to create deployment controller and service for your dockerized application. \n" +
"If you need more kind of controllers, consider to use kompose convert and kubectl")
inputFile := c.String("file")
dabFile := c.String("bundle")
komposeObject := KomposeObject{}
opt := convertOptions{}
if len(dabFile) > 0 {
komposeObject = loadBundlesFile(dabFile, opt)
} else {
komposeObject = loadComposeFile(inputFile, opt)
}
// Convert komposeObject to K8S controllers
mServices, mDeployments, _, _, _, _ := komposeConvert(komposeObject, opt)
factory := cmdutil.NewFactory(nil)
clientConfig, err := factory.ClientConfig()
if err != nil {
logrus.Fatalf("Failed to get Kubernetes client config: %v", err)
}
client := client.NewOrDie(clientConfig)
// submit svc first
sc := &api.Service{}
for k, v := range mServices {
err := json.Unmarshal(v, &sc)
if err != nil {
logrus.Fatalf("Failed to unmarshal %s to service object: %s\n", k, err)
}
//submit sc to k8s
scCreated, err := client.Services(api.NamespaceDefault).Create(sc)
if err != nil {
logrus.Fatalf("Failed to create service %s: ", k, err)
}
logrus.Debugf("%s\n", scCreated)
}
// then submit dc
dc := &extensions.Deployment{}
for k, v := range mDeployments {
err := json.Unmarshal(v, &dc)
if err != nil {
logrus.Fatalf("Failed to unmarshal %s to deployment controller object: %s\n", k, err)
}
//submit sc to k8s
dcCreated, err := client.Deployments(api.NamespaceDefault).Create(dc)
if err != nil {
logrus.Fatalf("Failed to create deployment controller %s: ", k, err)
}
logrus.Debugf("%s\n", dcCreated)
}
}
// updateController updates the given object with the given pod template update function and ObjectMeta update function

View File

@ -89,10 +89,23 @@ func ConvertCommand() cli.Command {
func UpCommand() cli.Command {
return cli.Command{
Name: "up",
Usage: "Submit rc, svc objects to kubernetes API endpoint",
Usage: "Deploy your Dockerized application to Kubernetes (by default create dc and svc)",
Action: func(c *cli.Context) {
app.Up(c)
},
Flags: []cli.Flag{
cli.StringFlag{
Name: "file,f",
Usage: fmt.Sprintf("Specify an alternate compose file (default: %s)", app.DefaultComposeFile),
Value: app.DefaultComposeFile,
EnvVar: "COMPOSE_FILE",
},
cli.StringFlag{
Name: "bundle,dab",
Usage: "Specify a Distributed Application Bundle (DAB) file",
EnvVar: "DAB_FILE",
},
},
}
}