github.com/Cloud-Foundations/Dominator@v0.3.4/lib/slavedriver/smallstack/api.go (about) 1 package smallstack 2 3 import ( 4 "time" 5 6 "github.com/Cloud-Foundations/Dominator/lib/log" 7 "github.com/Cloud-Foundations/Dominator/lib/slavedriver" 8 "github.com/Cloud-Foundations/Dominator/lib/srpc" 9 hyper_proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 10 ) 11 12 type closeRequestMessage struct { 13 errorChannel chan<- error 14 } 15 16 type SlaveTrader struct { 17 closeChannel chan<- closeRequestMessage 18 hypervisorChannel <-chan *srpc.Client 19 logger log.DebugLogger 20 options SlaveTraderOptions 21 } 22 23 type SlaveTraderOptions struct { 24 CreateRequest hyper_proto.CreateVmRequest 25 CreateTimeout time.Duration // Default: 5 minutes. 26 DestroyTimeout time.Duration // Default: 1 minute. 27 HypervisorAddress string // Default: local Hypervisor. 28 } 29 30 func NewSlaveTrader(createRequest hyper_proto.CreateVmRequest, 31 logger log.DebugLogger) (*SlaveTrader, error) { 32 return newSlaveTrader(SlaveTraderOptions{CreateRequest: createRequest}, 33 logger) 34 } 35 36 func NewSlaveTraderWithOptions(options SlaveTraderOptions, 37 logger log.DebugLogger) (*SlaveTrader, error) { 38 return newSlaveTrader(options, logger) 39 } 40 41 func (trader *SlaveTrader) Close() error { 42 return trader.close() 43 } 44 45 func (trader *SlaveTrader) CreateSlave() (slavedriver.SlaveInfo, error) { 46 return trader.createSlave(nil) 47 } 48 49 func (trader *SlaveTrader) CreateSlaveWithAcknowledger( 50 acknowledgeChannel <-chan chan<- error) (slavedriver.SlaveInfo, error) { 51 return trader.createSlave(acknowledgeChannel) 52 } 53 54 func (trader *SlaveTrader) DestroySlave(identifier string) error { 55 return trader.destroySlave(identifier) 56 }