diff --git a/cmd/climc/shell/compute/servers.go b/cmd/climc/shell/compute/servers.go index d52176850b..cbaf282a1b 100644 --- a/cmd/climc/shell/compute/servers.go +++ b/cmd/climc/shell/compute/servers.go @@ -145,6 +145,7 @@ func init() { cmd.Get("hardware-info", new(options.ServerIdOptions)) cmd.Get("screen-dump-show", new(options.ServerScreenDumpOptions)) cmd.BatchPerform("screen-dump", new(options.ServerIdsOptions)) + cmd.Perform("set-network-num-queues", new(options.ServerSetNetworkNumQueues)) cmd.GetProperty(&options.ServerStatusStatisticsOptions{}) cmd.GetProperty(&options.ServerProjectStatisticsOptions{}) diff --git a/pkg/apis/compute/guests.go b/pkg/apis/compute/guests.go index b35573250e..6bf1550ed3 100644 --- a/pkg/apis/compute/guests.go +++ b/pkg/apis/compute/guests.go @@ -712,6 +712,13 @@ func (input ServerDetachnetworkInput) IsForce() bool { return input.Force != nil && *input.Force } +type ServerSetNetworkNumQueuesInput struct { + // 虚机网卡 mac addr + MacAddr string `json:"mac_addr"` + // 网卡队列数 + NumQueues int `json:"num_queues"` +} + type ServerMigrateForecastInput struct { PreferHostId string `json:"prefer_host_id"` // Deprecated diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index f7afac7a55..6ec9aca440 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -4255,6 +4255,29 @@ func (self *SGuest) SaveRenewInfo( return nil } +func (self *SGuest) PerformSetNetworkNumQueues( + ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.ServerSetNetworkNumQueuesInput, +) (jsonutils.JSONObject, error) { + if self.Status != api.VM_READY { + return nil, httperrors.NewInvalidStatusError("can't set network num_queues on vm %s", self.Status) + } + if input.NumQueues < 1 { + return nil, httperrors.NewInputParameterError("invalid num_queues %d", input.NumQueues) + } + gn, err := self.GetGuestnetworkByMac(input.MacAddr) + if err != nil { + if errors.Cause(err) == sql.ErrNoRows { + return nil, httperrors.NewNotFoundError("guest network mac %s not found", input.MacAddr) + } + } + _, err = db.Update(gn, func() error { + gn.NumQueues = input.NumQueues + return nil + }) + + return nil, err +} + func (self *SGuest) PerformStreamDisksComplete(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { disks, err := self.GetDisks() if err != nil { diff --git a/pkg/mcclient/options/compute/servers.go b/pkg/mcclient/options/compute/servers.go index 7a42a84b92..336d29f36a 100644 --- a/pkg/mcclient/options/compute/servers.go +++ b/pkg/mcclient/options/compute/servers.go @@ -1498,6 +1498,16 @@ func (o *ServerScreenDumpOptions) Params() (jsonutils.JSONObject, error) { return jsonutils.Marshal(o), nil } +type ServerSetNetworkNumQueues struct { + ServerIdOptions + MacAddr string `help:"server network mac addr"` + NumQueues int `help:"network num queues"` +} + +func (o *ServerSetNetworkNumQueues) Params() (jsonutils.JSONObject, error) { + return jsonutils.Marshal(o), nil +} + type ServerIsoOptions struct { ServerIdOptions Ordinal int `help:"server iso ordinal, default 0"`