Skip to content
This repository was archived by the owner on Mar 22, 2022. It is now read-only.

Commit d14aa78

Browse files
gloursndeloof
authored andcommitted
Move Container functions to a dedicated file into internal directory
Signed-off-by: Guillaume Lours <[email protected]>
1 parent f8dd351 commit d14aa78

File tree

2 files changed

+56
-47
lines changed

2 files changed

+56
-47
lines changed

internal/container.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package internal
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/docker/docker/api/types"
8+
"github.com/docker/docker/api/types/filters"
9+
"github.com/docker/docker/client"
10+
)
11+
12+
func CollectContainers(cli *client.Client, project string) (map[string][]types.Container, error) {
13+
containerList, err := cli.ContainerList(context.Background(), types.ContainerListOptions{
14+
All: true,
15+
Filters: filters.NewArgs(filters.Arg("label", LabelProject+"="+project)),
16+
})
17+
if err != nil {
18+
return nil, err
19+
}
20+
containers := map[string][]types.Container{}
21+
for _, c := range containerList {
22+
service := c.Labels[LabelService]
23+
l, ok := containers[service]
24+
if !ok {
25+
l = []types.Container{c}
26+
} else {
27+
l = append(l, c)
28+
}
29+
containers[service] = l
30+
}
31+
return containers, nil
32+
}
33+
34+
func RemoveContainers(cli *client.Client, containers []types.Container) error {
35+
ctx := context.Background()
36+
for _, c := range containers {
37+
if serviceName, ok := c.Labels[LabelService]; ok {
38+
fmt.Printf("Stopping containers for service %s ... ", serviceName)
39+
}
40+
err := cli.ContainerStop(ctx, c.ID, nil)
41+
if err != nil {
42+
return err
43+
}
44+
err = cli.ContainerRemove(ctx, c.ID, types.ContainerRemoveOptions{})
45+
if err != nil {
46+
return err
47+
}
48+
fmt.Println(c.ID)
49+
}
50+
return nil
51+
}

main.go

Lines changed: 5 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"path/filepath"
1010

1111
"github.com/compose-spec/compose-ref/internal"
12-
"github.com/docker/docker/api/types/filters"
1312
"gopkg.in/yaml.v2"
1413

1514
"github.com/compose-spec/compose-go/loader"
@@ -129,7 +128,7 @@ func doUp(project string, config *compose.Config) error {
129128
return err
130129
}
131130

132-
observedState, err := collectContainers(cli, project)
131+
observedState, err := internal.CollectContainers(cli, project)
133132
if err != nil {
134133
return err
135134
}
@@ -169,7 +168,7 @@ func doUp(project string, config *compose.Config) error {
169168
}
170169

171170
// Some containers exist for service but with an obsolete configuration. We need to replace them
172-
err = removeContainers(cli, containers)
171+
err = internal.RemoveContainers(cli, containers)
173172
if err != nil {
174173
return err
175174
}
@@ -182,33 +181,14 @@ func doUp(project string, config *compose.Config) error {
182181

183182
// Remaining containers in observed state don't have a matching service in Compose file => orphaned to be removed
184183
for _, orphaned := range observedState {
185-
err = removeContainers(cli, orphaned)
184+
err = internal.RemoveContainers(cli, orphaned)
186185
if err != nil {
187186
return err
188187
}
189188
}
190189
return nil
191190
}
192191

193-
func removeContainers(cli *client.Client, containers []types.Container) error {
194-
ctx := context.Background()
195-
for _, c := range containers {
196-
if serviceName, ok := c.Labels[internal.LabelService]; ok {
197-
fmt.Printf("Stopping containers for service %s ... ", serviceName)
198-
}
199-
err := cli.ContainerStop(ctx, c.ID, nil)
200-
if err != nil {
201-
return err
202-
}
203-
err = cli.ContainerRemove(ctx, c.ID, types.ContainerRemoveOptions{})
204-
if err != nil {
205-
return err
206-
}
207-
fmt.Println(c.ID)
208-
}
209-
return nil
210-
}
211-
212192
func createService(cli *client.Client, project string, prjDir string, s compose.ServiceConfig, networks map[string]string) error {
213193
ctx := context.Background()
214194

@@ -296,28 +276,6 @@ func createService(cli *client.Client, project string, prjDir string, s compose.
296276
return nil
297277
}
298278

299-
func collectContainers(cli *client.Client, project string) (map[string][]types.Container, error) {
300-
containerList, err := cli.ContainerList(context.Background(), types.ContainerListOptions{
301-
All: true,
302-
Filters: filters.NewArgs(filters.Arg("label", internal.LabelProject+"="+project)),
303-
})
304-
if err != nil {
305-
return nil, err
306-
}
307-
containers := map[string][]types.Container{}
308-
for _, c := range containerList {
309-
service := c.Labels[internal.LabelService]
310-
l, ok := containers[service]
311-
if !ok {
312-
l = []types.Container{c}
313-
} else {
314-
l = append(l, c)
315-
}
316-
containers[service] = l
317-
}
318-
return containers, nil
319-
}
320-
321279
func doDown(project string, config *compose.Config) error {
322280
cli, err := getClient()
323281
if err != nil {
@@ -339,13 +297,13 @@ func doDown(project string, config *compose.Config) error {
339297
}
340298

341299
func removeServices(cli *client.Client, project string) error {
342-
containers, err := collectContainers(cli, project)
300+
containers, err := internal.CollectContainers(cli, project)
343301
if err != nil {
344302
return err
345303
}
346304

347305
for _, replicaList := range containers {
348-
err = removeContainers(cli, replicaList)
306+
err = internal.RemoveContainers(cli, replicaList)
349307
if err != nil {
350308
return err
351309
}

0 commit comments

Comments
 (0)