@@ -90,49 +90,84 @@ const (
9090func (h * BlockDeviceHandler ) getStatusMessage (diskState virtualDisksState , vds map [string ]* virtv2.VirtualDisk ) string {
9191 summaryCount := len (vds )
9292
93+ var messages []string
94+
95+ messages = append (messages , fmt .Sprintf (
96+ "Waiting for block devices to be ready to use: %d/%d" ,
97+ diskState .counts .readyToUse , summaryCount ))
98+
99+ addUsageMessage := func (count int , name string , usageType string ) {
100+ if count == 0 {
101+ return
102+ }
103+
104+ var msg string
105+ if count == 1 {
106+ msg = fmt .Sprintf ("Virtual disk %q is in use %s" , name , usageType )
107+ } else {
108+ msg = fmt .Sprintf ("Virtual disks %d/%d are in use %s" , count , summaryCount , usageType )
109+ }
110+
111+ messages = append (messages , msg )
112+ }
113+
114+ addUsageMessage (diskState .counts .creatingImage , diskState .diskNames .imageCreation , UsageTypeImageCreation )
115+ addUsageMessage (diskState .counts .onOtherVMs , diskState .diskNames .usedByOtherVM , UsageTypeAnotherVM )
116+
93117 if summaryCount == 1 {
118+ if diskState .counts .creatingImage == 1 || diskState .counts .onOtherVMs == 1 {
119+ return messages [len (messages )- 1 ] + "."
120+ }
121+
94122 var diskName string
95123 for _ , vd := range vds {
96124 diskName = vd .Name
97125 }
98126
99- return h .getSingleDiskMessage (diskState , diskName )
100- }
101- return h .getMultipleDisksMessage (diskState , summaryCount )
102- }
103-
104- func (h * BlockDeviceHandler ) getSingleDiskMessage (diskState virtualDisksState , diskName string ) string {
105- switch {
106- case diskState .counts .creatingImage == 1 :
107- return h .getDiskUsageMessage (1 , 1 , diskState .diskNames .imageCreation , UsageTypeImageCreation ) + "."
108- case diskState .counts .onOtherVMs == 1 :
109- return h .getDiskUsageMessage (1 , 1 , diskState .diskNames .usedByOtherVM , UsageTypeAnotherVM ) + "."
110- default :
111127 return fmt .Sprintf ("Waiting for block device %q to be ready to use." , diskName )
112128 }
129+
130+ return strings .Join (messages , "; " ) + "."
113131}
114132
115- func (h * BlockDeviceHandler ) getMultipleDisksMessage (diskState virtualDisksState , summaryCount int ) string {
133+ func (h * BlockDeviceHandler ) getStatusMessage2 (diskState virtualDisksState , vds map [string ]* virtv2.VirtualDisk ) string {
134+ summaryCount := len (vds )
135+
116136 var messages []string
117137
118- messages = append (messages , fmt .Sprintf (
119- "Waiting for block devices to be ready to use: %d/%d" ,
120- diskState .counts .readyToUse , summaryCount ))
138+ if summaryCount == 1 {
139+ var diskName string
140+ for _ , vd := range vds {
141+ diskName = vd .Name
142+ }
121143
122- if diskState .counts .creatingImage > 0 {
123- messages = append (messages , h .getDiskUsageMessage (
124- diskState .counts .creatingImage ,
125- summaryCount ,
126- diskState .diskNames .imageCreation ,
127- UsageTypeImageCreation ))
144+ messages = append (messages , fmt .Sprintf ("Waiting for block device %q to be ready to use" , diskName ))
145+ } else {
146+ messages = append (messages , fmt .Sprintf (
147+ "Waiting for block devices to be ready to use: %d/%d" ,
148+ diskState .counts .readyToUse , summaryCount ))
128149 }
129150
130- if diskState .counts .onOtherVMs > 0 {
131- messages = append (messages , h .getDiskUsageMessage (
132- diskState .counts .onOtherVMs ,
133- summaryCount ,
134- diskState .diskNames .usedByOtherVM ,
135- UsageTypeAnotherVM ))
151+ addUsageMessage := func (count int , name string , usageType string ) {
152+ if count == 0 {
153+ return
154+ }
155+
156+ var msg string
157+ if count == 1 {
158+ msg = fmt .Sprintf ("Virtual disk %q is in use %s" , name , usageType )
159+ } else {
160+ msg = fmt .Sprintf ("Virtual disks %d/%d are in use %s" , count , summaryCount , usageType )
161+ }
162+
163+ messages = append (messages , msg )
164+ }
165+
166+ addUsageMessage (diskState .counts .creatingImage , diskState .diskNames .imageCreation , UsageTypeImageCreation )
167+ addUsageMessage (diskState .counts .onOtherVMs , diskState .diskNames .usedByOtherVM , UsageTypeAnotherVM )
168+
169+ if summaryCount == 1 && (diskState .counts .creatingImage == 1 || diskState .counts .onOtherVMs == 1 ) {
170+ return messages [len (messages )- 1 ] + "."
136171 }
137172
138173 return strings .Join (messages , "; " ) + "."
@@ -202,7 +237,7 @@ func (h *BlockDeviceHandler) handleAttachedDisk(
202237 state * virtualDisksState ,
203238) {
204239 if condition .Status == metav1 .ConditionTrue && condition .Reason == vdcondition .AttachedToVirtualMachine .String () {
205- if ! h .checkVDToUseCurrentVM (vd , vm ) {
240+ if ! h .checkVMToMountVD (vd , vm ) {
206241 state .counts .onOtherVMs ++
207242 state .diskNames .usedByOtherVM = vd .Name
208243 } else {
@@ -219,12 +254,24 @@ func (h *BlockDeviceHandler) handleReadyForUseDisk(
219254) {
220255 if condition .Status != metav1 .ConditionTrue &&
221256 vm .Status .Phase == virtv2 .MachineStopped &&
222- h .checkVDToUseCurrentVM (vd , vm ) {
257+ h .checkVDToUseVM (vd , vm ) {
223258 state .counts .readyToUse ++
224259 }
225260}
226261
227- func (h * BlockDeviceHandler ) checkVDToUseCurrentVM (vd * virtv2.VirtualDisk , vm * virtv2.VirtualMachine ) bool {
262+ func (h * BlockDeviceHandler ) checkVDToUseVM (vd * virtv2.VirtualDisk , vm * virtv2.VirtualMachine ) bool {
263+ attachedVMs := vd .Status .AttachedToVirtualMachines
264+
265+ for _ , attachedVM := range attachedVMs {
266+ if attachedVM .Name == vm .Name {
267+ return true
268+ }
269+ }
270+
271+ return false
272+ }
273+
274+ func (h * BlockDeviceHandler ) checkVMToMountVD (vd * virtv2.VirtualDisk , vm * virtv2.VirtualMachine ) bool {
228275 attachedVMs := vd .Status .AttachedToVirtualMachines
229276
230277 for _ , attachedVM := range attachedVMs {
0 commit comments