From b496f3f71d0a24b12818a588e74d25dc6ca987b7 Mon Sep 17 00:00:00 2001 From: Manohar Castelino Date: Thu, 2 May 2019 01:19:24 +0000 Subject: [PATCH] firecracker: Add support for default VM configuration Kata support specifing the default VM configuration via configuration.toml. This allows the system or cluster admin to choose the default (i.e minimum) size of the VM. Add support in kata to respect the VM configuration for firecracker. Also refactor some code to make error handling uniform. Fixes: #1594 Signed-off-by: Manohar Castelino --- virtcontainers/fc.go | 46 ++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/virtcontainers/fc.go b/virtcontainers/fc.go index 52f3fa2f60..34e49b16f9 100644 --- a/virtcontainers/fc.go +++ b/virtcontainers/fc.go @@ -281,11 +281,7 @@ func (fc *firecracker) fcSetBootSource(path, params string) error { bootSrcParams.SetBody(src) _, err := fc.client().Operations.PutGuestBootSource(bootSrcParams) - if err != nil { - return err - } - - return nil + return err } func (fc *firecracker) fcSetVMRootfs(path string) error { @@ -308,11 +304,25 @@ func (fc *firecracker) fcSetVMRootfs(path string) error { } driveParams.SetBody(drive) _, err := fc.client().Operations.PutGuestDriveByID(driveParams) - if err != nil { - return err - } + return err +} - return nil +func (fc *firecracker) fcSetVMBaseConfig(mem int64, vcpus int64, htEnabled bool) error { + span, _ := fc.trace("fcSetVMBaseConfig") + defer span.Finish() + fc.Logger().WithFields(logrus.Fields{"mem": mem, + "vcpus": vcpus, + "htEnabled": htEnabled}).Debug("fcSetVMBaseConfig") + + param := ops.NewPutMachineConfigurationParams() + cfg := &models.MachineConfiguration{ + HtEnabled: htEnabled, + MemSizeMib: mem, + VcpuCount: vcpus, + } + param.SetBody(cfg) + _, err := fc.client().Operations.PutMachineConfiguration(param) + return err } func (fc *firecracker) fcStartVM() error { @@ -351,6 +361,12 @@ func (fc *firecracker) startSandbox(timeout int) error { return err } + if err := fc.fcSetVMBaseConfig(int64(fc.config.MemorySize), + int64(fc.config.NumVCPUs), + false); err != nil { + return err + } + kernelPath, err := fc.config.KernelAssetPath() if err != nil { return err @@ -528,11 +544,7 @@ func (fc *firecracker) fcAddNetDevice(endpoint Endpoint) error { cfg.SetBody(ifaceCfg) cfg.SetIfaceID(ifaceID) _, err := fc.client().Operations.PutGuestNetworkInterfaceByID(cfg) - if err != nil { - return err - } - - return nil + return err } func (fc *firecracker) fcAddBlockDrive(drive config.BlockDrive) error { @@ -552,11 +564,7 @@ func (fc *firecracker) fcAddBlockDrive(drive config.BlockDrive) error { } driveParams.SetBody(driveFc) _, err := fc.client().Operations.PutGuestDriveByID(driveParams) - if err != nil { - return err - } - - return nil + return err } // Firecracker supports replacing the host drive used once the VM has booted up