initial commit, parse dab file into objects

This commit is contained in:
ngtuna 2016-07-13 10:51:26 +07:00
parent 8871baf9be
commit c49eccf313
2 changed files with 35 additions and 10 deletions

View File

@ -27,6 +27,7 @@ import (
"github.com/urfave/cli" "github.com/urfave/cli"
"github.com/docker/libcompose/project" "github.com/docker/libcompose/project"
"github.com/docker/docker/api/client/bundlefile"
"encoding/json" "encoding/json"
"io/ioutil" "io/ioutil"
@ -553,7 +554,7 @@ func transformer(v interface{}, entity string, generateYaml bool) ([]byte, strin
return data, "" return data, ""
} }
// ProjectKuberConvert tranforms docker compose to k8s objects // ProjectKuberConvert tranforms docker compose or dab file to k8s objects
func ProjectKuberConvert(p *project.Project, c *cli.Context) { func ProjectKuberConvert(p *project.Project, c *cli.Context) {
composeFile := c.String("file") composeFile := c.String("file")
outFile := c.String("out") outFile := c.String("out")
@ -563,6 +564,7 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
createDS := c.BoolT("daemonset") createDS := c.BoolT("daemonset")
createRS := c.BoolT("replicaset") createRS := c.BoolT("replicaset")
createChart := c.BoolT("chart") createChart := c.BoolT("chart")
fromBundles := c.BoolT("from-bundles")
singleOutput := len(outFile) != 0 || toStdout singleOutput := len(outFile) != 0 || toStdout
// Validate the flags // Validate the flags
@ -588,21 +590,39 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
} }
} }
p = project.NewProject(&project.Context{
ProjectName: "kube",
ComposeFile: composeFile,
})
if err := p.Parse(); err != nil {
logrus.Fatalf("Failed to parse the compose project from %s: %v", composeFile, err)
}
var f *os.File var f *os.File
if !createChart { if !createChart {
f = createOutFile(outFile) f = createOutFile(outFile)
defer f.Close() defer f.Close()
} }
if fromBundles {
p = project.NewProject(&project.Context{
ProjectName: "kube",
})
reader := strings.NewReader(composeFile)
bundle, err := bundlefile.LoadFile(reader)
if err != nil {
logrus.Fatalf("Error: failed to load bundles file", err)
}
for name, service := range bundle.Services {
var serviceConfig *project.ServiceConfig
serviceConfig.Image = service.Image
// TODO: mapping other fields
serviceConfig.WorkingDir = *service.WorkingDir
p.Configs[name] = serviceConfig
}
} else {
p = project.NewProject(&project.Context{
ProjectName: "kube",
ComposeFile: composeFile,
})
if err := p.Parse(); err != nil {
logrus.Fatalf("Failed to parse the compose project from %s: %v", composeFile, err)
}
}
var mServices map[string][]byte = make(map[string][]byte) var mServices map[string][]byte = make(map[string][]byte)
var mReplicationControllers map[string][]byte = make(map[string][]byte) var mReplicationControllers map[string][]byte = make(map[string][]byte)
var mDeployments map[string][]byte = make(map[string][]byte) var mDeployments map[string][]byte = make(map[string][]byte)

View File

@ -65,6 +65,11 @@ func ConvertCommand(factory app.ProjectFactory) cli.Command {
Name: "stdout", Name: "stdout",
Usage: "Print Kubernetes objects to stdout", Usage: "Print Kubernetes objects to stdout",
}, },
// FIXME: this flag should be used together with --file/-f in order to specify dab file.
cli.BoolFlag{
Name: "from-bundles",
Usage: "Getting input from docker DAB file",
},
}, },
} }
} }