This is an automated email from the ASF dual-hosted git repository.

weizhou pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.19 by this push:
     new daf6b9d1030 api,ui: vm template format, fix vm info link (#9094)
daf6b9d1030 is described below

commit daf6b9d1030188bb129e44e2cdd7a4f65a2bbb0f
Author: Abhishek Kumar <[email protected]>
AuthorDate: Fri May 24 21:09:52 2024 +0530

    api,ui: vm template format, fix vm info link (#9094)
---
 .../org/apache/cloudstack/api/ApiConstants.java    |  1 +
 .../cloudstack/api/response/UserVmResponse.java    | 12 +++++++
 .../META-INF/db/views/cloud.user_vm_view.sql       |  1 +
 .../com/cloud/api/query/dao/UserVmJoinDaoImpl.java |  1 +
 .../java/com/cloud/api/query/vo/UserVmJoinVO.java  |  8 +++++
 .../cloud/api/query/dao/UserVmJoinDaoImplTest.java | 38 ++++++++++++----------
 ui/src/components/view/InfoCard.vue                |  2 +-
 7 files changed, 44 insertions(+), 19 deletions(-)

diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java 
b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
index b5fab14ccb6..7565b679e58 100644
--- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
@@ -448,6 +448,7 @@ public class ApiConstants {
     public static final String TEMPLATE_IDS = "templateids";
     public static final String TEMPLATE_NAME = "templatename";
     public static final String TEMPLATE_TYPE = "templatetype";
+    public static final String TEMPLATE_FORMAT = "templateformat";
     public static final String TIMEOUT = "timeout";
     public static final String TIMEZONE = "timezone";
     public static final String TIMEZONEOFFSET = "timezoneoffset";
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java 
b/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
index 763265e109d..5a0ea77a4e7 100644
--- a/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
@@ -137,6 +137,10 @@ public class UserVmResponse extends 
BaseResponseWithTagInformation implements Co
     @Param(description = "the type of the template for the virtual machine", 
since = "4.19.0")
     private String templateType;
 
+    @SerializedName(ApiConstants.TEMPLATE_FORMAT)
+    @Param(description = "the format of the template for the virtual machine", 
since = "4.19.1")
+    private String templateFormat;
+
     @SerializedName("templatedisplaytext")
     @Param(description = " an alternate display text of the template for the 
virtual machine")
     private String templateDisplayText;
@@ -1076,6 +1080,14 @@ public class UserVmResponse extends 
BaseResponseWithTagInformation implements Co
         this.templateType = templateType;
     }
 
+    public String getTemplateFormat() {
+        return templateFormat;
+    }
+
+    public void setTemplateFormat(String templateFormat) {
+        this.templateFormat = templateFormat;
+    }
+
     public List<VnfNicResponse> getVnfNics() {
         return vnfNics;
     }
diff --git 
a/engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql 
b/engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql
index 7a057dc0330..25f95709721 100644
--- a/engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql
+++ b/engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql
@@ -74,6 +74,7 @@ SELECT
     `vm_template`.`uuid` AS `template_uuid`,
     `vm_template`.`name` AS `template_name`,
     `vm_template`.`type` AS `template_type`,
+    `vm_template`.`format` AS `template_format`,
     `vm_template`.`display_text` AS `template_display_text`,
     `vm_template`.`enable_password` AS `password_enabled`,
     `iso`.`id` AS `iso_id`,
diff --git 
a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java 
b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
index e5cc9ee7234..828cafd7d50 100644
--- a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
+++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
@@ -198,6 +198,7 @@ public class UserVmJoinDaoImpl extends 
GenericDaoBaseWithTagInformation<UserVmJo
             
userVmResponse.setTemplateDisplayText(userVm.getTemplateDisplayText());
             userVmResponse.setPasswordEnabled(userVm.isPasswordEnabled());
             
userVmResponse.setTemplateType(userVm.getTemplateType().toString());
+            
userVmResponse.setTemplateFormat(userVm.getTemplateFormat().toString());
         }
         if (details.contains(VMDetails.all) || 
details.contains(VMDetails.iso)) {
             userVmResponse.setIsoId(userVm.getIsoUuid());
diff --git a/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java 
b/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
index a465e8990e7..8b26097ae7f 100644
--- a/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
@@ -34,6 +34,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.network.Network.GuestType;
 import com.cloud.network.Networks.TrafficType;
 import com.cloud.resource.ResourceState;
+import com.cloud.storage.Storage;
 import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Volume;
@@ -198,6 +199,9 @@ public class UserVmJoinVO extends 
BaseViewWithTagInformationVO implements Contro
     @Column(name = "template_display_text", length = 4096)
     private String templateDisplayText;
 
+    @Column(name = "template_format")
+    private Storage.ImageFormat templateFormat;
+
     @Column(name = "password_enabled")
     private boolean passwordEnabled;
 
@@ -644,6 +648,10 @@ public class UserVmJoinVO extends 
BaseViewWithTagInformationVO implements Contro
         return templateDisplayText;
     }
 
+    public Storage.ImageFormat getTemplateFormat() {
+        return templateFormat;
+    }
+
     public boolean isPasswordEnabled() {
         return passwordEnabled;
     }
diff --git 
a/server/src/test/java/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java 
b/server/src/test/java/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java
index 320c556fc51..95878c00b66 100755
--- a/server/src/test/java/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java
+++ b/server/src/test/java/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java
@@ -16,20 +16,11 @@
 // under the License.
 package com.cloud.api.query.dao;
 
-import com.cloud.api.query.vo.UserVmJoinVO;
-import com.cloud.storage.Storage;
-import com.cloud.storage.VnfTemplateDetailVO;
-import com.cloud.storage.VnfTemplateNicVO;
-import com.cloud.storage.dao.VnfTemplateDetailsDao;
-import com.cloud.storage.dao.VnfTemplateNicDao;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.UserStatisticsVO;
-import com.cloud.user.dao.UserDao;
-import com.cloud.user.dao.UserStatisticsDao;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.vm.dao.UserVmDetailsDao;
+import static org.mockito.ArgumentMatchers.nullable;
+
+import java.util.Arrays;
+import java.util.EnumSet;
+
 import org.apache.cloudstack.annotation.dao.AnnotationDao;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ResponseObject;
@@ -44,10 +35,20 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.util.Arrays;
-import java.util.EnumSet;
-
-import static org.mockito.ArgumentMatchers.nullable;
+import com.cloud.api.query.vo.UserVmJoinVO;
+import com.cloud.storage.Storage;
+import com.cloud.storage.VnfTemplateDetailVO;
+import com.cloud.storage.VnfTemplateNicVO;
+import com.cloud.storage.dao.VnfTemplateDetailsDao;
+import com.cloud.storage.dao.VnfTemplateNicDao;
+import com.cloud.user.Account;
+import com.cloud.user.AccountManager;
+import com.cloud.user.UserStatisticsVO;
+import com.cloud.user.dao.UserDao;
+import com.cloud.user.dao.UserStatisticsDao;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.vm.dao.UserVmDetailsDao;
 
 @RunWith(MockitoJUnitRunner.class)
 public class UserVmJoinDaoImplTest extends 
GenericDaoBaseWithTagInformationBaseTest<UserVmJoinVO, UserVmResponse> {
@@ -109,6 +110,7 @@ public class UserVmJoinDaoImplTest extends 
GenericDaoBaseWithTagInformationBaseT
         Mockito.when(userVmMock.getId()).thenReturn(vmId);
         Mockito.when(userVmMock.getTemplateId()).thenReturn(templateId);
         
Mockito.when(userVmMock.getTemplateType()).thenReturn(Storage.TemplateType.VNF);
+        
Mockito.when(userVmMock.getTemplateFormat()).thenReturn(Storage.ImageFormat.OVA);
 
         Mockito.when(caller.getId()).thenReturn(2L);
         
Mockito.when(accountMgr.isRootAdmin(nullable(Long.class))).thenReturn(true);
diff --git a/ui/src/components/view/InfoCard.vue 
b/ui/src/components/view/InfoCard.vue
index 66c878da0f8..a4fa1191d13 100644
--- a/ui/src/components/view/InfoCard.vue
+++ b/ui/src/components/view/InfoCard.vue
@@ -524,7 +524,7 @@
           <div class="resource-detail-item__details">
             <resource-icon v-if="resource.icon" 
:image="getImage(resource.icon.base64image)" size="1x" style="margin-right: 
5px"/>
             <SaveOutlined v-else />
-            <router-link :to="{ path: '/template/' + resource.templateid }">{{ 
resource.templatedisplaytext || resource.templatename || resource.templateid }} 
</router-link>
+            <router-link :to="{ path: (resource.templateformat === 'ISO' ? 
'/iso/' : '/template/') + resource.templateid }">{{ 
resource.templatedisplaytext || resource.templatename || resource.templateid }} 
</router-link>
           </div>
         </div>
         <div class="resource-detail-item" v-if="resource.isoid">

Reply via email to