Make networks a list so it can be decided by the provisioner to which to
connect to
This commit is contained in:
@@ -206,19 +206,19 @@ func (d *docker) DeleteContainer(id string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CreateContainerOpts struct {
|
type CreateContainerOpts struct {
|
||||||
Image string
|
Image string
|
||||||
WindowsEndpoint string
|
WindowsEndpoint string
|
||||||
SessionId string
|
SessionId string
|
||||||
PwdIpAddress string
|
PwdIpAddress string
|
||||||
ContainerName string
|
ContainerName string
|
||||||
Hostname string
|
Hostname string
|
||||||
ServerCert []byte
|
ServerCert []byte
|
||||||
ServerKey []byte
|
ServerKey []byte
|
||||||
CACert []byte
|
CACert []byte
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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{}
|
||||||
|
|||||||
Reference in New Issue
Block a user