From 63bb93a89b5c32534fa4796ba04eb364f180ef18 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Thu, 19 May 2022 01:21:54 +0800 Subject: [PATCH] fix(region): GPU device type update supported (#14271) --- cmd/climc/shell/compute/isolatedevices.go | 1 + pkg/apis/compute/isolated_device.go | 1 + pkg/compute/models/isolated_devices.go | 10 +++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/cmd/climc/shell/compute/isolatedevices.go b/cmd/climc/shell/compute/isolatedevices.go index 2be8a1b91f..8071276eea 100644 --- a/cmd/climc/shell/compute/isolatedevices.go +++ b/cmd/climc/shell/compute/isolatedevices.go @@ -94,6 +94,7 @@ func init() { ReservedCpu *int `help:"reserved cpu for isolated device"` ReservedMem *int `help:"reserved mem for isolated device"` ReservedStorage *int `help:"reserved storage for isolated device"` + DevType string `help:"Device type" choices:"GPU-HPC|GPU-VGA"` } R(&DeviceUpdateOptions{}, "isolated-device-update", "Update a isolated device", func(s *mcclient.ClientSession, args *DeviceUpdateOptions) error { res := modules.IsolatedDevices.BatchUpdate(s, args.ID, jsonutils.Marshal(args)) diff --git a/pkg/apis/compute/isolated_device.go b/pkg/apis/compute/isolated_device.go index 859ebf7a73..cb92f58240 100644 --- a/pkg/apis/compute/isolated_device.go +++ b/pkg/apis/compute/isolated_device.go @@ -97,6 +97,7 @@ type IsolatedDeviceReservedResourceInput struct { type IsolatedDeviceUpdateInput struct { apis.StandaloneResourceBaseUpdateInput IsolatedDeviceReservedResourceInput + DevType string `json:"dev_type"` } type IsolatedDeviceJsonDesc struct { diff --git a/pkg/compute/models/isolated_devices.go b/pkg/compute/models/isolated_devices.go index aa2b392045..7879c7b885 100644 --- a/pkg/compute/models/isolated_devices.go +++ b/pkg/compute/models/isolated_devices.go @@ -130,7 +130,7 @@ func (manager *SIsolatedDeviceManager) ValidateCreateData(ctx context.Context, if input.DevType == "" { return input, httperrors.NewNotEmptyError("dev_type is empty") } - if !utils.IsInStringArray(input.DevType, []string{api.GPU_HPC_TYPE, api.GPU_VGA_TYPE, api.USB_TYPE, api.NIC_TYPE}) { + if !utils.IsInStringArray(input.DevType, api.VALID_PASSTHROUGH_TYPES) { return input, httperrors.NewInputParameterError("device type %q not supported", input.DevType) } @@ -186,6 +186,14 @@ func (self *SIsolatedDevice) ValidateUpdateData( if input.ReservedStorage != nil && *input.ReservedStorage < 0 { return input, httperrors.NewInputParameterError("reserved storage must >= 0") } + if input.DevType != "" { + if !utils.IsInStringArray(input.DevType, api.VALID_GPU_TYPES) { + return input, httperrors.NewInputParameterError("device type %q not support update", input.DevType) + } + if !self.IsGPU() { + return input, httperrors.NewInputParameterError("Can't update for device %q", self.DevType) + } + } return input, nil }