Make networks a list so it can be decided by the provisioner to which to

connect to
This commit is contained in:
Jonathan Leibiusky @xetorthio
2017-08-25 13:39:17 -03:00
parent 3c6d87cb14
commit 6941b8b69a
5 changed files with 32 additions and 29 deletions

View File

@@ -218,7 +218,7 @@ type CreateContainerOpts struct {
Privileged bool Privileged bool
HostFQDN string HostFQDN string
Labels map[string]string Labels map[string]string
AdditionalNetworks []string Networks map[string]string
} }
func (d *docker) CreateContainer(opts CreateContainerOpts) (string, error) { func (d *docker) CreateContainer(opts CreateContainerOpts) (string, error) {
@@ -284,10 +284,15 @@ func (d *docker) CreateContainer(opts CreateContainerOpts) (string, error) {
Env: env, Env: env,
Labels: opts.Labels, Labels: opts.Labels,
} }
networkConf := &network.NetworkingConfig{
map[string]*network.EndpointSettings{ networkConf := &network.NetworkingConfig{}
opts.SessionId: &network.EndpointSettings{Aliases: []string{opts.Hostname}}, ec := map[string]*network.EndpointSettings{}
}, for netId, hostname := range opts.Networks {
es := &network.EndpointSettings{}
if hostname != "" {
es.Aliases = []string{hostname}
}
ec[netId] = es
} }
container, err := d.c.ContainerCreate(context.Background(), cf, h, networkConf, opts.ContainerName) container, err := d.c.ContainerCreate(context.Background(), cf, h, networkConf, opts.ContainerName)
@@ -307,13 +312,6 @@ func (d *docker) CreateContainer(opts CreateContainerOpts) (string, error) {
} }
} }
for _, netId := range opts.AdditionalNetworks {
set := &network.EndpointSettings{}
if err := d.c.NetworkConnect(context.Background(), netId, container.ID, set); err != nil {
return "", err
}
}
if err := d.copyIfSet(opts.ServerCert, "cert.pem", containerCertDir, opts.ContainerName); err != nil { if err := d.copyIfSet(opts.ServerCert, "cert.pem", containerCertDir, opts.ContainerName); err != nil {
return "", err return "", err
} }

View File

@@ -64,6 +64,7 @@ func (d *DinD) InstanceNew(session *types.Session, conf types.InstanceConfig) (*
CACert: conf.CACert, CACert: conf.CACert,
HostFQDN: conf.Host, HostFQDN: conf.Host,
Privileged: true, Privileged: true,
Networks: map[string]string{session.Id: conf.Hostname},
} }
dockerClient, err := d.factory.GetForSession(session.Id) dockerClient, err := d.factory.GetForSession(session.Id)

View File

@@ -82,6 +82,7 @@ func (d *windows) InstanceNew(session *types.Session, conf types.InstanceConfig)
CACert: conf.CACert, CACert: conf.CACert,
Privileged: false, Privileged: false,
HostFQDN: conf.Host, HostFQDN: conf.Host,
Networks: map[string]string{session.Id: conf.Hostname},
} }
dockerClient, err := d.factory.GetForSession(session.Id) dockerClient, err := d.factory.GetForSession(session.Id)

View File

@@ -89,6 +89,7 @@ func TestInstanceNew(t *testing.T) {
CACert: nil, CACert: nil,
Privileged: true, Privileged: true,
HostFQDN: "something.play-with-docker.com", HostFQDN: "something.play-with-docker.com",
Networks: map[string]string{session.Id: expectedInstance.Hostname},
} }
_d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil) _d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil)
_s.On("InstanceCreate", "aaaabbbbcccc", mock.AnythingOfType("*types.Instance")).Return(nil) _s.On("InstanceCreate", "aaaabbbbcccc", mock.AnythingOfType("*types.Instance")).Return(nil)
@@ -154,6 +155,7 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) {
ServerKey: nil, ServerKey: nil,
CACert: nil, CACert: nil,
Privileged: true, Privileged: true,
Networks: map[string]string{session.Id: expectedInstance.Hostname},
} }
_d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil) _d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil)
_s.On("InstanceCreate", "aaaabbbbcccc", mock.AnythingOfType("*types.Instance")).Return(nil) _s.On("InstanceCreate", "aaaabbbbcccc", mock.AnythingOfType("*types.Instance")).Return(nil)
@@ -219,6 +221,7 @@ func TestInstanceNew_WithCustomHostname(t *testing.T) {
ServerKey: nil, ServerKey: nil,
CACert: nil, CACert: nil,
Privileged: true, Privileged: true,
Networks: map[string]string{session.Id: expectedInstance.Hostname},
} }
_d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil) _d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil)

View File

@@ -90,27 +90,27 @@ func TestSessionSetup(t *testing.T) {
_s.On("SessionCount").Return(1, nil) _s.On("SessionCount").Return(1, nil)
_s.On("InstanceCount").Return(0, nil) _s.On("InstanceCount").Return(0, nil)
_d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_manager1", Hostname: "manager1", Privileged: true, HostFQDN: "localhost"}).Return("10.0.0.2", nil) _d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_manager1", Hostname: "manager1", Privileged: true, HostFQDN: "localhost", Networks: map[string]string{"aaaabbbbcccc": "manager1"}}).Return("10.0.0.2", nil)
_f.On("GetForInstance", mock.AnythingOfType("*types.Instance")).Return(_d, nil) _f.On("GetForInstance", mock.AnythingOfType("*types.Instance")).Return(_d, nil)
_d.On("SwarmInit").Return(&docker.SwarmTokens{Manager: "managerToken", Worker: "workerToken"}, nil) _d.On("SwarmInit").Return(&docker.SwarmTokens{Manager: "managerToken", Worker: "workerToken"}, nil)
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_manager1", "10.0.0.2", "manager1", "ip10-0-0-2-aaaabbbbcccc"}).Return() _e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_manager1", "10.0.0.2", "manager1", "ip10-0-0-2-aaaabbbbcccc"}).Return()
_d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_manager2", Hostname: "manager2", Privileged: true}).Return("10.0.0.3", nil) _d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_manager2", Hostname: "manager2", Privileged: true, Networks: map[string]string{"aaaabbbbcccc": "manager2"}}).Return("10.0.0.3", nil)
_f.On("GetForInstance", mock.AnythingOfType("*types.Instance")).Return(_d, nil) _f.On("GetForInstance", mock.AnythingOfType("*types.Instance")).Return(_d, nil)
_d.On("SwarmJoin", "10.0.0.2:2377", "managerToken").Return(nil) _d.On("SwarmJoin", "10.0.0.2:2377", "managerToken").Return(nil)
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_manager2", "10.0.0.3", "manager2", "ip10-0-0-3-aaaabbbbcccc"}).Return() _e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_manager2", "10.0.0.3", "manager2", "ip10-0-0-3-aaaabbbbcccc"}).Return()
_d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind:overlay2-dev", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_manager3", Hostname: "manager3", Privileged: true}).Return("10.0.0.4", nil) _d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind:overlay2-dev", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_manager3", Hostname: "manager3", Privileged: true, Networks: map[string]string{"aaaabbbbcccc": "manager3"}}).Return("10.0.0.4", nil)
_f.On("GetForInstance", mock.AnythingOfType("*types.Instance")).Return(_d, nil) _f.On("GetForInstance", mock.AnythingOfType("*types.Instance")).Return(_d, nil)
_d.On("SwarmJoin", "10.0.0.2:2377", "managerToken").Return(nil) _d.On("SwarmJoin", "10.0.0.2:2377", "managerToken").Return(nil)
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_manager3", "10.0.0.4", "manager3", "ip10-0-0-4-aaaabbbbcccc"}).Return() _e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_manager3", "10.0.0.4", "manager3", "ip10-0-0-4-aaaabbbbcccc"}).Return()
_d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_worker1", Hostname: "worker1", Privileged: true}).Return("10.0.0.5", nil) _d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_worker1", Hostname: "worker1", Privileged: true, Networks: map[string]string{"aaaabbbbcccc": "worker1"}}).Return("10.0.0.5", nil)
_f.On("GetForInstance", mock.AnythingOfType("*types.Instance")).Return(_d, nil) _f.On("GetForInstance", mock.AnythingOfType("*types.Instance")).Return(_d, nil)
_d.On("SwarmJoin", "10.0.0.2:2377", "workerToken").Return(nil) _d.On("SwarmJoin", "10.0.0.2:2377", "workerToken").Return(nil)
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_worker1", "10.0.0.5", "worker1", "ip10-0-0-5-aaaabbbbcccc"}).Return() _e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_worker1", "10.0.0.5", "worker1", "ip10-0-0-5-aaaabbbbcccc"}).Return()
_d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_other", Hostname: "other", Privileged: true}).Return("10.0.0.6", nil) _d.On("CreateContainer", docker.CreateContainerOpts{Image: "franela/dind", SessionId: "aaaabbbbcccc", PwdIpAddress: "10.0.0.1", ContainerName: "aaaabbbb_other", Hostname: "other", Privileged: true, Networks: map[string]string{"aaaabbbbcccc": "other"}}).Return("10.0.0.6", nil)
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_other", "10.0.0.6", "other", "ip10-0-0-6-aaaabbbbcccc"}).Return() _e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_other", "10.0.0.6", "other", "ip10-0-0-6-aaaabbbbcccc"}).Return()
var nilArgs []interface{} var nilArgs []interface{}