Skip to content

Commit d264e2d

Browse files
committed
Check for Docker before prompting user
1 parent 06056f2 commit d264e2d

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

cli/cmd/cluster.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ var upCmd = &cobra.Command{
7070
Long: `This command spins up a Cortex cluster on your AWS account.`,
7171
Args: cobra.NoArgs,
7272
Run: func(cmd *cobra.Command, args []string) {
73+
if err := checkDockerRunning(); err != nil {
74+
errors.Exit(err)
75+
}
76+
7377
promptForEmail()
7478

7579
clusterConfig, awsCreds, err := getInstallClusterConfig()
@@ -90,6 +94,10 @@ var updateCmd = &cobra.Command{
9094
Long: `This command updates a Cortex cluster.`,
9195
Args: cobra.NoArgs,
9296
Run: func(cmd *cobra.Command, args []string) {
97+
if err := checkDockerRunning(); err != nil {
98+
errors.Exit(err)
99+
}
100+
93101
clusterConfig, awsCreds, err := getUpdateClusterConfig()
94102
if err != nil {
95103
errors.Exit(err)
@@ -108,6 +116,10 @@ var infoCmd = &cobra.Command{
108116
Long: `This command gets information about a Cortex cluster.`,
109117
Args: cobra.NoArgs,
110118
Run: func(cmd *cobra.Command, args []string) {
119+
if err := checkDockerRunning(); err != nil {
120+
errors.Exit(err)
121+
}
122+
111123
clusterConfig, awsCreds, err := getAccessClusterConfig()
112124
if err != nil {
113125
errors.Exit(err)
@@ -142,6 +154,10 @@ var downCmd = &cobra.Command{
142154
Long: `This command spins down a Cortex cluster.`,
143155
Args: cobra.NoArgs,
144156
Run: func(cmd *cobra.Command, args []string) {
157+
if err := checkDockerRunning(); err != nil {
158+
errors.Exit(err)
159+
}
160+
145161
prompt.YesOrExit("Are you sure you want to uninstall Cortex? (Your cluster will be spun down and all APIs will be deleted)", "")
146162

147163
clusterConfig, awsCreds, err := getAccessClusterConfig()

cli/cmd/lib_manager.go

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,34 @@ func getDockerClient() (*dockerclient.Client, error) {
4848
var err error
4949
cachedDockerClient, err = dockerclient.NewClientWithOpts(dockerclient.FromEnv)
5050
if err != nil {
51-
return nil, err
51+
return nil, wrapDockerError(err)
5252
}
5353

5454
cachedDockerClient.NegotiateAPIVersion(context.Background())
5555
return cachedDockerClient, nil
5656
}
5757

58+
func wrapDockerError(err error) error {
59+
if dockerclient.IsErrConnectionFailed(err) {
60+
return errors.New("Unable to connect to the Docker daemon, please confirm Docker is running")
61+
}
62+
63+
return errors.WithStack(err)
64+
}
65+
66+
func checkDockerRunning() error {
67+
docker, err := getDockerClient()
68+
if err != nil {
69+
return err
70+
}
71+
72+
if _, err := docker.Info(context.Background()); err != nil {
73+
return wrapDockerError(err)
74+
}
75+
76+
return nil
77+
}
78+
5879
func pullManager(clusterConfig *clusterconfig.ClusterConfig) error {
5980
docker, err := getDockerClient()
6081
if err != nil {
@@ -63,7 +84,7 @@ func pullManager(clusterConfig *clusterconfig.ClusterConfig) error {
6384

6485
images, err := docker.ImageList(context.Background(), dockertypes.ImageListOptions{})
6586
if err != nil {
66-
return err
87+
return wrapDockerError(err)
6788
}
6889

6990
for _, image := range images {
@@ -76,7 +97,7 @@ func pullManager(clusterConfig *clusterconfig.ClusterConfig) error {
7697

7798
pullOutput, err := docker.ImagePull(context.Background(), clusterConfig.ImageManager, dockertypes.ImagePullOptions{})
7899
if err != nil {
79-
return err
100+
return wrapDockerError(err)
80101
}
81102
defer pullOutput.Close()
82103

@@ -92,11 +113,14 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
92113
return "", err
93114
}
94115

95-
pullManager(clusterConfig)
116+
err = pullManager(clusterConfig)
117+
if err != nil {
118+
return "", err
119+
}
96120

97121
clusterConfigBytes, err := yaml.Marshal(clusterConfig)
98122
if err != nil {
99-
return "", err
123+
return "", errors.WithStack(err)
100124
}
101125
if err := files.WriteFile(clusterConfigBytes, cachedClusterConfigPath); err != nil {
102126
return "", err
@@ -129,7 +153,7 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
129153

130154
containerInfo, err := docker.ContainerCreate(context.Background(), containerConfig, hostConfig, nil, "")
131155
if err != nil {
132-
errors.Exit(err)
156+
return "", wrapDockerError(err)
133157
}
134158

135159
removeContainer := func() {
@@ -154,7 +178,7 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
154178

155179
err = docker.ContainerStart(context.Background(), containerInfo.ID, dockertypes.ContainerStartOptions{})
156180
if err != nil {
157-
return "", err
181+
return "", wrapDockerError(err)
158182
}
159183

160184
// There is a slight delay between the container starting at attaching to it, hence the sleep in Cmd
@@ -164,7 +188,7 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
164188
Stderr: true,
165189
})
166190
if err != nil {
167-
return "", err
191+
return "", wrapDockerError(err)
168192
}
169193
defer logsOutput.Close()
170194

@@ -173,7 +197,7 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
173197

174198
_, err = io.Copy(os.Stdout, tee)
175199
if err != nil {
176-
return "", err
200+
return "", errors.WithStack(err)
177201
}
178202

179203
output := outputBuffer.String()

0 commit comments

Comments
 (0)