Skip to content

Commit ecf1da6

Browse files
committed
fix(vm): fix display BlockDeviceReady condition's message
Signed-off-by: Dmitry Lopatin <dmitry.lopatin@flant.com>
1 parent 54bed71 commit ecf1da6

1 file changed

Lines changed: 78 additions & 31 deletions

File tree

images/virtualization-artifact/pkg/controller/vm/internal/block_device_condition.go

Lines changed: 78 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -90,49 +90,84 @@ const (
9090
func (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

Comments
 (0)