diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index 9380f51e21..a1cda27c44 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -1185,12 +1185,16 @@ func (self *SGuest) insertIso(imageId string, cdromOrdinal int64) bool { return cdrom.insertIso(imageId) } -func (self *SGuest) InsertIsoSucc(cdromOrdinal int64, imageId string, path string, size int64, name string, bootIndex *int8) bool { +func (self *SGuest) InsertIsoSucc(cdromOrdinal int64, imageId string, path string, size int64, name string, bootIndex *int8) (*SGuestcdrom, bool) { cdrom := self.getCdrom(false, cdromOrdinal) - return cdrom.insertIsoSucc(imageId, path, size, name, bootIndex) + return cdrom, cdrom.insertIsoSucc(imageId, path, size, name, bootIndex) } -func (self *SGuest) GetDetailsIso(cdromOrdinal int64, userCred mcclient.TokenCredential) jsonutils.JSONObject { +func (self *SGuest) GetDetailsIso(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { + var cdromOrdinal int64 = 0 + if query.Contains("ordinal") { + cdromOrdinal, _ = query.Int("ordinal") + } cdrom := self.getCdrom(false, cdromOrdinal) desc := jsonutils.NewDict() if len(cdrom.ImageId) > 0 { @@ -1202,7 +1206,7 @@ func (self *SGuest) GetDetailsIso(cdromOrdinal int64, userCred mcclient.TokenCre desc.Set("size", jsonutils.NewInt(int64(cdrom.Size))) desc.Set("status", jsonutils.NewString("ready")) } - return desc + return desc, nil } func (self *SGuest) PerformInsertiso(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index ae5b99f302..091a48cc16 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -2434,6 +2434,10 @@ func (self *SGuest) GetCdrom() *SGuestcdrom { return self.getCdrom(false, 0) } +func (self *SGuest) GetCdromByOrdinal(ordinal int64) *SGuestcdrom { + return self.getCdrom(false, ordinal) +} + func (self *SGuest) getCdrom(create bool, ordinal int64) *SGuestcdrom { cdrom := SGuestcdrom{} cdrom.SetModelManager(GuestcdromManager, &cdrom) diff --git a/pkg/compute/tasks/guest_insert_iso_task.go b/pkg/compute/tasks/guest_insert_iso_task.go index af2d7cfd5d..8cc9e623d0 100644 --- a/pkg/compute/tasks/guest_insert_iso_task.go +++ b/pkg/compute/tasks/guest_insert_iso_task.go @@ -91,8 +91,8 @@ func (self *GuestInsertIsoTask) OnIsoPrepareComplete(ctx context.Context, obj db } guest := obj.(*models.SGuest) - if guest.InsertIsoSucc(cdromOrdinal, imageId, path, size, name, bootIndex) { - db.OpsLog.LogEvent(guest, db.ACT_ISO_ATTACH, guest.GetDetailsIso(cdromOrdinal, self.UserCred), self.UserCred) + if cdrom, ok := guest.InsertIsoSucc(cdromOrdinal, imageId, path, size, name, bootIndex); ok { + db.OpsLog.LogEvent(guest, db.ACT_ISO_ATTACH, cdrom.GetDetails(), self.UserCred) if guest.GetDriver().NeedRequestGuestHotAddIso(ctx, guest) { self.SetStage("OnConfigSyncComplete", nil) boot := jsonutils.QueryBoolean(self.Params, "boot", false) diff --git a/pkg/mcclient/options/compute/servers.go b/pkg/mcclient/options/compute/servers.go index bb33ed7886..1dabeaa71a 100644 --- a/pkg/mcclient/options/compute/servers.go +++ b/pkg/mcclient/options/compute/servers.go @@ -1355,3 +1355,12 @@ type ServerVncOptions struct { func (o *ServerVncOptions) Params() (jsonutils.JSONObject, error) { return jsonutils.Marshal(o), nil } + +type ServerIsoOptions struct { + ServerIdOptions + Ordinal int `help:"server iso ordinal, default 0"` +} + +func (o *ServerIsoOptions) Params() (jsonutils.JSONObject, error) { + return jsonutils.Marshal(o), nil +}