Skip to content

Commit 675fc8d

Browse files
committed
backupvmdetails will be shown in listbackupsresponse only if listvmdetails parameter is true
1 parent 735c379 commit 675fc8d

File tree

10 files changed

+68
-35
lines changed

10 files changed

+68
-35
lines changed

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ public class ApiConstants {
740740
public static final String LIST_ALL = "listall";
741741
public static final String LIST_ONLY_REMOVED = "listonlyremoved";
742742
public static final String LIST_SYSTEM_VMS = "listsystemvms";
743+
public static final String LIST_VM_DETAILS = "listvmdetails";
743744
public static final String IP_RANGES = "ipranges";
744745
public static final String IPV4_ROUTING = "ip4routing";
745746
public static final String IPV4_ROUTES = "ip4routes";

api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ List<TemplateResponse> createTemplateResponses(ResponseView view, VirtualMachine
523523

524524
UserDataResponse createUserDataResponse(UserData userData);
525525

526-
BackupResponse createBackupResponse(Backup backup);
526+
BackupResponse createBackupResponse(Backup backup, Boolean listVmDetails);
527527

528528
BackupScheduleResponse createBackupScheduleResponse(BackupSchedule backup);
529529

api/src/main/java/org/apache/cloudstack/api/command/user/backup/ListBackupsCmd.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ public class ListBackupsCmd extends BaseListProjectAndAccountResourcesCmd {
7575
description = "list backups by zone id")
7676
private Long zoneId;
7777

78+
@Parameter(name = ApiConstants.LIST_VM_DETAILS,
79+
type = CommandType.BOOLEAN,
80+
since = "4.21.0",
81+
description = "list backups with VM details")
82+
private Boolean listVmDetails;
83+
7884
/////////////////////////////////////////////////////
7985
/////////////////// Accessors ///////////////////////
8086
/////////////////////////////////////////////////////
@@ -91,6 +97,10 @@ public Long getZoneId() {
9197
return zoneId;
9298
}
9399

100+
public Boolean getListVmDetails() {
101+
return listVmDetails;
102+
}
103+
94104
/////////////////////////////////////////////////////
95105
/////////////// API Implementation///////////////////
96106
/////////////////////////////////////////////////////
@@ -101,7 +111,7 @@ protected void setupResponseBackupList(final List<Backup> backups, final Integer
101111
if (backup == null) {
102112
continue;
103113
}
104-
BackupResponse backupResponse = _responseGenerator.createBackupResponse(backup);
114+
BackupResponse backupResponse = _responseGenerator.createBackupResponse(backup, this.getListVmDetails());
105115
responses.add(backupResponse);
106116
}
107117
final ListResponse<BackupResponse> response = new ListResponse<>();

engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@ public interface BackupDao extends GenericDao<BackupVO, Long> {
3737
List<Backup> listByOfferingId(Long backupOfferingId);
3838
void loadDetails(BackupVO backup);
3939
void saveDetails(BackupVO backup);
40-
BackupResponse newBackupResponse(Backup backup);
40+
BackupResponse newBackupResponse(Backup backup, Boolean listVmDetails);
4141
}

engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ public void saveDetails(BackupVO backup) {
193193
}
194194

195195
@Override
196-
public BackupResponse newBackupResponse(Backup backup) {
196+
public BackupResponse newBackupResponse(Backup backup, Boolean listVmDetails) {
197197
VMInstanceVO vm = vmInstanceDao.findByIdIncludingRemoved(backup.getVmId());
198198
AccountVO account = accountDao.findByIdIncludingRemoved(vm.getAccountId());
199199
DomainVO domain = domainDao.findByIdIncludingRemoved(vm.getDomainId());
@@ -231,19 +231,21 @@ public BackupResponse newBackupResponse(Backup backup) {
231231
response.setZoneId(zone.getUuid());
232232
response.setZone(zone.getName());
233233

234-
Map<String, String> details = backupDetailsDao.listDetailsKeyPairs(backup.getId(), true);
235-
if (details != null) {
236-
HashMap<String, String> vmDetails = new HashMap<>();
237-
vmDetails.put(ApiConstants.HYPERVISOR, details.get(ApiConstants.HYPERVISOR));
238-
vmDetails.put(ApiConstants.TEMPLATE_ID, details.get(ApiConstants.TEMPLATE_ID));
239-
vmDetails.put(ApiConstants.SERVICE_OFFERING_ID, details.get(ApiConstants.SERVICE_OFFERING_ID));
240-
vmDetails.put(ApiConstants.NETWORK_IDS, details.get(ApiConstants.NETWORK_IDS));
241-
vmDetails.put(ApiConstants.DISK_OFFERING_IDS, details.get(ApiConstants.DISK_OFFERING_IDS));
242-
vmDetails.put(ApiConstants.DEVICE_IDS, details.get(ApiConstants.DEVICE_IDS));
243-
vmDetails.put(ApiConstants.DISK_SIZES, details.get(ApiConstants.DISK_SIZES));
244-
vmDetails.put(ApiConstants.MIN_IOPS, details.get(ApiConstants.MIN_IOPS));
245-
vmDetails.put(ApiConstants.MAX_IOPS, details.get(ApiConstants.MAX_IOPS));
246-
response.setVmDetails(vmDetails);
234+
if (Boolean.TRUE.equals(listVmDetails)) {
235+
Map<String, String> details = backupDetailsDao.listDetailsKeyPairs(backup.getId(), true);
236+
if (details != null) {
237+
HashMap<String, String> vmDetails = new HashMap<>();
238+
vmDetails.put(ApiConstants.HYPERVISOR, details.get(ApiConstants.HYPERVISOR));
239+
vmDetails.put(ApiConstants.TEMPLATE_ID, details.get(ApiConstants.TEMPLATE_ID));
240+
vmDetails.put(ApiConstants.SERVICE_OFFERING_ID, details.get(ApiConstants.SERVICE_OFFERING_ID));
241+
vmDetails.put(ApiConstants.NETWORK_IDS, details.get(ApiConstants.NETWORK_IDS));
242+
vmDetails.put(ApiConstants.DISK_OFFERING_IDS, details.get(ApiConstants.DISK_OFFERING_IDS));
243+
vmDetails.put(ApiConstants.DEVICE_IDS, details.get(ApiConstants.DEVICE_IDS));
244+
vmDetails.put(ApiConstants.DISK_SIZES, details.get(ApiConstants.DISK_SIZES));
245+
vmDetails.put(ApiConstants.MIN_IOPS, details.get(ApiConstants.MIN_IOPS));
246+
vmDetails.put(ApiConstants.MAX_IOPS, details.get(ApiConstants.MAX_IOPS));
247+
response.setVmDetails(vmDetails);
248+
}
247249
}
248250

249251
response.setObjectName("backup");

server/src/main/java/com/cloud/api/ApiDBUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2260,8 +2260,8 @@ public static ResourceIconVO getResourceIconByResourceUUID(String resourceUUID,
22602260
return s_resourceIconDao.findByResourceUuid(resourceUUID, resourceType);
22612261
}
22622262

2263-
public static BackupResponse newBackupResponse(Backup backup) {
2264-
return s_backupDao.newBackupResponse(backup);
2263+
public static BackupResponse newBackupResponse(Backup backup, Boolean listVmDetails) {
2264+
return s_backupDao.newBackupResponse(backup, listVmDetails);
22652265
}
22662266

22672267
public static BackupScheduleResponse newBackupScheduleResponse(BackupSchedule schedule) {

server/src/main/java/com/cloud/api/ApiResponseHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4962,8 +4962,8 @@ public UserDataResponse createUserDataResponse(UserData userData) {
49624962
}
49634963

49644964
@Override
4965-
public BackupResponse createBackupResponse(Backup backup) {
4966-
return ApiDBUtils.newBackupResponse(backup);
4965+
public BackupResponse createBackupResponse(Backup backup, Boolean listVmDetails) {
4966+
return ApiDBUtils.newBackupResponse(backup, listVmDetails);
49674967
}
49684968

49694969
@Override

server/src/test/java/org/apache/cloudstack/backup/BackupManagerTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.cloud.host.HostVO;
2626
import com.cloud.host.dao.HostDao;
2727
import com.cloud.hypervisor.Hypervisor;
28+
import com.cloud.offering.DiskOffering;
2829
import com.cloud.offering.DiskOfferingInfo;
2930
import com.cloud.service.ServiceOfferingVO;
3031
import com.cloud.service.dao.ServiceOfferingDao;
@@ -471,10 +472,12 @@ public void getDataDiskOfferingListFromBackup() {
471472

472473
DiskOfferingVO diskOffering1 = mock(DiskOfferingVO.class);
473474
when(diskOffering1.getUuid()).thenReturn("disk-offering-uuid-1");
475+
when(diskOffering1.getState()).thenReturn(DiskOffering.State.Active);
474476
when(diskOffering1.isCustomizedIops()).thenReturn(true);
475477

476478
DiskOfferingVO diskOffering2 = mock(DiskOfferingVO.class);
477479
when(diskOffering2.getUuid()).thenReturn("disk-offering-uuid-2");
480+
when(diskOffering2.getState()).thenReturn(DiskOffering.State.Active);
478481
when(diskOffering2.isCustomizedIops()).thenReturn(true);
479482

480483
when(diskOfferingDao.findByUuid("disk-offering-uuid-1")).thenReturn(diskOffering1);
@@ -509,6 +512,7 @@ public void getDataDiskOfferingListFromBackupNullIops() {
509512
DiskOfferingVO diskOffering = mock(DiskOfferingVO.class);
510513
when(diskOffering.getUuid()).thenReturn("disk-offering-uuid-1");
511514
when(diskOffering.isCustomizedIops()).thenReturn(true);
515+
when(diskOffering.getState()).thenReturn(DiskOffering.State.Active);
512516

513517
when(diskOfferingDao.findByUuid("disk-offering-uuid-1")).thenReturn(diskOffering);
514518

@@ -535,6 +539,7 @@ public void testUpdateDiskOfferingSizeFromBackup() {
535539

536540
DiskOfferingVO diskOffering = mock(DiskOfferingVO.class);
537541
when(diskOffering.isCustomizedIops()).thenReturn(true);
542+
when(diskOffering.getState()).thenReturn(DiskOffering.State.Active);
538543

539544
when(diskOfferingDao.findByUuid("disk-offering-uuid-1")).thenReturn(diskOffering);
540545
List<DiskOfferingInfo> diskOfferingInfoList = List.of(new DiskOfferingInfo(diskOffering, sizeInCmd, 1L, null, null));

ui/src/views/compute/wizard/VolumeDiskOfferingSelectView.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<span>
3434
<a-select
3535
@change="updateOfferingSelect($event, record.id)"
36-
:defaultValue="getDefaultDiskOffering(record)"
36+
:value="getDefaultDiskOffering(record)"
3737
showSearch
3838
optionFilterProp="label"
3939
:filterOption="(input, option) => {
@@ -195,7 +195,7 @@ export default {
195195
this.loading = false
196196
},
197197
getDefaultDiskOffering (record) {
198-
return this.diskOfferings.find(x => x.id === record.diskofferingid)?.id || this.diskOfferings[0]?.id
198+
return this.diskOfferings.find(x => x.id === record?.diskofferingid) ? record.diskofferingid : null
199199
},
200200
setDefaultValues () {
201201
this.values = {}

ui/src/views/storage/CreateVMFromBackup.vue

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
<a-button @click="closeAction">
3030
{{ $t('label.cancel') }}
3131
</a-button>
32-
<a-button @click="setConfigure">
32+
<a-button @click="setConfigure" :loading="loading">
3333
{{ $t('label.configure.instance') }}
3434
</a-button>
35-
<a-button style="margin-left: 10px" type="primary" ref="submit" @click="handleSubmit">
35+
<a-button style="margin-left: 10px" type="primary" ref="submit" :loading="loading" @click="handleSubmit">
3636
{{ $t('label.ok') }}
3737
</a-button>
3838
</div>
@@ -63,7 +63,9 @@ export default {
6363
return {
6464
configure: false,
6565
dataPreFill: {},
66-
serviceOffering: {}
66+
vmdetails: {},
67+
serviceOffering: {},
68+
loading: true
6769
}
6870
},
6971
props: {
@@ -73,14 +75,27 @@ export default {
7375
}
7476
},
7577
created () {
76-
this.fetchServiceOffering()
78+
this.fetchBackupVmDetails().then(() => {
79+
this.fetchServiceOffering()
80+
this.loading = false
81+
})
7782
},
7883
methods: {
84+
fetchBackupVmDetails () {
85+
this.serviceOfferings = []
86+
return api('listBackups', {
87+
id: this.resource.id,
88+
listvmdetails: true
89+
}).then(response => {
90+
const backups = response.listbackupsresponse.backup || []
91+
this.vmdetails = backups[0].vmdetails
92+
})
93+
},
7994
fetchServiceOffering () {
8095
this.serviceOfferings = []
8196
api('listServiceOfferings', {
8297
zoneid: this.resource.zoneid,
83-
id: this.resource.vmdetails.serviceofferingid,
98+
id: this.vmdetails.serviceofferingid,
8499
listall: true
85100
}).then(response => {
86101
const serviceOfferings = response.listserviceofferingsresponse.serviceoffering || []
@@ -89,13 +104,13 @@ export default {
89104
},
90105
populatePreFillData () {
91106
this.dataPreFill.backupid = this.resource.id
92-
this.dataPreFill.computeofferingid = this.resource.vmdetails.serviceofferingid
93-
this.dataPreFill.templateid = this.resource.vmdetails.templateid
94-
this.dataPreFill.networkids = (this.resource.vmdetails.networkids || '').split(',')
95-
this.diskofferingids = (this.resource.vmdetails.diskofferingids || '').split(',')
96-
this.miniops = (this.resource.vmdetails.miniops || '').split(',').map(item => item === 'null' ? '' : item)
97-
this.maxiops = (this.resource.vmdetails.maxiops || '').split(',').map(item => item === 'null' ? '' : item)
98-
this.deviceid = (this.resource.vmdetails.deviceids || '').split(',').map(item => item === 'null' ? '' : item)
107+
this.dataPreFill.computeofferingid = this.vmdetails.serviceofferingid
108+
this.dataPreFill.templateid = this.vmdetails.templateid
109+
this.dataPreFill.networkids = (this.vmdetails.networkids || '').split(',')
110+
this.diskofferingids = (this.vmdetails.diskofferingids || '').split(',')
111+
this.miniops = (this.vmdetails.miniops || '').split(',').map(item => item === 'null' ? '' : item)
112+
this.maxiops = (this.vmdetails.maxiops || '').split(',').map(item => item === 'null' ? '' : item)
113+
this.deviceid = (this.vmdetails.deviceids || '').split(',').map(item => item === 'null' ? '' : item)
99114
const volumes = JSON.parse(this.resource.volumes)
100115
const disksdetails = volumes.map((volume, index) => ({
101116
name: volume.path,

0 commit comments

Comments
 (0)