forked from LaconicNetwork/kompose
--provider global flag for kompose
Now a user can select a provider using global flag --provider=openshift to select openshift provider or --provider-kubernetes to select kubernetes provider if nothing is provided kubernetes is the default provider. Fixes #179
This commit is contained in:
+110
-29
@@ -18,60 +18,134 @@ package command
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/skippbox/kompose/cli/app"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
// ConvertCommand defines the kompose convert subcommand.
|
||||
func ConvertCommand() cli.Command {
|
||||
return cli.Command{
|
||||
// Hook for erroring and exit out on warning
|
||||
type errorOnWarningHook struct{}
|
||||
|
||||
func (errorOnWarningHook) Levels() []logrus.Level {
|
||||
return []logrus.Level{logrus.WarnLevel}
|
||||
}
|
||||
|
||||
func (errorOnWarningHook) Fire(entry *logrus.Entry) error {
|
||||
logrus.Fatalln(entry.Message)
|
||||
return nil
|
||||
}
|
||||
|
||||
// BeforeApp is an action that is executed before any cli command.
|
||||
func BeforeApp(c *cli.Context) error {
|
||||
|
||||
if c.GlobalBool("verbose") {
|
||||
logrus.SetLevel(logrus.DebugLevel)
|
||||
} else if c.GlobalBool("suppress-warnings") {
|
||||
logrus.SetLevel(logrus.ErrorLevel)
|
||||
} else if c.GlobalBool("error-on-warning") {
|
||||
hook := errorOnWarningHook{}
|
||||
logrus.AddHook(hook)
|
||||
}
|
||||
|
||||
// First command added was dummy convert command so removing it
|
||||
c.App.Commands = c.App.Commands[1:]
|
||||
provider := strings.ToLower(c.GlobalString("provider"))
|
||||
switch provider {
|
||||
case "kubernetes":
|
||||
c.App.Commands = append(c.App.Commands, ConvertKubernetesCommand())
|
||||
case "openshift":
|
||||
c.App.Commands = append(c.App.Commands, ConvertOpenShiftCommand())
|
||||
default:
|
||||
logrus.Fatalf("Error: Unknown provider name. Providers supported are - 'kubernetes', 'openshift'.")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// When user tries out `kompose -h`, the convert option should be visible
|
||||
// so adding a dummy `convert` command, real convert commands depending on Providers
|
||||
// mentioned are added in `BeforeApp` function
|
||||
func ConvertCommandDummy() cli.Command {
|
||||
command := cli.Command{
|
||||
Name: "convert",
|
||||
Usage: fmt.Sprintf("Convert Docker Compose file (e.g. %s) to Kubernetes/OpenShift objects", app.DefaultComposeFile),
|
||||
}
|
||||
return command
|
||||
}
|
||||
|
||||
// ConvertKubernetesCommand defines the kompose convert subcommand for Kubernetes provider
|
||||
func ConvertKubernetesCommand() cli.Command {
|
||||
command := cli.Command{
|
||||
Name: "convert",
|
||||
Usage: fmt.Sprintf("Convert Docker Compose file (e.g. %s) to Kubernetes objects", app.DefaultComposeFile),
|
||||
Action: func(c *cli.Context) {
|
||||
app.Convert(c)
|
||||
},
|
||||
Flags: []cli.Flag{
|
||||
cli.StringFlag{
|
||||
Name: "out,o",
|
||||
Usage: "Specify file name in order to save objects into",
|
||||
EnvVar: "OUTPUT_FILE",
|
||||
cli.BoolFlag{
|
||||
Name: "chart,c",
|
||||
Usage: "Create a Helm chart for converted objects",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "deployment,d",
|
||||
Usage: "Generate a deployment resource file (default on)",
|
||||
Usage: "Generate a Kubernetes deployment object (default on)",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "daemonset,ds",
|
||||
Usage: "Generate a daemonset resource file",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "deploymentconfig,dc",
|
||||
Usage: "Generate a DeploymentConfig for OpenShift",
|
||||
Usage: "Generate a Kubernetes daemonset object",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "replicationcontroller,rc",
|
||||
Usage: "Generate a replication controller resource file",
|
||||
},
|
||||
cli.IntFlag{
|
||||
Name: "replicas",
|
||||
Value: 1,
|
||||
Usage: "Specify the number of replicas in the generated resource spec (default 1)",
|
||||
Usage: "Generate a Kubernetes replication controller object",
|
||||
},
|
||||
},
|
||||
}
|
||||
command.Flags = append(command.Flags, commonConvertFlags()...)
|
||||
return command
|
||||
}
|
||||
|
||||
// ConvertOpenShiftCommand defines the kompose convert subcommand for OpenShift provider
|
||||
func ConvertOpenShiftCommand() cli.Command {
|
||||
command := cli.Command{
|
||||
Name: "convert",
|
||||
Usage: fmt.Sprintf("Convert Docker Compose file (e.g. %s) to OpenShift objects", app.DefaultComposeFile),
|
||||
Action: func(c *cli.Context) {
|
||||
app.Convert(c)
|
||||
},
|
||||
Flags: []cli.Flag{
|
||||
cli.BoolFlag{
|
||||
Name: "chart,c",
|
||||
Usage: "Create a chart deployment",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "yaml, y",
|
||||
Usage: "Generate resource file in yaml format",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "stdout",
|
||||
Usage: "Print Kubernetes objects to stdout",
|
||||
Name: "deploymentconfig,dc",
|
||||
Usage: "Generate a OpenShift DeploymentConfig object",
|
||||
},
|
||||
},
|
||||
}
|
||||
command.Flags = append(command.Flags, commonConvertFlags()...)
|
||||
return command
|
||||
}
|
||||
|
||||
func commonConvertFlags() []cli.Flag {
|
||||
return []cli.Flag{
|
||||
cli.StringFlag{
|
||||
Name: "out,o",
|
||||
Usage: "Specify file name in order to save objects into",
|
||||
EnvVar: "OUTPUT_FILE",
|
||||
},
|
||||
cli.IntFlag{
|
||||
Name: "replicas",
|
||||
Value: 1,
|
||||
Usage: "Specify the number of replicas in the generated resource spec (default 1)",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "yaml, y",
|
||||
Usage: "Generate resource file in yaml format",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "stdout",
|
||||
Usage: "Print converted objects to stdout",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// UpCommand defines the kompose up subcommand.
|
||||
@@ -126,5 +200,12 @@ func CommonFlags() []cli.Flag {
|
||||
Name: "error-on-warning",
|
||||
Usage: "Treat any warning as error",
|
||||
},
|
||||
// mention the end provider
|
||||
cli.StringFlag{
|
||||
Name: "provider",
|
||||
Usage: "Generate artifacts for this provider",
|
||||
Value: app.DefaultProvider,
|
||||
EnvVar: "PROVIDER",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user