This is an automated email from the ASF dual-hosted git repository. shwstppr pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit acce88ff392c72c0de558fb16ea0a6e18cfd98bf Merge: e817e04343a 57e67afdf0d Author: Abhishek Kumar <[email protected]> AuthorDate: Mon May 27 15:14:29 2024 +0530 Merge remote-tracking branch 'apache/4.19' .../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 +++ .../com/cloud/network/as/AutoScaleManagerImpl.java | 5 ++ .../cloud/api/query/dao/UserVmJoinDaoImplTest.java | 40 ++++++------ ui/src/components/view/InfoCard.vue | 2 +- ui/src/config/section/image.js | 2 +- ui/src/views/image/RegisterOrUploadIso.vue | 71 +++++++++++++--------- ui/src/views/image/UpdateISO.vue | 8 ++- .../views/project/iam/ProjectRolePermissionTab.vue | 2 +- 12 files changed, 100 insertions(+), 53 deletions(-) diff --cc server/src/test/java/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java index fa95aefbd87,95878c00b66..28bb998c5ce --- 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 +16,12 @@@ // 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 static org.mockito.MockitoAnnotations.openMocks; + + 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; diff --cc ui/src/config/section/image.js index e6095c4aba1,aa21b262037..1f7fa0f30e3 --- a/ui/src/config/section/image.js +++ b/ui/src/config/section/image.js @@@ -231,7 -231,7 +231,7 @@@ export default } return fields }, - details: ['name', 'id', 'displaytext', 'checksum', 'ostypename', 'size', 'bootable', 'isready', 'passwordenabled', 'directdownload', 'isextractable', 'ispublic', 'isfeatured', 'crosszones', 'account', 'domain', 'created', 'userdatadetails', 'userdatapolicy', 'url'], - details: ['name', 'id', 'displaytext', 'checksum', 'ostypename', 'size', 'bootable', 'isready', 'directdownload', 'isextractable', 'ispublic', 'isfeatured', 'isdynamicallyscalable', 'crosszones', 'account', 'domain', 'created', 'userdatadetails', 'userdatapolicy', 'url'], ++ details: ['name', 'id', 'displaytext', 'checksum', 'ostypename', 'size', 'bootable', 'isready', 'passwordenabled', 'directdownload', 'isextractable', 'ispublic', 'isfeatured', 'isdynamicallyscalable', 'crosszones', 'account', 'domain', 'created', 'userdatadetails', 'userdatapolicy', 'url'], searchFilters: () => { var filters = ['name', 'zoneid', 'tags'] if (['Admin', 'DomainAdmin'].includes(store.getters.userInfo.roletype)) { diff --cc ui/src/views/image/RegisterOrUploadIso.vue index 746cdb2f984,f27676b8e7f..edc6b82b92d --- a/ui/src/views/image/RegisterOrUploadIso.vue +++ b/ui/src/views/image/RegisterOrUploadIso.vue @@@ -227,35 -227,39 +227,45 @@@ </a-col> </a-row> - <a-form-item ref="isextractable" name="isextractable"> - <template #label> - <tooltip-label :title="$t('label.isextractable')" :tooltip="apiParams.isextractable.description"/> - </template> - <a-switch v-model:checked="form.isextractable" /> - </a-form-item> - - <a-form-item - ref="ispublic" - name="ispublic" - v-if="$store.getters.userInfo.roletype === 'Admin' || $store.getters.features.userpublictemplateenabled" > - <template #label> - <tooltip-label :title="$t('label.ispublic')" :tooltip="apiParams.ispublic.description"/> - </template> - <a-switch v-model:checked="form.ispublic" /> - </a-form-item> - - <a-form-item ref="isfeatured" name="isfeatured" v-if="$store.getters.userInfo.roletype === 'Admin'"> - <template #label> - <tooltip-label :title="$t('label.isfeatured')" :tooltip="apiParams.isfeatured.description"/> - </template> - <a-switch v-model:checked="form.isfeatured" /> - </a-form-item> - <a-form-item ref="passwordenabled" name="passwordenabled" v-if="currentForm === 'Create'"> - <template #label> - <tooltip-label :title="$t('label.passwordenabled')" :tooltip="apiParams.passwordenabled.description"/> - </template> - <a-switch v-model:checked="form.passwordenabled" /> - </a-form-item> + <a-row :gutter="12"> + <a-col :md="24" :lg="12"> + <a-form-item ref="isdynamicallyscalable" name="isdynamicallyscalable"> + <template #label> + <tooltip-label :title="$t('label.isdynamicallyscalable')" :tooltip="apiParams.isdynamicallyscalable.description"/> + </template> + <a-switch v-model:checked="form.isdynamicallyscalable" /> + </a-form-item> + <a-form-item + ref="ispublic" + name="ispublic" + v-if="$store.getters.userInfo.roletype === 'Admin' || $store.getters.features.userpublictemplateenabled" > + <template #label> + <tooltip-label :title="$t('label.ispublic')" :tooltip="apiParams.ispublic.description"/> + </template> + <a-switch v-model:checked="form.ispublic" /> + </a-form-item> ++ <a-form-item ref="passwordenabled" name="passwordenabled" v-if="currentForm === 'Create'"> ++ <template #label> ++ <tooltip-label :title="$t('label.passwordenabled')" :tooltip="apiParams.passwordenabled.description"/> ++ </template> ++ <a-switch v-model:checked="form.passwordenabled" /> ++ </a-form-item> + </a-col> + <a-col :md="24" :lg="12"> + <a-form-item ref="isextractable" name="isextractable"> + <template #label> + <tooltip-label :title="$t('label.isextractable')" :tooltip="apiParams.isextractable.description"/> + </template> + <a-switch v-model:checked="form.isextractable" /> + </a-form-item> + <a-form-item ref="isfeatured" name="isfeatured" v-if="$store.getters.userInfo.roletype === 'Admin'"> + <template #label> + <tooltip-label :title="$t('label.isfeatured')" :tooltip="apiParams.isfeatured.description"/> + </template> + <a-switch v-model:checked="form.isfeatured" /> + </a-form-item> + </a-col> + </a-row> <div :span="24" class="action-button"> <a-button @click="closeAction">{{ $t('label.cancel') }}</a-button> @@@ -339,7 -343,7 +349,8 @@@ export default bootable: true, isextractable: false, ispublic: false, - passwordenabled: false ++ passwordenabled: false, + isdynamicallyscalable: false }) this.rules = reactive({ url: [{ required: true, message: this.$t('label.upload.iso.from.local') }], diff --cc ui/src/views/image/UpdateISO.vue index f718f1c030c,92386823c16..e3594a3c1e1 --- a/ui/src/views/image/UpdateISO.vue +++ b/ui/src/views/image/UpdateISO.vue @@@ -168,7 -168,7 +174,7 @@@ export default displaytext: [{ required: true, message: this.$t('message.error.required.input') }], ostypeid: [{ required: true, message: this.$t('message.error.select') }] }) - const resourceFields = ['name', 'displaytext', 'passwordenabled', 'ostypeid', 'userdataid', 'userdatapolicy'] - const resourceFields = ['name', 'displaytext', 'ostypeid', 'isdynamicallyscalable', 'userdataid', 'userdatapolicy'] ++ const resourceFields = ['name', 'displaytext', 'passwordenabled', 'isdynamicallyscalable', 'ostypeid', 'userdataid', 'userdatapolicy'] for (var field of resourceFields) { var fieldValue = this.resource[field]
