check scsi driver on add disk

This commit is contained in:
wanyaoqi
2020-02-17 22:00:07 +08:00
parent 9a91bf244c
commit 0d6480723d
4 changed files with 43 additions and 2 deletions
+1
View File
@@ -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 {
+40 -2
View File
@@ -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 {
+1
View File
@@ -128,6 +128,7 @@ const (
ACT_VM_RESET = "虚拟机回滚快照"
ACT_VM_SNAPSHOT_AND_CLONE = "虚拟机快照并克隆"
ACT_VM_BLOCK_STREAM = "同步数据"
ACT_ATTACH_NETWORK = "绑定网卡"
ACT_CACHED_IMAGE = "缓存镜像"