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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy