diff --git a/api.go b/api.go index ff930ba..4de298e 100644 --- a/api.go +++ b/api.go @@ -8,6 +8,7 @@ import ( "github.com/play-with-docker/play-with-docker/docker" "github.com/play-with-docker/play-with-docker/event" "github.com/play-with-docker/play-with-docker/handlers" + "github.com/play-with-docker/play-with-docker/provisioner" "github.com/play-with-docker/play-with-docker/pwd" "github.com/play-with-docker/play-with-docker/scheduler" "github.com/play-with-docker/play-with-docker/scheduler/task" @@ -21,7 +22,10 @@ func main() { s := initStorage() f := initFactory(s) - core := pwd.NewPWD(f, e, s) + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(f, s), provisioner.NewDinD(f)) + sp := provisioner.NewOverlaySessionProvisioner(f) + + core := pwd.NewPWD(f, e, s, sp, ipf) sch, err := scheduler.NewScheduler(s, e, core) if err != nil { diff --git a/handlers/get_instance_images.go b/handlers/get_instance_images.go index 79de76e..db68865 100644 --- a/handlers/get_instance_images.go +++ b/handlers/get_instance_images.go @@ -3,9 +3,15 @@ package handlers import ( "encoding/json" "net/http" + + "github.com/play-with-docker/play-with-docker/config" ) func GetInstanceImages(rw http.ResponseWriter, req *http.Request) { - instanceImages := core.InstanceAllowedImages() + instanceImages := []string{ + config.GetDindImageName(), + "franela/dind:overlay2-dev", + "franela/ucp:2.4.1", + } json.NewEncoder(rw).Encode(instanceImages) } diff --git a/provisioner/dind.go b/provisioner/dind.go index 24dd978..d2f8cb0 100644 --- a/provisioner/dind.go +++ b/provisioner/dind.go @@ -36,14 +36,6 @@ func checkHostnameExists(session *types.Session, hostname string) bool { return exists } -func (d *DinD) InstanceAllowedImages() []string { - return []string{ - config.GetDindImageName(), - "franela/dind:overlay2-dev", - "franela/ucp:2.4.1", - } -} - func (d *DinD) InstanceNew(session *types.Session, conf types.InstanceConfig) (*types.Instance, error) { if conf.ImageName == "" { conf.ImageName = config.GetDindImageName() @@ -70,15 +62,8 @@ func (d *DinD) InstanceNew(session *types.Session, conf types.InstanceConfig) (* ServerCert: conf.ServerCert, ServerKey: conf.ServerKey, CACert: conf.CACert, - Privileged: false, HostFQDN: conf.Host, - } - - for _, imageName := range d.InstanceAllowedImages() { - if conf.ImageName == imageName { - opts.Privileged = true - break - } + Privileged: true, } dockerClient, err := d.factory.GetForSession(session.Id) @@ -104,8 +89,6 @@ func (d *DinD) InstanceNew(session *types.Session, conf types.InstanceConfig) (* instance.Session = session instance.ProxyHost = router.EncodeHost(session.Id, ip, router.HostOpts{}) instance.SessionHost = session.Host - // For now this condition holds through. In the future we might need a more complex logic. - instance.IsDockerHost = opts.Privileged return instance, nil } diff --git a/provisioner/factory.go b/provisioner/factory.go new file mode 100644 index 0000000..278aa1d --- /dev/null +++ b/provisioner/factory.go @@ -0,0 +1,18 @@ +package provisioner + +type instanceProvisionerFactory struct { + windows InstanceProvisionerApi + dind InstanceProvisionerApi +} + +func NewInstanceProvisionerFactory(w InstanceProvisionerApi, d InstanceProvisionerApi) InstanceProvisionerFactoryApi { + return &instanceProvisionerFactory{windows: w, dind: d} +} + +func (p *instanceProvisionerFactory) GetProvisioner(instanceType string) (InstanceProvisionerApi, error) { + if instanceType == "windows" { + return p.windows, nil + } else { + return p.dind, nil + } +} diff --git a/provisioner/overlay.go b/provisioner/overlay.go new file mode 100644 index 0000000..b2fd736 --- /dev/null +++ b/provisioner/overlay.go @@ -0,0 +1,50 @@ +package provisioner + +import ( + "fmt" + "log" + "net/url" + "strings" + + "github.com/play-with-docker/play-with-docker/config" + "github.com/play-with-docker/play-with-docker/docker" + "github.com/play-with-docker/play-with-docker/pwd/types" +) + +type overlaySessionProvisioner struct { + dockerFactory docker.FactoryApi +} + +func NewOverlaySessionProvisioner(df docker.FactoryApi) SessionProvisionerApi { + return &overlaySessionProvisioner{dockerFactory: df} +} + +func (p *overlaySessionProvisioner) SessionNew(s *types.Session) error { + dockerClient, err := p.dockerFactory.GetForSession(s.Id) + if err != nil { + // We assume we are out of capacity + return fmt.Errorf("Out of capacity") + } + u, _ := url.Parse(dockerClient.GetDaemonHost()) + if u.Host == "" { + s.Host = "localhost" + } else { + chunks := strings.Split(u.Host, ":") + s.Host = chunks[0] + } + + if err := dockerClient.CreateNetwork(s.Id); err != nil { + log.Println("ERROR NETWORKING", err) + return err + } + log.Printf("Network [%s] created for session [%s]\n", s.Id, s.Id) + + ip, err := dockerClient.ConnectNetwork(config.L2ContainerName, s.Id, s.PwdIpAddress) + if err != nil { + log.Println(err) + return err + } + s.PwdIpAddress = ip + log.Printf("Connected %s to network [%s]\n", config.PWDContainerName, s.Id) + return nil +} diff --git a/provisioner/provisioner.go b/provisioner/provisioner.go index e453175..eebee96 100644 --- a/provisioner/provisioner.go +++ b/provisioner/provisioner.go @@ -7,7 +7,7 @@ import ( "github.com/play-with-docker/play-with-docker/pwd/types" ) -type ProvisionerApi interface { +type InstanceProvisionerApi interface { InstanceNew(session *types.Session, conf types.InstanceConfig) (*types.Instance, error) InstanceDelete(session *types.Session, instance *types.Instance) error @@ -17,3 +17,11 @@ type ProvisionerApi interface { InstanceUploadFromUrl(instance *types.Instance, fileName, dest, url string) error InstanceUploadFromReader(instance *types.Instance, fileName, dest string, reader io.Reader) error } + +type SessionProvisionerApi interface { + SessionNew(session *types.Session) error +} + +type InstanceProvisionerFactoryApi interface { + GetProvisioner(instanceType string) (InstanceProvisionerApi, error) +} diff --git a/provisioner/windows.go b/provisioner/windows.go index 644fe56..469c340 100644 --- a/provisioner/windows.go +++ b/provisioner/windows.go @@ -110,8 +110,6 @@ func (d *windows) InstanceNew(session *types.Session, conf types.InstanceConfig) instance.Session = session instance.ProxyHost = router.EncodeHost(session.Id, instance.IP, router.HostOpts{}) instance.SessionHost = session.Host - // For now this condition holds through. In the future we might need a more complex logic. - instance.IsDockerHost = opts.Privileged if cli, err := d.factory.GetForInstance(instance); err != nil { if derr := d.InstanceDelete(session, instance); derr != nil { diff --git a/pwd/client_test.go b/pwd/client_test.go index 9e5294a..8017a80 100644 --- a/pwd/client_test.go +++ b/pwd/client_test.go @@ -7,6 +7,7 @@ import ( "github.com/play-with-docker/play-with-docker/config" "github.com/play-with-docker/play-with-docker/docker" "github.com/play-with-docker/play-with-docker/event" + "github.com/play-with-docker/play-with-docker/provisioner" "github.com/play-with-docker/play-with-docker/pwd/types" "github.com/play-with-docker/play-with-docker/storage" "github.com/stretchr/testify/assert" @@ -20,6 +21,9 @@ func TestClientNew(t *testing.T) { _d := &docker.Mock{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) + _g.On("NewId").Return("aaaabbbbcccc") _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) _d.On("CreateNetwork", "aaaabbbbcccc").Return(nil) @@ -32,7 +36,7 @@ func TestClientNew(t *testing.T) { var nilArgs []interface{} _e.M.On("Emit", event.SESSION_NEW, "aaaabbbbcccc", nilArgs).Return() - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) p.generator = _g session, err := p.SessionNew(time.Hour, "", "", "") @@ -56,6 +60,8 @@ func TestClientCount(t *testing.T) { _g := &mockGenerator{} _d := &docker.Mock{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) _g.On("NewId").Return("aaaabbbbcccc") _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) @@ -68,7 +74,7 @@ func TestClientCount(t *testing.T) { var nilArgs []interface{} _e.M.On("Emit", event.SESSION_NEW, "aaaabbbbcccc", nilArgs).Return() - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) p.generator = _g session, err := p.SessionNew(time.Hour, "", "", "") @@ -91,6 +97,8 @@ func TestClientResizeViewPort(t *testing.T) { _g := &mockGenerator{} _d := &docker.Mock{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) _g.On("NewId").Return("aaaabbbbcccc") _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) @@ -104,7 +112,7 @@ func TestClientResizeViewPort(t *testing.T) { _e.M.On("Emit", event.SESSION_NEW, "aaaabbbbcccc", nilArgs).Return() _e.M.On("Emit", event.INSTANCE_VIEWPORT_RESIZE, "aaaabbbbcccc", []interface{}{uint(80), uint(24)}).Return() - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) p.generator = _g session, err := p.SessionNew(time.Hour, "", "", "") diff --git a/pwd/instance.go b/pwd/instance.go index 6ae186c..2b05dde 100644 --- a/pwd/instance.go +++ b/pwd/instance.go @@ -7,7 +7,6 @@ import ( "time" "github.com/play-with-docker/play-with-docker/event" - "github.com/play-with-docker/play-with-docker/provisioner" "github.com/play-with-docker/play-with-docker/pwd/types" ) @@ -137,9 +136,3 @@ func (p *pwd) InstanceExec(instance *types.Instance, cmd []string) (int, error) } return dockerClient.Exec(instance.Name, cmd) } - -func (p *pwd) InstanceAllowedImages() []string { - defer observeAction("InstanceAllowedImages", time.Now()) - - return p.dindProvisioner.(*provisioner.DinD).InstanceAllowedImages() -} diff --git a/pwd/instance_test.go b/pwd/instance_test.go index 521f789..9da9901 100644 --- a/pwd/instance_test.go +++ b/pwd/instance_test.go @@ -8,6 +8,7 @@ import ( "github.com/play-with-docker/play-with-docker/config" "github.com/play-with-docker/play-with-docker/docker" "github.com/play-with-docker/play-with-docker/event" + "github.com/play-with-docker/play-with-docker/provisioner" "github.com/play-with-docker/play-with-docker/pwd/types" "github.com/play-with-docker/play-with-docker/router" "github.com/play-with-docker/play-with-docker/storage" @@ -21,11 +22,13 @@ func TestInstanceResizeTerminal(t *testing.T) { _s := &storage.Mock{} _g := &mockGenerator{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) _d.On("ContainerResize", "foobar", uint(24), uint(80)).Return(nil) _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) err := p.InstanceResizeTerminal(&types.Instance{Name: "foobar", SessionId: "aaaabbbbcccc"}, 24, 80) assert.Nil(t, err) @@ -43,6 +46,8 @@ func TestInstanceNew(t *testing.T) { _s := &storage.Mock{} _g := &mockGenerator{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) _g.On("NewId").Return("aaaabbbbcccc") _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) @@ -56,22 +61,21 @@ func TestInstanceNew(t *testing.T) { var nilArgs []interface{} _e.M.On("Emit", event.SESSION_NEW, "aaaabbbbcccc", nilArgs).Return() - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) p.generator = _g session, err := p.SessionNew(time.Hour, "", "", "") assert.Nil(t, err) expectedInstance := types.Instance{ - Name: fmt.Sprintf("%s_node1", session.Id[:8]), - Hostname: "node1", - IP: "10.0.0.1", - Image: config.GetDindImageName(), - IsDockerHost: true, - SessionId: session.Id, - Session: session, - SessionHost: session.Host, - ProxyHost: router.EncodeHost(session.Id, "10.0.0.1", router.HostOpts{}), + Name: fmt.Sprintf("%s_node1", session.Id[:8]), + Hostname: "node1", + IP: "10.0.0.1", + Image: config.GetDindImageName(), + SessionId: session.Id, + Session: session, + SessionHost: session.Host, + ProxyHost: router.EncodeHost(session.Id, "10.0.0.1", router.HostOpts{}), } expectedContainerOpts := docker.CreateContainerOpts{ Image: expectedInstance.Image, @@ -107,6 +111,8 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) { _s := &storage.Mock{} _g := &mockGenerator{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) _g.On("NewId").Return("aaaabbbbcccc") _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) @@ -120,7 +126,7 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) { var nilArgs []interface{} _e.M.On("Emit", event.SESSION_NEW, "aaaabbbbcccc", nilArgs).Return() - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) p.generator = _g session, err := p.SessionNew(time.Hour, "", "", "") @@ -128,15 +134,14 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) { assert.Nil(t, err) expectedInstance := types.Instance{ - Name: fmt.Sprintf("%s_node1", session.Id[:8]), - Hostname: "node1", - IP: "10.0.0.1", - Image: "redis", - SessionId: session.Id, - IsDockerHost: false, - Session: session, - SessionHost: session.Host, - ProxyHost: router.EncodeHost(session.Id, "10.0.0.1", router.HostOpts{}), + Name: fmt.Sprintf("%s_node1", session.Id[:8]), + Hostname: "node1", + IP: "10.0.0.1", + Image: "redis", + SessionId: session.Id, + Session: session, + SessionHost: session.Host, + ProxyHost: router.EncodeHost(session.Id, "10.0.0.1", router.HostOpts{}), } expectedContainerOpts := docker.CreateContainerOpts{ Image: expectedInstance.Image, @@ -147,7 +152,7 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) { ServerCert: nil, ServerKey: nil, CACert: nil, - Privileged: false, + Privileged: true, } _d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil) _s.On("InstanceCreate", "aaaabbbbcccc", mock.AnythingOfType("*types.Instance")).Return(nil) @@ -172,6 +177,9 @@ func TestInstanceNew_WithCustomHostname(t *testing.T) { _g := &mockGenerator{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) + _g.On("NewId").Return("aaaabbbbcccc") _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) _d.On("CreateNetwork", "aaaabbbbcccc").Return(nil) @@ -184,22 +192,21 @@ func TestInstanceNew_WithCustomHostname(t *testing.T) { var nilArgs []interface{} _e.M.On("Emit", event.SESSION_NEW, "aaaabbbbcccc", nilArgs).Return() - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) p.generator = _g session, err := p.SessionNew(time.Hour, "", "", "") assert.Nil(t, err) expectedInstance := types.Instance{ - Name: fmt.Sprintf("%s_redis-master", session.Id[:8]), - Hostname: "redis-master", - IP: "10.0.0.1", - Image: "redis", - IsDockerHost: false, - Session: session, - SessionHost: session.Host, - SessionId: session.Id, - ProxyHost: router.EncodeHost(session.Id, "10.0.0.1", router.HostOpts{}), + Name: fmt.Sprintf("%s_redis-master", session.Id[:8]), + Hostname: "redis-master", + IP: "10.0.0.1", + Image: "redis", + Session: session, + SessionHost: session.Host, + SessionId: session.Id, + ProxyHost: router.EncodeHost(session.Id, "10.0.0.1", router.HostOpts{}), } expectedContainerOpts := docker.CreateContainerOpts{ Image: expectedInstance.Image, @@ -210,7 +217,7 @@ func TestInstanceNew_WithCustomHostname(t *testing.T) { ServerCert: nil, ServerKey: nil, CACert: nil, - Privileged: false, + Privileged: true, } _d.On("CreateContainer", expectedContainerOpts).Return("10.0.0.1", nil) diff --git a/pwd/mock.go b/pwd/mock.go index cf6ec8b..a5cd34f 100644 --- a/pwd/mock.go +++ b/pwd/mock.go @@ -88,11 +88,6 @@ func (m *Mock) InstanceExec(instance *types.Instance, cmd []string) (int, error) return args.Int(0), args.Error(1) } -func (m *Mock) InstanceAllowedImages() []string { - args := m.Called() - return args.Get(0).([]string) -} - func (m *Mock) ClientNew(id string, session *types.Session) *types.Client { args := m.Called(id, session) return args.Get(0).(*types.Client) diff --git a/pwd/pwd.go b/pwd/pwd.go index 2e16498..814495e 100644 --- a/pwd/pwd.go +++ b/pwd/pwd.go @@ -48,13 +48,15 @@ func init() { } type pwd struct { - dockerFactory docker.FactoryApi - event event.EventApi - storage storage.StorageApi - generator IdGenerator - clientCount int32 - windowsProvisioner provisioner.ProvisionerApi - dindProvisioner provisioner.ProvisionerApi + dockerFactory docker.FactoryApi + event event.EventApi + storage storage.StorageApi + generator IdGenerator + clientCount int32 + sessionProvisioner provisioner.SessionProvisionerApi + instanceProvisionerFactory provisioner.InstanceProvisionerFactoryApi + windowsProvisioner provisioner.InstanceProvisionerApi + dindProvisioner provisioner.InstanceProvisionerApi } type IdGenerator interface { @@ -94,7 +96,6 @@ type PWDApi interface { InstanceFindByIP(sessionId, ip string) *types.Instance InstanceDelete(session *types.Session, instance *types.Instance) error InstanceExec(instance *types.Instance, cmd []string) (int, error) - InstanceAllowedImages() []string ClientNew(id string, session *types.Session) *types.Client ClientResizeViewPort(client *types.Client, cols, rows uint) @@ -102,16 +103,20 @@ type PWDApi interface { ClientCount() int } -func NewPWD(f docker.FactoryApi, e event.EventApi, s storage.StorageApi) *pwd { - return &pwd{dockerFactory: f, event: e, storage: s, generator: xidGenerator{}, windowsProvisioner: provisioner.NewWindowsASG(f, s), dindProvisioner: provisioner.NewDinD(f)} +func NewPWD(f docker.FactoryApi, e event.EventApi, s storage.StorageApi, sp provisioner.SessionProvisionerApi, ipf provisioner.InstanceProvisionerFactoryApi) *pwd { + // windowsProvisioner: provisioner.NewWindowsASG(f, s), dindProvisioner: provisioner.NewDinD(f) + return &pwd{dockerFactory: f, event: e, storage: s, generator: xidGenerator{}, sessionProvisioner: sp, instanceProvisionerFactory: ipf} } -func (p *pwd) getProvisioner(t string) (provisioner.ProvisionerApi, error) { - if t == "windows" { - return p.windowsProvisioner, nil - } else { - return p.dindProvisioner, nil - } +func (p *pwd) getProvisioner(t string) (provisioner.InstanceProvisionerApi, error) { + return p.instanceProvisionerFactory.GetProvisioner(t) + /* + if t == "windows" { + return p.windowsProvisioner, nil + } else { + return p.dindProvisioner, nil + } + */ } func (p *pwd) setGauges() { diff --git a/pwd/session.go b/pwd/session.go index 9e91493..dd75907 100644 --- a/pwd/session.go +++ b/pwd/session.go @@ -5,7 +5,6 @@ import ( "fmt" "log" "math" - "net/url" "path" "path/filepath" "strings" @@ -65,33 +64,10 @@ func (p *pwd) SessionNew(duration time.Duration, stack, stackName, imageName str s.ImageName = imageName log.Printf("NewSession id=[%s]\n", s.Id) - - dockerClient, err := p.dockerFactory.GetForSession(s.Id) - if err != nil { - // We assume we are out of capacity - return nil, fmt.Errorf("Out of capacity") - } - u, _ := url.Parse(dockerClient.GetDaemonHost()) - if u.Host == "" { - s.Host = "localhost" - } else { - chunks := strings.Split(u.Host, ":") - s.Host = chunks[0] - } - - if err := dockerClient.CreateNetwork(s.Id); err != nil { - log.Println("ERROR NETWORKING", err) - return nil, err - } - log.Printf("Network [%s] created for session [%s]\n", s.Id, s.Id) - - ip, err := dockerClient.ConnectNetwork(config.L2ContainerName, s.Id, s.PwdIpAddress) - if err != nil { + if err := p.sessionProvisioner.SessionNew(s); err != nil { log.Println(err) return nil, err } - s.PwdIpAddress = ip - log.Printf("Connected %s to network [%s]\n", config.PWDContainerName, s.Id) if err := p.storage.SessionPut(s); err != nil { log.Println(err) diff --git a/pwd/session_test.go b/pwd/session_test.go index d310676..686ae46 100644 --- a/pwd/session_test.go +++ b/pwd/session_test.go @@ -7,6 +7,7 @@ import ( "github.com/play-with-docker/play-with-docker/config" "github.com/play-with-docker/play-with-docker/docker" "github.com/play-with-docker/play-with-docker/event" + "github.com/play-with-docker/play-with-docker/provisioner" "github.com/play-with-docker/play-with-docker/storage" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -21,6 +22,9 @@ func TestSessionNew(t *testing.T) { _g := &mockGenerator{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) + _g.On("NewId").Return("aaaabbbbcccc") _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) _d.On("CreateNetwork", "aaaabbbbcccc").Return(nil) @@ -33,7 +37,7 @@ func TestSessionNew(t *testing.T) { var nilArgs []interface{} _e.M.On("Emit", event.SESSION_NEW, "aaaabbbbcccc", nilArgs).Return() - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) p.generator = _g before := time.Now() @@ -72,6 +76,8 @@ func TestSessionSetup(t *testing.T) { _s := &storage.Mock{} _g := &mockGenerator{} _e := &event.Mock{} + ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f)) + sp := provisioner.NewOverlaySessionProvisioner(_f) _g.On("NewId").Return("aaaabbbbcccc") _f.On("GetForSession", "aaaabbbbcccc").Return(_d, nil) @@ -109,7 +115,7 @@ func TestSessionSetup(t *testing.T) { var nilArgs []interface{} _e.M.On("Emit", event.SESSION_NEW, "aaaabbbbcccc", nilArgs).Return() - p := NewPWD(_f, _e, _s) + p := NewPWD(_f, _e, _s, sp, ipf) p.generator = _g s, e := p.SessionNew(time.Hour, "", "", "") assert.Nil(t, e) diff --git a/pwd/types/instance.go b/pwd/types/instance.go index fc6eb8b..a42b136 100644 --- a/pwd/types/instance.go +++ b/pwd/types/instance.go @@ -3,23 +3,22 @@ package types import "context" type Instance struct { - Image string `json:"image" bson:"image"` - Name string `json:"name" bson:"name"` - Hostname string `json:"hostname" bson:"hostname"` - IP string `json:"ip" bson:"ip"` - ServerCert []byte `json:"server_cert" bson:"server_cert"` - ServerKey []byte `json:"server_key" bson:"server_key"` - CACert []byte `json:"ca_cert" bson:"ca_cert"` - Cert []byte `json:"cert" bson:"cert"` - Key []byte `json:"key" bson:"key"` - IsDockerHost bool `json:"is_docker_host" bson:"is_docker_host"` - SessionId string `json:"session_id" bson:"session_id"` - ProxyHost string `json:"proxy_host" bson:"proxy_host"` - SessionHost string `json:"session_host" bson:"session_host"` - Type string `json:"type" bson:"type"` - Session *Session `json:"-" bson:"-"` - ctx context.Context `json:"-" bson:"-"` - WindowsId string `json:"-" bson:"windows_id"` + Image string `json:"image" bson:"image"` + Name string `json:"name" bson:"name"` + Hostname string `json:"hostname" bson:"hostname"` + IP string `json:"ip" bson:"ip"` + ServerCert []byte `json:"server_cert" bson:"server_cert"` + ServerKey []byte `json:"server_key" bson:"server_key"` + CACert []byte `json:"ca_cert" bson:"ca_cert"` + Cert []byte `json:"cert" bson:"cert"` + Key []byte `json:"key" bson:"key"` + SessionId string `json:"session_id" bson:"session_id"` + ProxyHost string `json:"proxy_host" bson:"proxy_host"` + SessionHost string `json:"session_host" bson:"session_host"` + Type string `json:"type" bson:"type"` + Session *Session `json:"-" bson:"-"` + ctx context.Context `json:"-" bson:"-"` + WindowsId string `json:"-" bson:"windows_id"` } type WindowsInstance struct {