From 2b25bc6253677cbbe489917c034b2d355054d930 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Thu, 25 Oct 2018 00:15:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A2=9E=EF=BC=9A1=20baremetal?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=81=9C=E6=9C=BA=E9=80=BB=E8=BE=91=E4=B8=8D?= =?UTF-8?q?=E5=A4=AA=E6=AD=A3=E7=A1=AE=202=20=E4=BF=AE=E6=AD=A3=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/guestdrivers/baremetals.go | 19 ++++++++++++++----- pkg/compute/models/hosts.go | 6 +++--- pkg/compute/models/storages.go | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/pkg/compute/guestdrivers/baremetals.go b/pkg/compute/guestdrivers/baremetals.go index 40af2119ab..ab61df505d 100644 --- a/pkg/compute/guestdrivers/baremetals.go +++ b/pkg/compute/guestdrivers/baremetals.go @@ -5,6 +5,7 @@ import ( "fmt" "net/http" "regexp" + "strings" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -155,12 +156,20 @@ func (self *SBaremetalGuestDriver) RequestStartOnHost(ctx context.Context, guest } func (self *SBaremetalGuestDriver) RequestStopGuestForDelete(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { + host := guest.GetHost() guestStatus, _ := task.GetParams().GetString("guest_status") - if guestStatus == models.VM_RUNNING && options.Options.EnablePendingDelete && !guest.PendingDeleted && jsonutils.QueryBoolean(task.GetParams(), "purge", false) { - host := guest.GetHost() - if host != nil && host.Enabled { - return guest.StartGuestStopTask(ctx, task.GetUserCred(), true, task.GetTaskId()) - } + overridePendingDelete := jsonutils.QueryBoolean(task.GetParams(), "override_pending_delete", false) + purge := jsonutils.QueryBoolean(task.GetParams(), "purge", false) + if host != nil && host.Enabled && + (guestStatus == models.VM_RUNNING || strings.Index(guestStatus, "stop") >= 0) && + options.Options.EnablePendingDelete && + !guest.PendingDeleted && + !overridePendingDelete && + !purge { + return guest.StartGuestStopTask(ctx, task.GetUserCred(), true, task.GetTaskId()) + } + if host != nil && !host.Enabled && !purge { + return fmt.Errorf("fail to contact baremetal") } task.ScheduleRun(nil) return nil diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index 7b72dd82f3..3e28f46768 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -2041,7 +2041,7 @@ func (self *SHost) FetchIpmiInfo(data *jsonutils.JSONDict) (*jsonutils.JSONDict, IPMI_KEY_PERFIX := "ipmi_" ipmiInfo := jsonutils.NewDict() kv, _ := data.GetMap() - for key, _ := range kv { + for key := range kv { value, err := ipmiInfo.GetString(key) if strings.HasPrefix(value, IPMI_KEY_PERFIX) { subkey := key[len(IPMI_KEY_PERFIX):] @@ -2375,7 +2375,7 @@ func (self *SHost) PerformAddNetif(ctx context.Context, userCred mcclient.TokenC ipAddr, _ := data.GetString("ip_addr") var sw *SWire if len(wire) > 0 && len(ipAddr) == 0 { - iWire, err := WireManager.FetchByIdOrName(userCred.GetProjectId(), wire) + iWire, err := WireManager.FetchByIdOrName(userCred, wire) if err != nil { return nil, httperrors.NewBadRequestError("Wire %s not found", wire) } @@ -2565,7 +2565,7 @@ func (self *SHost) EnableNetif(ctx context.Context, userCred mcclient.TokenCrede } if net == nil { if len(network) > 0 { - iNet, err := NetworkManager.FetchByIdOrName(userCred.GetProjectId(), network) + iNet, err := NetworkManager.FetchByIdOrName(userCred, network) if err != nil { return fmt.Errorf("Network %s not found: %s", network, err) } diff --git a/pkg/compute/models/storages.go b/pkg/compute/models/storages.go index 8a8a5676f8..1af83a0ca1 100644 --- a/pkg/compute/models/storages.go +++ b/pkg/compute/models/storages.go @@ -102,7 +102,7 @@ func (manager *SStorageManager) ValidateCreateData(ctx context.Context, userCred if err != nil { return nil, httperrors.NewMissingParameterError("zone") } - zone, _ := ZoneManager.FetchByIdOrName(userCred.GetProjectId(), zoneId) + zone, _ := ZoneManager.FetchByIdOrName(userCred, zoneId) if zone == nil { return nil, httperrors.NewResourceNotFoundError("zone %s", zoneId) }