From aa6efe62094fd7e6329d9a5f84770b4aafef249a Mon Sep 17 00:00:00 2001 From: Rawda Fawzy <47260239+rawdaGastan@users.noreply.github.com> Date: Mon, 25 Sep 2023 12:30:41 +0300 Subject: [PATCH] validate cpus according to actual number of node cpus (#2057) * validate cpus according to actual number of nodes cpus * fix typos * rename n to cpus --- pkg/gridtypes/zos/zmachine.go | 2 +- pkg/vm.go | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pkg/gridtypes/zos/zmachine.go b/pkg/gridtypes/zos/zmachine.go index 793a289cf..2f755c622 100644 --- a/pkg/gridtypes/zos/zmachine.go +++ b/pkg/gridtypes/zos/zmachine.go @@ -184,7 +184,7 @@ func (v ZMachine) Valid(getter gridtypes.WorkloadGetter) error { } } if v.ComputeCapacity.CPU == 0 { - return fmt.Errorf("cpu capcity can't be 0") + return fmt.Errorf("cpu capacity can't be 0") } if v.ComputeCapacity.Memory < 250*gridtypes.Megabyte { return fmt.Errorf("mem capacity can't be less that 250M") diff --git a/pkg/vm.go b/pkg/vm.go index 655085021..b9ef42aa6 100644 --- a/pkg/vm.go +++ b/pkg/vm.go @@ -6,6 +6,7 @@ import ( "net" "path/filepath" + "github.com/shirou/gopsutil/cpu" "github.com/threefoldtech/zos/pkg/gridtypes" "github.com/threefoldtech/zos/pkg/gridtypes/zos" ) @@ -126,7 +127,7 @@ type VM struct { Network VMNetworkInfo // KernelImage path to uncompressed linux kernel ELF KernelImage string - // InitrdImage (optiona) path to initrd disk + // InitrdImage (optional) path to initrd disk InitrdImage string // KernelArgs to override the default kernel arguments. (default: "ro console=ttyS0 noapic reboot=k panic=1 pci=off nomodules") KernelArgs KernelArgs @@ -175,8 +176,16 @@ func (vm *VM) Validate() error { return fmt.Errorf("invalid memory must not be less than 250M") } - if vm.CPU == 0 || vm.CPU > 32 { - return fmt.Errorf("invalid cpu must be between 1 and 32") + cpus, err := cpu.Counts(true) + if err != nil { + return fmt.Errorf("failed to get count of cpus") + } + + if vm.CPU == 0 || vm.CPU > uint8(cpus) { + if cpus == 1 { + return fmt.Errorf("invalid cpu must be 1") + } + return fmt.Errorf("invalid cpu must be between 1 and %d", cpus) } for _, shared := range vm.Shared { @@ -234,7 +243,7 @@ func (n *NetMetric) Nu() float64 { } // MachineMetric is a container for metrics from multiple networks -// currently only groped as private (wiregaurd + yggdrasil), and public (public Ips) +// currently only grouped as private (wireguard + yggdrasil), and public (public Ips) type MachineMetric struct { Private NetMetric Public NetMetric