Make networks a list so it can be decided by the provisioner to which to
connect to
This commit is contained in:
@@ -218,7 +218,7 @@ type CreateContainerOpts struct {
|
||||
Privileged bool
|
||||
HostFQDN string
|
||||
Labels map[string]string
|
||||
AdditionalNetworks []string
|
||||
Networks map[string]string
|
||||
}
|
||||
|
||||
func (d *docker) CreateContainer(opts CreateContainerOpts) (string, error) {
|
||||
@@ -284,10 +284,15 @@ func (d *docker) CreateContainer(opts CreateContainerOpts) (string, error) {
|
||||
Env: env,
|
||||
Labels: opts.Labels,
|
||||
}
|
||||
networkConf := &network.NetworkingConfig{
|
||||
map[string]*network.EndpointSettings{
|
||||
opts.SessionId: &network.EndpointSettings{Aliases: []string{opts.Hostname}},
|
||||
},
|
||||
|
||||
networkConf := &network.NetworkingConfig{}
|
||||
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)
|
||||
@@ -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 {
|
||||
return "", err
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ func (d *DinD) InstanceNew(session *types.Session, conf types.InstanceConfig) (*
|
||||
CACert: conf.CACert,
|
||||
HostFQDN: conf.Host,
|
||||
Privileged: true,
|
||||
Networks: map[string]string{session.Id: conf.Hostname},
|
||||
}
|
||||
|
||||
dockerClient, err := d.factory.GetForSession(session.Id)
|
||||
|
||||
@@ -82,6 +82,7 @@ func (d *windows) InstanceNew(session *types.Session, conf types.InstanceConfig)
|
||||
CACert: conf.CACert,
|
||||
Privileged: false,
|
||||
HostFQDN: conf.Host,
|
||||
Networks: map[string]string{session.Id: conf.Hostname},
|
||||
}
|
||||
|
||||
dockerClient, err := d.factory.GetForSession(session.Id)
|
||||
|
||||
@@ -89,6 +89,7 @@ func TestInstanceNew(t *testing.T) {
|
||||
CACert: nil,
|
||||
Privileged: true,
|
||||
HostFQDN: "something.play-with-docker.com",
|
||||
Networks: map[string]string{session.Id: expectedInstance.Hostname},
|
||||
}
|
||||
_d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil)
|
||||
_s.On("InstanceCreate", "aaaabbbbcccc", mock.AnythingOfType("*types.Instance")).Return(nil)
|
||||
@@ -154,6 +155,7 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) {
|
||||
ServerKey: nil,
|
||||
CACert: nil,
|
||||
Privileged: true,
|
||||
Networks: map[string]string{session.Id: expectedInstance.Hostname},
|
||||
}
|
||||
_d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil)
|
||||
_s.On("InstanceCreate", "aaaabbbbcccc", mock.AnythingOfType("*types.Instance")).Return(nil)
|
||||
@@ -219,6 +221,7 @@ func TestInstanceNew_WithCustomHostname(t *testing.T) {
|
||||
ServerKey: nil,
|
||||
CACert: nil,
|
||||
Privileged: true,
|
||||
Networks: map[string]string{session.Id: expectedInstance.Hostname},
|
||||
}
|
||||
|
||||
_d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil)
|
||||
|
||||
@@ -90,27 +90,27 @@ func TestSessionSetup(t *testing.T) {
|
||||
_s.On("SessionCount").Return(1, 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)
|
||||
_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()
|
||||
|
||||
_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)
|
||||
_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()
|
||||
|
||||
_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)
|
||||
_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()
|
||||
|
||||
_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)
|
||||
_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()
|
||||
|
||||
_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()
|
||||
|
||||
var nilArgs []interface{}
|
||||
|
||||
Reference in New Issue
Block a user