Add SessionProvisioner and InstanceProvisionerFactory
Remove AllowedImages and IsDockerHost as it is not really being used for anything useful
This commit is contained in:
@@ -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, "", "", "")
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
37
pwd/pwd.go
37
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() {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user