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  }