Skip to content

Commit daf6b9d

Browse files
authored
api,ui: vm template format, fix vm info link (apache#9094)
1 parent c6762f1 commit daf6b9d

7 files changed

Lines changed: 44 additions & 19 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ public class ApiConstants {
448448
public static final String TEMPLATE_IDS = "templateids";
449449
public static final String TEMPLATE_NAME = "templatename";
450450
public static final String TEMPLATE_TYPE = "templatetype";
451+
public static final String TEMPLATE_FORMAT = "templateformat";
451452
public static final String TIMEOUT = "timeout";
452453
public static final String TIMEZONE = "timezone";
453454
public static final String TIMEZONEOFFSET = "timezoneoffset";

api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ public class UserVmResponse extends BaseResponseWithTagInformation implements Co
137137
@Param(description = "the type of the template for the virtual machine", since = "4.19.0")
138138
private String templateType;
139139

140+
@SerializedName(ApiConstants.TEMPLATE_FORMAT)
141+
@Param(description = "the format of the template for the virtual machine", since = "4.19.1")
142+
private String templateFormat;
143+
140144
@SerializedName("templatedisplaytext")
141145
@Param(description = " an alternate display text of the template for the virtual machine")
142146
private String templateDisplayText;
@@ -1076,6 +1080,14 @@ public void setTemplateType(String templateType) {
10761080
this.templateType = templateType;
10771081
}
10781082

1083+
public String getTemplateFormat() {
1084+
return templateFormat;
1085+
}
1086+
1087+
public void setTemplateFormat(String templateFormat) {
1088+
this.templateFormat = templateFormat;
1089+
}
1090+
10791091
public List<VnfNicResponse> getVnfNics() {
10801092
return vnfNics;
10811093
}

engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ SELECT
7474
`vm_template`.`uuid` AS `template_uuid`,
7575
`vm_template`.`name` AS `template_name`,
7676
`vm_template`.`type` AS `template_type`,
77+
`vm_template`.`format` AS `template_format`,
7778
`vm_template`.`display_text` AS `template_display_text`,
7879
`vm_template`.`enable_password` AS `password_enabled`,
7980
`iso`.`id` AS `iso_id`,

server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ public UserVmResponse newUserVmResponse(ResponseView view, String objectName, Us
198198
userVmResponse.setTemplateDisplayText(userVm.getTemplateDisplayText());
199199
userVmResponse.setPasswordEnabled(userVm.isPasswordEnabled());
200200
userVmResponse.setTemplateType(userVm.getTemplateType().toString());
201+
userVmResponse.setTemplateFormat(userVm.getTemplateFormat().toString());
201202
}
202203
if (details.contains(VMDetails.all) || details.contains(VMDetails.iso)) {
203204
userVmResponse.setIsoId(userVm.getIsoUuid());

server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.cloud.network.Network.GuestType;
3535
import com.cloud.network.Networks.TrafficType;
3636
import com.cloud.resource.ResourceState;
37+
import com.cloud.storage.Storage;
3738
import com.cloud.storage.Storage.TemplateType;
3839
import com.cloud.storage.Storage.StoragePoolType;
3940
import com.cloud.storage.Volume;
@@ -198,6 +199,9 @@ public class UserVmJoinVO extends BaseViewWithTagInformationVO implements Contro
198199
@Column(name = "template_display_text", length = 4096)
199200
private String templateDisplayText;
200201

202+
@Column(name = "template_format")
203+
private Storage.ImageFormat templateFormat;
204+
201205
@Column(name = "password_enabled")
202206
private boolean passwordEnabled;
203207

@@ -644,6 +648,10 @@ public String getTemplateDisplayText() {
644648
return templateDisplayText;
645649
}
646650

651+
public Storage.ImageFormat getTemplateFormat() {
652+
return templateFormat;
653+
}
654+
647655
public boolean isPasswordEnabled() {
648656
return passwordEnabled;
649657
}

server/src/test/java/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,11 @@
1616
// under the License.
1717
package com.cloud.api.query.dao;
1818

19-
import com.cloud.api.query.vo.UserVmJoinVO;
20-
import com.cloud.storage.Storage;
21-
import com.cloud.storage.VnfTemplateDetailVO;
22-
import com.cloud.storage.VnfTemplateNicVO;
23-
import com.cloud.storage.dao.VnfTemplateDetailsDao;
24-
import com.cloud.storage.dao.VnfTemplateNicDao;
25-
import com.cloud.user.Account;
26-
import com.cloud.user.AccountManager;
27-
import com.cloud.user.UserStatisticsVO;
28-
import com.cloud.user.dao.UserDao;
29-
import com.cloud.user.dao.UserStatisticsDao;
30-
import com.cloud.utils.db.SearchBuilder;
31-
import com.cloud.utils.db.SearchCriteria;
32-
import com.cloud.vm.dao.UserVmDetailsDao;
19+
import static org.mockito.ArgumentMatchers.nullable;
20+
21+
import java.util.Arrays;
22+
import java.util.EnumSet;
23+
3324
import org.apache.cloudstack.annotation.dao.AnnotationDao;
3425
import org.apache.cloudstack.api.ApiConstants;
3526
import org.apache.cloudstack.api.ResponseObject;
@@ -44,10 +35,20 @@
4435
import org.mockito.Mockito;
4536
import org.mockito.junit.MockitoJUnitRunner;
4637

47-
import java.util.Arrays;
48-
import java.util.EnumSet;
49-
50-
import static org.mockito.ArgumentMatchers.nullable;
38+
import com.cloud.api.query.vo.UserVmJoinVO;
39+
import com.cloud.storage.Storage;
40+
import com.cloud.storage.VnfTemplateDetailVO;
41+
import com.cloud.storage.VnfTemplateNicVO;
42+
import com.cloud.storage.dao.VnfTemplateDetailsDao;
43+
import com.cloud.storage.dao.VnfTemplateNicDao;
44+
import com.cloud.user.Account;
45+
import com.cloud.user.AccountManager;
46+
import com.cloud.user.UserStatisticsVO;
47+
import com.cloud.user.dao.UserDao;
48+
import com.cloud.user.dao.UserStatisticsDao;
49+
import com.cloud.utils.db.SearchBuilder;
50+
import com.cloud.utils.db.SearchCriteria;
51+
import com.cloud.vm.dao.UserVmDetailsDao;
5152

5253
@RunWith(MockitoJUnitRunner.class)
5354
public class UserVmJoinDaoImplTest extends GenericDaoBaseWithTagInformationBaseTest<UserVmJoinVO, UserVmResponse> {
@@ -109,6 +110,7 @@ private void prepareNewUserVmResponseForVnfAppliance() {
109110
Mockito.when(userVmMock.getId()).thenReturn(vmId);
110111
Mockito.when(userVmMock.getTemplateId()).thenReturn(templateId);
111112
Mockito.when(userVmMock.getTemplateType()).thenReturn(Storage.TemplateType.VNF);
113+
Mockito.when(userVmMock.getTemplateFormat()).thenReturn(Storage.ImageFormat.OVA);
112114

113115
Mockito.when(caller.getId()).thenReturn(2L);
114116
Mockito.when(accountMgr.isRootAdmin(nullable(Long.class))).thenReturn(true);

ui/src/components/view/InfoCard.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@
524524
<div class="resource-detail-item__details">
525525
<resource-icon v-if="resource.icon" :image="getImage(resource.icon.base64image)" size="1x" style="margin-right: 5px"/>
526526
<SaveOutlined v-else />
527-
<router-link :to="{ path: '/template/' + resource.templateid }">{{ resource.templatedisplaytext || resource.templatename || resource.templateid }} </router-link>
527+
<router-link :to="{ path: (resource.templateformat === 'ISO' ? '/iso/' : '/template/') + resource.templateid }">{{ resource.templatedisplaytext || resource.templatename || resource.templateid }} </router-link>
528528
</div>
529529
</div>
530530
<div class="resource-detail-item" v-if="resource.isoid">

0 commit comments

Comments
 (0)