From a7d76f2720cb6a17e9d5a2ad7ff5bc163f89f364 Mon Sep 17 00:00:00 2001 From: Marcos Lilljedahl Date: Mon, 21 Nov 2016 21:49:23 -0300 Subject: [PATCH 1/2] Enumerate nodes to improve cluster configuration --- services/docker.go | 18 +++++++++++++----- services/instance.go | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/services/docker.go b/services/docker.go index 803793a..2a1c95a 100644 --- a/services/docker.go +++ b/services/docker.go @@ -1,12 +1,14 @@ package services import ( + "fmt" "io" "log" "strings" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/client" "golang.org/x/net/context" ) @@ -77,16 +79,22 @@ func ResizeConnection(name string, cols, rows uint) error { return c.ContainerResize(context.Background(), name, types.ResizeOptions{Height: rows, Width: cols}) } -func CreateInstance(net string, dindImage string) (*Instance, error) { +func CreateInstance(session *Session, dindImage string) (*Instance, error) { - h := &container.HostConfig{NetworkMode: container.NetworkMode(net), Privileged: true} + h := &container.HostConfig{NetworkMode: container.NetworkMode(session.Id), Privileged: true} h.Resources.PidsLimit = int64(500) h.Resources.Memory = 4092 * Megabyte t := true h.Resources.OomKillDisable = &t - conf := &container.Config{Image: dindImage, Tty: true, OpenStdin: true, AttachStdin: true, AttachStdout: true, AttachStderr: true} - container, err := c.ContainerCreate(context.Background(), conf, h, nil, "") + nodeName := fmt.Sprintf("node%d", len(session.Instances)+1) + conf := &container.Config{Hostname: nodeName, Image: dindImage, Tty: true, OpenStdin: true, AttachStdin: true, AttachStdout: true, AttachStderr: true} + networkConf := &network.NetworkingConfig{ + map[string]*network.EndpointSettings{ + session.Id: &network.EndpointSettings{Aliases: []string{nodeName}}, + }, + } + container, err := c.ContainerCreate(context.Background(), conf, h, networkConf, "") if err != nil { return nil, err @@ -102,7 +110,7 @@ func CreateInstance(net string, dindImage string) (*Instance, error) { return nil, err } - return &Instance{Name: strings.Replace(cinfo.Name, "/", "", 1), Hostname: cinfo.Config.Hostname, IP: cinfo.NetworkSettings.Networks[net].IPAddress}, nil + return &Instance{Name: strings.Replace(cinfo.Name, "/", "", 1), Hostname: cinfo.Config.Hostname, IP: cinfo.NetworkSettings.Networks[session.Id].IPAddress}, nil } func DeleteContainer(id string) error { diff --git a/services/instance.go b/services/instance.go index 4097832..f91311f 100644 --- a/services/instance.go +++ b/services/instance.go @@ -54,7 +54,7 @@ func getDindImageName() string { func NewInstance(session *Session) (*Instance, error) { log.Printf("NewInstance - using image: [%s]\n", dindImage) - instance, err := CreateInstance(session.Id, dindImage) + instance, err := CreateInstance(session, dindImage) if err != nil { return nil, err } From 8f5f9f2c9075b4e36dda68e38c4b19496ec43efa Mon Sep 17 00:00:00 2001 From: Marcos Lilljedahl Date: Mon, 21 Nov 2016 22:01:00 -0300 Subject: [PATCH 2/2] Add container names to make attachable names work --- services/docker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/docker.go b/services/docker.go index 2a1c95a..8232899 100644 --- a/services/docker.go +++ b/services/docker.go @@ -94,7 +94,7 @@ func CreateInstance(session *Session, dindImage string) (*Instance, error) { session.Id: &network.EndpointSettings{Aliases: []string{nodeName}}, }, } - container, err := c.ContainerCreate(context.Background(), conf, h, networkConf, "") + container, err := c.ContainerCreate(context.Background(), conf, h, networkConf, fmt.Sprintf("%s_%s", session.Id[:4], nodeName)) if err != nil { return nil, err