Repository navigation
Expand file tree
/
Copy pathmain.go
More file actions
133 lines (124 loc) · 3.5 KB
/
Copy pathmain.go
File metadata and controls
133 lines (124 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package main
import (
"fmt"
"io"
"os"
"path"
composeApp "github.com/PastureStack/compose-cli/app"
"github.com/PastureStack/compose-cli/cataloglaunch"
"github.com/PastureStack/compose-cli/executor"
cli "github.com/PastureStack/compose-cli/internal/legacycli"
"github.com/PastureStack/compose-cli/version"
"github.com/sirupsen/logrus"
)
func beforeApp(c *cli.Context) error {
locale := c.GlobalString("locale")
if locale != "en-US" && locale != "zh-TW" {
return fmt.Errorf("unsupported locale %q; use en-US or zh-TW", locale)
}
if c.GlobalBool("verbose") {
logrus.SetLevel(logrus.DebugLevel)
}
logrus.Info(operatorMessage(locale, "ready"))
return nil
}
func main() {
if len(os.Args) == 2 && os.Args[1] == cataloglaunch.Command {
// Existing parser diagnostics may contain private input. This fixed
// server-only mode emits only its bounded protocol on stdout.
logrus.SetOutput(io.Discard)
os.Exit(cataloglaunch.Run(os.Stdin, os.Stdout))
}
base := path.Base(os.Args[0])
if base == "compose-executor" || base == "rancher-compose-executor" {
if requestsVersion(os.Args) {
fmt.Printf("compose-executor version %s\n", version.VERSION)
return
}
executor.Main()
} else {
cliMain()
}
}
func requestsVersion(args []string) bool {
return len(args) == 2 && (args[1] == "--version" || args[1] == "-v")
}
func cliMain() {
factory := &composeApp.PlatformProjectFactory{}
app := cli.NewApp()
app.Name = "pasturestack-compose"
app.Usage = "Deploy Docker Compose workloads through a compatible control-platform API"
app.Version = version.VERSION
app.Author = "PastureStack community"
app.Email = ""
app.Before = beforeApp
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "locale",
Value: "en-US",
Usage: "Operator message locale: en-US or zh-TW",
EnvVar: "PASTURESTACK_LOCALE",
},
cli.BoolFlag{
Name: "verbose,debug",
},
cli.StringSliceFlag{
Name: "file,f",
Usage: "Specify one or more alternate compose files (default: docker-compose.yml)",
Value: &cli.StringSlice{},
EnvVar: "COMPOSE_FILE",
},
cli.StringFlag{
Name: "project-name,p",
Usage: "Specify an alternate project name (default: directory name)",
EnvVar: "COMPOSE_PROJECT_NAME",
},
cli.StringFlag{
Name: "url",
Usage: fmt.Sprintf(
"Specify the control-platform API endpoint URL",
),
EnvVar: "PLATFORM_URL,RANCHER_URL",
},
cli.StringFlag{
Name: "access-key",
Usage: fmt.Sprintf(
"Specify the control-platform API access key",
),
EnvVar: "PLATFORM_ACCESS_KEY,RANCHER_ACCESS_KEY",
},
cli.StringFlag{
Name: "secret-key",
Usage: fmt.Sprintf(
"Specify the control-platform API secret key",
),
EnvVar: "PLATFORM_SECRET_KEY,RANCHER_SECRET_KEY",
},
cli.StringFlag{
Name: "platform-file,rancher-file,r",
Usage: "Specify an alternate platform compatibility file (default: platform-compose.yml)",
},
cli.StringFlag{
Name: "env-file,e",
Usage: "Specify a file from which to read environment variables",
},
cli.StringFlag{
Name: "bindings-file,b",
Usage: "Specify a file from which to read bindings",
},
}
app.Commands = []cli.Command{
composeApp.CreateCommand(factory),
composeApp.UpCommand(factory),
}
if err := app.Run(os.Args); err != nil {
logrus.Fatal(err)
}
}
func operatorMessage(locale, key string) string {
messages := map[string]map[string]string{
"en-US": {"ready": "PastureStack Compose CLI is ready"},
"zh-TW": {"ready": "PastureStack Compose 命令列工具已就緒"},
}
return messages[locale][key]
}