mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 14:19:49 +08:00
check scsi driver on add disk
This commit is contained in:
@@ -2124,6 +2124,7 @@ func (self *SGuest) PerformAttachnetwork(ctx context.Context, userCred mcclient.
|
||||
defer host.ClearSchedDescCache()
|
||||
for i := 0; i < count; i++ {
|
||||
_, err = self.attach2NetworkDesc(ctx, userCred, host, input.Nets[i], pendingUsage, nil)
|
||||
logclient.AddSimpleActionLog(self, logclient.ACT_ATTACH_NETWORK, input.Nets[i], userCred, err == nil)
|
||||
if err != nil {
|
||||
quotas.CancelPendingUsage(ctx, userCred, pendingUsage, pendingUsage)
|
||||
return nil, httperrors.NewBadRequestError(err.Error())
|
||||
|
||||
@@ -29,6 +29,7 @@ func (self *HAGuestDeployTask) OnDeployGuestComplete(
|
||||
}
|
||||
|
||||
func (self *HAGuestDeployTask) DeployBackup(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
|
||||
self.SetStage("OnDeploySlaveGuestComplete", nil)
|
||||
host := models.HostManager.FetchHostById(guest.BackupHostId)
|
||||
err := guest.GetDriver().RequestDeployGuestOnHost(ctx, guest, host, self)
|
||||
if err != nil {
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
"yunion.io/x/pkg/utils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/appctx"
|
||||
"yunion.io/x/onecloud/pkg/hostman/hostutils"
|
||||
@@ -145,11 +146,12 @@ type SGuestDiskSyncTask struct {
|
||||
addDisks []jsonutils.JSONObject
|
||||
cdrom *string
|
||||
|
||||
callback func(...error)
|
||||
callback func(...error)
|
||||
checkeDrivers []string
|
||||
}
|
||||
|
||||
func NewGuestDiskSyncTask(guest *SKVMGuestInstance, delDisks, addDisks []jsonutils.JSONObject, cdrom *string) *SGuestDiskSyncTask {
|
||||
return &SGuestDiskSyncTask{guest, delDisks, addDisks, cdrom, nil}
|
||||
return &SGuestDiskSyncTask{guest, delDisks, addDisks, cdrom, nil, nil}
|
||||
}
|
||||
|
||||
func (d *SGuestDiskSyncTask) Start(callback func(...error)) {
|
||||
@@ -223,7 +225,43 @@ func (d *SGuestDiskSyncTask) onRemoveDiskSucc(results string) {
|
||||
d.syncDisksConf()
|
||||
}
|
||||
|
||||
func (d *SGuestDiskSyncTask) checkDiskDriver(disk jsonutils.JSONObject) {
|
||||
if d.checkeDrivers == nil {
|
||||
d.checkeDrivers = make([]string, 0)
|
||||
}
|
||||
driver, _ := disk.GetString("driver")
|
||||
log.Debugf("sync disk driver: %s", driver)
|
||||
if driver == DISK_DRIVER_SCSI {
|
||||
if utils.IsInStringArray(DISK_DRIVER_SCSI, d.checkeDrivers) {
|
||||
d.startAddDisk(disk)
|
||||
} else {
|
||||
cb := func(ret string) { d.checkScsiDriver(ret, disk) }
|
||||
d.guest.Monitor.HumanMonitorCommand("info pci", cb)
|
||||
}
|
||||
} else {
|
||||
d.startAddDisk(disk)
|
||||
}
|
||||
}
|
||||
|
||||
func (d *SGuestDiskSyncTask) checkScsiDriver(ret string, disk jsonutils.JSONObject) {
|
||||
if strings.Contains(ret, "SCSI controller") {
|
||||
d.checkeDrivers = append(d.checkeDrivers, DISK_DRIVER_SCSI)
|
||||
d.startAddDisk(disk)
|
||||
} else {
|
||||
cb := func(ret string) {
|
||||
log.Infof("Add scsi controller %s", ret)
|
||||
d.checkeDrivers = append(d.checkeDrivers, DISK_DRIVER_SCSI)
|
||||
d.startAddDisk(disk)
|
||||
}
|
||||
d.guest.Monitor.DeviceAdd("virtio-scsi-pci", map[string]interface{}{"id": "scsi"}, cb)
|
||||
}
|
||||
}
|
||||
|
||||
func (d *SGuestDiskSyncTask) addDisk(disk jsonutils.JSONObject) {
|
||||
d.checkDiskDriver(disk)
|
||||
}
|
||||
|
||||
func (d *SGuestDiskSyncTask) startAddDisk(disk jsonutils.JSONObject) {
|
||||
diskPath, _ := disk.GetString("path")
|
||||
iDisk := storageman.GetManager().GetDiskByPath(diskPath)
|
||||
if iDisk == nil {
|
||||
|
||||
@@ -128,6 +128,7 @@ const (
|
||||
ACT_VM_RESET = "虚拟机回滚快照"
|
||||
ACT_VM_SNAPSHOT_AND_CLONE = "虚拟机快照并克隆"
|
||||
ACT_VM_BLOCK_STREAM = "同步数据"
|
||||
ACT_ATTACH_NETWORK = "绑定网卡"
|
||||
|
||||
ACT_CACHED_IMAGE = "缓存镜像"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user