Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
Akihiro Suda authored on 2017/03/09 17:52:31... | ... |
@@ -25,13 +25,14 @@ const ( |
25 | 25 |
) |
26 | 26 |
|
27 | 27 |
func main() { |
28 |
- if err := xmain(); err != nil { |
|
28 |
+ rc, err := xmain() |
|
29 |
+ if err != nil { |
|
29 | 30 |
logrus.Fatalf("fatal error: %v", err) |
30 | 31 |
} |
32 |
+ os.Exit(rc) |
|
31 | 33 |
} |
32 | 34 |
|
33 |
-// xmain can call os.Exit() |
|
34 |
-func xmain() error { |
|
35 |
+func xmain() (int, error) { |
|
35 | 36 |
// Should we use cobra maybe? |
36 | 37 |
replicas := flag.Int("replicas", 1, "Number of worker service replica") |
37 | 38 |
chunks := flag.Int("chunks", 0, "Number of test chunks executed in batch (0 == replicas)") |
... | ... |
@@ -50,7 +51,7 @@ func xmain() error { |
50 | 50 |
} |
51 | 51 |
cli, err := client.NewEnvClient() |
52 | 52 |
if err != nil { |
53 |
- return err |
|
53 |
+ return 1, err |
|
54 | 54 |
} |
55 | 55 |
if hasStack(cli, defaultStackName) { |
56 | 56 |
logrus.Infof("Removing stack %s", defaultStackName) |
... | ... |
@@ -61,13 +62,13 @@ func xmain() error { |
61 | 61 |
removeVolume(cli, defaultVolumeName) |
62 | 62 |
} |
63 | 63 |
if err = ensureImages(cli, []string{defaultWorkerImageName, defaultMasterImageName}); err != nil { |
64 |
- return err |
|
64 |
+ return 1, err |
|
65 | 65 |
} |
66 | 66 |
workerImageForStack := defaultWorkerImageName |
67 | 67 |
if *pushWorkerImage != "" { |
68 | 68 |
logrus.Infof("Pushing %s to %s", defaultWorkerImageName, *pushWorkerImage) |
69 | 69 |
if err = pushImage(cli, *pushWorkerImage, defaultWorkerImageName); err != nil { |
70 |
- return err |
|
70 |
+ return 1, err |
|
71 | 71 |
} |
72 | 72 |
workerImageForStack = *pushWorkerImage |
73 | 73 |
} |
... | ... |
@@ -82,18 +83,18 @@ func xmain() error { |
82 | 82 |
DryRun: *dryRun, |
83 | 83 |
}) |
84 | 84 |
if err != nil { |
85 |
- return err |
|
85 |
+ return 1, err |
|
86 | 86 |
} |
87 | 87 |
filters, err := filtersBytes(*filtersFile) |
88 | 88 |
if err != nil { |
89 |
- return err |
|
89 |
+ return 1, err |
|
90 | 90 |
} |
91 | 91 |
logrus.Infof("Creating volume %s with input data", defaultVolumeName) |
92 | 92 |
if err = createVolumeWithData(cli, |
93 | 93 |
defaultVolumeName, |
94 | 94 |
map[string][]byte{"/input": filters}, |
95 | 95 |
defaultMasterImageName); err != nil { |
96 |
- return err |
|
96 |
+ return 1, err |
|
97 | 97 |
} |
98 | 98 |
logrus.Infof("Deploying stack %s from %s", defaultStackName, compose) |
99 | 99 |
defer func() { |
... | ... |
@@ -105,22 +106,21 @@ func xmain() error { |
105 | 105 |
logrus.Infof(" - Worker image: %s", workerImageForStack) |
106 | 106 |
}() |
107 | 107 |
if err = deployStack(cli, defaultStackName, compose); err != nil { |
108 |
- return err |
|
108 |
+ return 1, err |
|
109 | 109 |
} |
110 | 110 |
logrus.Infof("The log will be displayed here after some duration."+ |
111 | 111 |
"You can watch the live status via `docker service logs %s_worker`", |
112 | 112 |
defaultStackName) |
113 | 113 |
masterContainerID, err := waitForMasterUp(cli, defaultStackName) |
114 | 114 |
if err != nil { |
115 |
- return err |
|
115 |
+ return 1, err |
|
116 | 116 |
} |
117 | 117 |
rc, err := waitForContainerCompletion(cli, os.Stdout, os.Stderr, masterContainerID) |
118 | 118 |
if err != nil { |
119 |
- return err |
|
119 |
+ return 1, err |
|
120 | 120 |
} |
121 | 121 |
logrus.Infof("Exit status: %d", rc) |
122 |
- os.Exit(int(rc)) |
|
123 |
- return nil |
|
122 |
+ return int(rc), nil |
|
124 | 123 |
} |
125 | 124 |
|
126 | 125 |
func ensureImages(cli *client.Client, images []string) error { |