github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/imaginator/slaveDriver.go (about) 1 // +build linux 2 3 package main 4 5 import ( 6 "path/filepath" 7 "time" 8 9 "github.com/Cloud-Foundations/Dominator/lib/json" 10 "github.com/Cloud-Foundations/Dominator/lib/log" 11 "github.com/Cloud-Foundations/Dominator/lib/slavedriver" 12 "github.com/Cloud-Foundations/Dominator/lib/slavedriver/smallstack" 13 "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 14 ) 15 16 type slaveDriverConfiguration struct { 17 MaximumIdleSlaves uint 18 MinimumIdleSlaves uint 19 ImageIdentifier string 20 MemoryInMiB uint64 21 MilliCPUs uint 22 } 23 24 func createSlaveDriver(logger log.DebugLogger) ( 25 *slavedriver.SlaveDriver, error) { 26 if *slaveDriverConfigurationFile == "" { 27 return nil, nil 28 } 29 var configuration slaveDriverConfiguration 30 err := json.ReadFromFile(*slaveDriverConfigurationFile, &configuration) 31 if err != nil { 32 return nil, err 33 } 34 slaveTrader, err := smallstack.NewSlaveTrader(hypervisor.CreateVmRequest{ 35 DhcpTimeout: time.Minute, 36 MinimumFreeBytes: 256 << 20, 37 SkipBootloader: true, 38 VmInfo: hypervisor.VmInfo{ 39 ImageName: configuration.ImageIdentifier, 40 MemoryInMiB: configuration.MemoryInMiB, 41 MilliCPUs: configuration.MilliCPUs, 42 }, 43 }, logger) 44 if err != nil { 45 return nil, err 46 } 47 slaveDriver, err := slavedriver.NewSlaveDriver( 48 slavedriver.SlaveDriverOptions{ 49 DatabaseFilename: filepath.Join(*stateDir, "build-slaves.json"), 50 MaximumIdleSlaves: configuration.MaximumIdleSlaves, 51 MinimumIdleSlaves: configuration.MinimumIdleSlaves, 52 PortNumber: *portNum, 53 Purpose: "building", 54 }, 55 slaveTrader, logger) 56 if err != nil { 57 return nil, err 58 } 59 return slaveDriver, nil 60 }