Merge pull request #5625 from wanyaoqi/automated-cherry-pick-of-#5624-upstream-release-3.1

Automated cherry pick of #5624: - add check disk is enable delete - vm enable detach network on running state - add menu on boot from iso - misc fix
This commit is contained in:
Zexi Li
2020-03-31 16:24:51 +08:00
committed by GitHub
5 changed files with 32 additions and 13 deletions
+7
View File
@@ -984,6 +984,13 @@ func (self *SDisk) ValidatePurgeCondition(ctx context.Context) error {
}
func (self *SDisk) validateDeleteCondition(ctx context.Context, isPurge bool) error {
if !isPurge {
storage := self.GetStorage()
host := storage.GetMasterHost()
if host == nil {
return httperrors.NewBadRequestError("storage of disk no valid host")
}
}
cnt, err := self.GetGuestDiskCount()
if err != nil {
return httperrors.NewInternalServerError("GetGuestDiskCount fail %s", err)
+19 -10
View File
@@ -2030,12 +2030,16 @@ func (self *SGuest) AllowPerformDetachnetwork(ctx context.Context, userCred mccl
}
func (self *SGuest) PerformDetachnetwork(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
if self.Status != api.VM_READY {
if !utils.IsInStringArray(self.Status, []string{api.VM_READY, api.VM_RUNNING}) {
return nil, httperrors.NewInvalidStatusError("Cannot detach network in status %s", self.Status)
}
reserve := jsonutils.QueryBoolean(data, "reserve", false)
var (
reserve = jsonutils.QueryBoolean(data, "reserve", false)
netStr, _ = data.GetString("net_id")
gns []SGuestnetwork
err error
)
netStr, _ := data.GetString("net_id")
if len(netStr) > 0 {
netObj, err := NetworkManager.FetchByIdOrName(userCred, netStr)
if err != nil {
@@ -2044,12 +2048,10 @@ func (self *SGuest) PerformDetachnetwork(ctx context.Context, userCred mcclient.
}
return nil, httperrors.NewGeneralError(err)
}
gns, err := self.GetNetworks(netObj.GetId())
gns, err = self.GetNetworks(netObj.GetId())
if err != nil {
return nil, httperrors.NewGeneralError(err)
}
err = self.detachNetworks(ctx, userCred, gns, reserve, true)
return nil, err
}
ipStr, _ := data.GetString("ip_addr")
if len(ipStr) > 0 {
@@ -2060,8 +2062,7 @@ func (self *SGuest) PerformDetachnetwork(ctx context.Context, userCred mcclient.
}
return nil, httperrors.NewGeneralError(err)
}
err = self.detachNetworks(ctx, userCred, []SGuestnetwork{*gn}, reserve, true)
return nil, err
gns = []SGuestnetwork{*gn}
}
macStr, _ := data.GetString("mac")
if len(macStr) > 0 {
@@ -2072,10 +2073,18 @@ func (self *SGuest) PerformDetachnetwork(ctx context.Context, userCred mcclient.
}
return nil, httperrors.NewGeneralError(err)
}
err = self.detachNetworks(ctx, userCred, []SGuestnetwork{*gn}, reserve, true)
gns = []SGuestnetwork{*gn}
}
if self.Status == api.VM_READY {
err = self.detachNetworks(ctx, userCred, gns, reserve, true)
return nil, err
} else {
err = self.detachNetworks(ctx, userCred, gns, reserve, false)
if err != nil {
return nil, err
}
return nil, self.StartSyncTask(ctx, userCred, false, "")
}
return nil, httperrors.NewInputParameterError("no either ip_addr, mac or network specified")
}
func (self *SGuest) AllowPerformAttachnetwork(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
+1 -1
View File
@@ -277,7 +277,7 @@ func (self *SInstanceSnapshot) ToInstanceCreateInput(
}
sourceInput.OsType = self.OsType
sourceInput.InstanceType = self.InstanceType
// sourceInput.Networks = serverConfig.Networks
sourceInput.Networks = serverConfig.Networks
return sourceInput, nil
}
+1 -1
View File
@@ -452,7 +452,7 @@ func (m *SGuestManager) GetStatus(sid string) string {
}
}
if guest.IsRunning() {
if guest.BlockJobsCount() > 0 {
if guest.Monitor != nil && guest.BlockJobsCount() > 0 {
return GUEST_BLOCK_STREAM
}
return GUEST_RUNNING
+4 -1
View File
@@ -466,6 +466,10 @@ func (s *SKVMGuestInstance) _generateStartScript(data *jsonutils.JSONDict) (stri
bootOrder, _ := s.Desc.GetString("boot_order")
cmd += fmt.Sprintf(" -boot order=%s", bootOrder)
cdrom, _ := s.Desc.Get("cdrom")
if cdrom != nil && cdrom.Contains("path") {
cmd += ",menu=on"
}
if s.getBios() == "UEFI" {
cmd += fmt.Sprintf(" -bios %s", options.HostOptions.OvmfPath)
@@ -560,7 +564,6 @@ func (s *SKVMGuestInstance) _generateStartScript(data *jsonutils.JSONDict) (stri
cmd += " -drive id=ide0-cd0,media=cdrom,if=none"
}
cdrom, _ := s.Desc.Get("cdrom")
if cdrom != nil && cdrom.Contains("path") {
cdromPath, _ := cdrom.GetString("path")
if len(cdromPath) > 0 {