Skip to content

Commit cd303d8

Browse files
committed
Switch to another docker client library.
1 parent b2033c4 commit cd303d8

File tree

1 file changed

+89
-62
lines changed

1 file changed

+89
-62
lines changed

contrib/pg_dtm/docker/contain.go

Lines changed: 89 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,19 @@ package main
33
import (
44
"archive/tar"
55
"bufio"
6-
"encoding/json"
76
"flag"
87
"fmt"
9-
"github.com/samalba/dockerclient"
8+
"github.com/fsouza/go-dockerclient"
109
"io"
1110
"log"
1211
"os"
1312
"path"
1413
"path/filepath"
1514
"strings"
16-
// "time"
1715
)
1816

1917
var cfg struct {
20-
Docker *dockerclient.DockerClient
18+
Docker *docker.Client
2119
Paths struct {
2220
Postgres string
2321
Dtmd string
@@ -60,7 +58,7 @@ func get_labels(container_id string) map[string]string {
6058
return info.Config.Labels
6159
}
6260

63-
func get_containers(morelabels ...string) []dockerclient.Container {
61+
func get_containers(morelabels ...string) []docker.APIContainers {
6462
labellist := make([]string, len(labels) + len(morelabels))
6563
i := 0
6664
for k, v := range labels {
@@ -72,12 +70,13 @@ func get_containers(morelabels ...string) []dockerclient.Container {
7270
i += 1
7371
}
7472
filters := map[string][]string{"label": labellist}
75-
filterstr, err := json.Marshal(filters)
76-
if err != nil {
77-
log.Fatal(err)
78-
}
7973

80-
containers, err := cfg.Docker.ListContainers(true, true, string(filterstr))
74+
opts := docker.ListContainersOptions{
75+
All: true,
76+
Size: false,
77+
Filters: filters,
78+
}
79+
containers, err := cfg.Docker.ListContainers(opts)
8180
if err != nil {
8281
log.Fatal(err)
8382
}
@@ -86,25 +85,22 @@ func get_containers(morelabels ...string) []dockerclient.Container {
8685
}
8786

8887
func get_ip(container_id string) (string, bool) {
89-
info, err := cfg.Docker.InspectContainer(container_id)
88+
cont, err := cfg.Docker.InspectContainer(container_id)
9089
if err != nil {
9190
log.Fatal(err)
9291
}
9392

94-
net, err := cfg.Docker.InspectNetwork("contain")
95-
if err != nil {
96-
log.Fatal(err)
97-
}
93+
ip := cont.NetworkSettings.Networks["contain"].IPAddress
9894

99-
return net.Containers[container_id].IPv4Address, info.State.Running
95+
return ip, cont.State.Running
10096
}
10197

10298
func status() {
10399
log.Println("--- status")
104100

105101
for _, c := range get_containers() {
106102
name := c.Names[0]
107-
ip, running := get_ip(c.Id)
103+
ip, running := get_ip(c.ID)
108104
if running {
109105
fmt.Printf("%s (%s)\n", name, ip)
110106
} else {
@@ -206,23 +202,25 @@ func open_as_tar(paths map[string]string) *io.PipeReader {
206202
func build_image() {
207203
log.Println("--- build")
208204

209-
reader := open_as_tar(map[string]string{
205+
tarstream := open_as_tar(map[string]string{
210206
"Dockerfile": "Dockerfile",
211207
cfg.Paths.Postgres: "postgres",
212208
cfg.Paths.Dtmd: "dtmd",
213209
cfg.Paths.DtmBench: "dtmbench",
214210
})
215-
defer reader.Close()
211+
defer tarstream.Close()
216212

217-
config := &dockerclient.BuildImage{
218-
Context : reader,
219-
RepoName : "postgrespro",
220-
SuppressOutput : false,
221-
ForceRemove : true,
222-
Remove : true,
213+
buildreader, buildstream := io.Pipe()
214+
config := docker.BuildImageOptions{
215+
InputStream : tarstream,
216+
OutputStream : buildstream,
217+
Name : "postgrespro",
218+
SuppressOutput : false,
219+
ForceRmTmpContainer : true,
220+
RmTmpContainer : true,
223221
}
224222

225-
buildreader, err := cfg.Docker.BuildImage(config)
223+
err := cfg.Docker.BuildImage(config)
226224
if err != nil {
227225
log.Fatal(err)
228226
}
@@ -237,31 +235,48 @@ func build_image() {
237235
}
238236
}
239237

240-
func create_bulk_containers(config dockerclient.ContainerConfig, role string, num int) {
238+
func create_bulk_containers(image string, netname string, role string, num int) {
239+
clabels := make(map[string]string)
240+
for k, v := range labels {
241+
clabels[k] = v
242+
}
243+
clabels["role"] = role
244+
241245
for i := 0; i < num; i++ {
242-
config.Labels["role"] = role
243246
name := fmt.Sprintf("%s%d", role, i)
244-
config.Hostname = name
245-
id, err := cfg.Docker.CreateContainer(&config, name, nil)
247+
opts := docker.CreateContainerOptions{
248+
Name: name,
249+
Config: &docker.Config{
250+
Hostname : name,
251+
Labels : clabels,
252+
Tty : true,
253+
Image : image,
254+
},
255+
HostConfig: &docker.HostConfig{
256+
Privileged : true,
257+
NetworkMode : netname,
258+
},
259+
}
260+
c, err := cfg.Docker.CreateContainer(opts)
246261
if err != nil {
247262
log.Fatal(err)
248263
}
249264

250-
log.Printf("created container %s (%s...)\n", name, id[:8])
265+
log.Printf("created container %s (%s...)\n", name, c.ID[:8])
251266
}
252267
}
253268

254269
func create_network(name string) {
255-
netconfig := dockerclient.NetworkCreate{
270+
opts := docker.CreateNetworkOptions{
256271
Name : name,
257272
CheckDuplicate : true,
258273
Driver : "bridge",
259274
}
260-
response, err := cfg.Docker.CreateNetwork(&netconfig)
275+
net, err := cfg.Docker.CreateNetwork(opts)
261276
if err != nil {
262277
log.Fatal(err)
263278
}
264-
log.Printf("created network %s (%s...)\n", name, response.ID[:8])
279+
log.Printf("created network %s (%s...)\n", name, net.ID[:8])
265280
}
266281

267282
func remove_network(name string) {
@@ -275,38 +290,26 @@ func remove_network(name string) {
275290
func create_containers() {
276291
log.Println("--- create")
277292

293+
image := "postgrespro:latest"
278294
netname := "contain"
279295
create_network(netname)
280296

281-
clabels := make(map[string]string)
282-
for k, v := range labels {
283-
clabels[k] = v
284-
}
285-
286-
config := dockerclient.ContainerConfig{
287-
Image : "postgrespro:latest",
288-
Tty : true,
289-
Labels : clabels,
290-
}
291-
config.HostConfig.Privileged = true
292-
config.HostConfig.NetworkMode = netname
293-
294-
create_bulk_containers(config, "postgres", cfg.NodesAs.Postgres)
295-
create_bulk_containers(config, "dtmd", cfg.NodesAs.Dtmd)
296-
create_bulk_containers(config, "dtmbench", cfg.NodesAs.DtmBench)
297+
create_bulk_containers(image, netname, "postgres", cfg.NodesAs.Postgres)
298+
create_bulk_containers(image, netname, "dtmd", cfg.NodesAs.Dtmd)
299+
create_bulk_containers(image, netname, "dtmbench", cfg.NodesAs.DtmBench)
297300
}
298301

299302
func start_containers() {
300303
log.Println("--- up")
301304

302305
for _, c := range get_containers() {
303306
name := c.Names[0]
304-
ip, running := get_ip(c.Id)
307+
ip, running := get_ip(c.ID)
305308
if running {
306309
fmt.Printf("%s (%s)\n", name, ip)
307310
} else {
308311
log.Printf("starting %s\n", name)
309-
err := cfg.Docker.StartContainer(c.Id, nil)
312+
err := cfg.Docker.StartContainer(c.ID, nil)
310313
if err != nil {
311314
log.Fatal(err)
312315
}
@@ -319,10 +322,10 @@ func stop_containers() {
319322

320323
for _, c := range get_containers() {
321324
name := c.Names[0]
322-
ip, running := get_ip(c.Id)
325+
ip, running := get_ip(c.ID)
323326
if running {
324327
log.Printf("stopping %s (%s)\n", name, ip)
325-
err := cfg.Docker.StopContainer(c.Id, 5)
328+
err := cfg.Docker.StopContainer(c.ID, 5)
326329
if err != nil {
327330
log.Println(err)
328331
}
@@ -335,25 +338,42 @@ func stop_containers() {
335338
func run_in_container(container_id string, argv ...string) {
336339
log.Printf("run in %s: %v", container_id[:8], argv)
337340

338-
config := dockerclient.ExecConfig{
339-
AttachStdin : true,
341+
createopts := docker.CreateExecOptions{
342+
AttachStdin : false,
340343
AttachStdout : true,
341344
AttachStderr : true,
342345
Tty : true,
343346
Cmd : argv,
344347
Container : container_id,
345-
Detach : false,
346348
}
347349

348-
execid, err := cfg.Docker.ExecCreate(&config)
350+
exec, err := cfg.Docker.CreateExec(createopts)
349351
if err != nil {
350352
log.Fatal(err)
351353
}
352354

353-
err = cfg.Docker.ExecStart(execid, &config)
355+
reader, writer := io.Pipe()
356+
357+
startopts := docker.StartExecOptions{
358+
Detach : false,
359+
Tty : true,
360+
OutputStream : writer,
361+
ErrorStream : writer,
362+
}
363+
364+
err = cfg.Docker.StartExec(exec.ID, startopts)
354365
if err != nil {
355366
log.Fatal(err)
356367
}
368+
369+
scanner := bufio.NewScanner(reader)
370+
for scanner.Scan() {
371+
fmt.Println(scanner.Text())
372+
}
373+
374+
if err := scanner.Err(); err != nil {
375+
log.Fatal(err)
376+
}
357377
}
358378

359379
func initdb(container_id string) {
@@ -365,7 +385,7 @@ func init_data() {
365385
log.Println("--- init")
366386

367387
for _, c := range get_containers("role=postgres") {
368-
initdb(c.Id)
388+
initdb(c.ID)
369389
}
370390
}
371391

@@ -375,7 +395,14 @@ func clean_all() {
375395
for _, c := range get_containers() {
376396
name := c.Names[0]
377397
log.Printf("removing %s\n", name)
378-
err := cfg.Docker.RemoveContainer(c.Id, true, true)
398+
399+
opts := docker.RemoveContainerOptions{
400+
ID : c.ID,
401+
RemoveVolumes : true,
402+
Force : true,
403+
}
404+
405+
err := cfg.Docker.RemoveContainer(opts)
379406
if err != nil {
380407
log.Println(err)
381408
}
@@ -415,7 +442,7 @@ func init() {
415442
cfg.Actions = []string{"status"}
416443
}
417444

418-
cfg.Docker, _ = dockerclient.NewDockerClient("unix:///var/run/docker.sock", nil)
445+
cfg.Docker, _ = docker.NewClientFromEnv()
419446
dump_cfg()
420447

421448
should_exist(path.Join(cfg.Paths.Postgres, "bin", "postgres"))

0 commit comments

Comments
 (0)