This is an automated email from the ASF dual-hosted git repository. rohit pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit c1a02e1697bc1c47a16353ddc04b194044c28d90 Merge: d763169 d6a7427 Author: Rohit Yadav <rohit.ya...@shapeblue.com> AuthorDate: Mon Mar 29 16:34:22 2021 +0530 Merge remote-tracking branch 'origin/4.15' Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com> .../apache/cloudstack/api/ApiServerService.java | 2 -- .../api/command/admin/acl/ImportRoleCmd.java | 3 -- .../volume/datastore/PrimaryDataStoreHelper.java | 2 ++ .../hypervisor/vmware/resource/VmwareResource.java | 8 ++++- ...ernetesClusterResourceModifierActionWorker.java | 34 ++++++++++++++++++++++ .../KubernetesClusterStartWorker.java | 2 ++ server/src/main/java/com/cloud/api/ApiServer.java | 11 ------- .../com/cloud/storage/VolumeApiServiceImpl.java | 9 +++++- .../main/java/com/cloud/vm/UserVmManagerImpl.java | 28 ++++++++++++++---- ui/public/locales/en.json | 1 + ui/src/components/view/ListResourceTable.vue | 3 +- ui/src/components/view/ResourceLimitTab.vue | 1 + ui/src/style/vars.less | 8 ++++- ui/src/views/AutogenView.vue | 26 ++++++++++++++--- ui/src/views/compute/AssignInstance.vue | 20 ++++++++++--- ui/src/views/compute/AttachIso.vue | 3 +- ui/src/views/compute/ChangeAffinity.vue | 3 +- ui/src/views/compute/CreateKubernetesCluster.vue | 3 +- ui/src/views/compute/CreateSSHKeyPair.vue | 3 +- ui/src/views/compute/CreateSnapshotWizard.vue | 3 +- ui/src/views/compute/DeployVM.vue | 13 ++++++++- ui/src/views/compute/DestroyVM.vue | 3 +- ui/src/views/compute/EditVM.vue | 3 +- ui/src/views/compute/InstanceTab.vue | 10 ++++--- ui/src/views/compute/MigrateWizard.vue | 3 +- ui/src/views/compute/ScaleKubernetesCluster.vue | 3 +- ui/src/views/compute/StartVirtualMachine.vue | 3 +- ui/src/views/compute/UpgradeKubernetesCluster.vue | 3 +- ui/src/views/compute/backup/FormSchedule.vue | 3 +- .../compute/wizard/ComputeOfferingSelection.vue | 13 ++++++++- ui/src/views/compute/wizard/ComputeSelection.vue | 2 ++ ui/src/views/compute/wizard/DiskSizeSelection.vue | 1 + ui/src/views/compute/wizard/MultiDiskSelection.vue | 1 + .../views/compute/wizard/NetworkConfiguration.vue | 8 +++-- ui/src/views/iam/AddAccount.vue | 3 +- ui/src/views/iam/AddLdapAccount.vue | 2 +- ui/src/views/iam/AddUser.vue | 3 +- ui/src/views/iam/ChangeUserPassword.vue | 3 +- ui/src/views/iam/ConfigureSamlSsoAuth.vue | 1 + ui/src/views/iam/CreateRole.vue | 3 +- ui/src/views/iam/DomainActionForm.vue | 17 ++++++++++- ui/src/views/iam/EditUser.vue | 3 +- ui/src/views/iam/ImportRole.vue | 3 +- ui/src/views/iam/PermissionEditable.vue | 3 +- .../views/image/AddKubernetesSupportedVersion.vue | 3 +- ui/src/views/image/IsoZones.vue | 3 +- ui/src/views/image/RegisterOrUploadIso.vue | 5 ++-- ui/src/views/image/RegisterOrUploadTemplate.vue | 5 ++-- ui/src/views/image/TemplateZones.vue | 3 +- .../image/UpdateKubernetesSupportedVersion.vue | 3 +- .../views/image/UpdateTemplateIsoPermissions.vue | 6 +++- ui/src/views/infra/AddPrimaryStorage.vue | 5 +++- ui/src/views/infra/AddSecondaryStorage.vue | 2 +- ui/src/views/infra/ClusterAdd.vue | 2 +- ui/src/views/infra/HostAdd.vue | 2 +- ui/src/views/infra/MigrateData.vue | 1 + ui/src/views/infra/PodAdd.vue | 3 +- ui/src/views/infra/network/DedicatedVLANTab.vue | 1 + ui/src/views/infra/network/EditTrafficLabel.vue | 1 + .../views/infra/network/IpRangesTabManagement.vue | 1 + ui/src/views/infra/network/IpRangesTabPublic.vue | 3 +- ui/src/views/infra/network/IpRangesTabStorage.vue | 1 + ui/src/views/infra/network/ServiceProvidersTab.vue | 4 +++ .../infra/network/providers/AddF5LoadBalancer.vue | 1 + .../network/providers/AddNetscalerLoadBalancer.vue | 1 + .../infra/network/providers/AddNiciraNvpDevice.vue | 1 + .../network/providers/AddPaloAltoFirewall.vue | 1 + .../infra/network/providers/AddSrxFirewall.vue | 1 + ui/src/views/infra/routers/RouterHealthCheck.vue | 3 +- .../views/infra/zone/AdvancedGuestTrafficForm.vue | 1 + ui/src/views/infra/zone/IpAddressRangeForm.vue | 1 + ui/src/views/infra/zone/StaticInputsForm.vue | 4 +++ .../zone/ZoneWizardPhysicalNetworkSetupStep.vue | 2 +- .../views/infra/zone/ZoneWizardZoneDetailsStep.vue | 1 + ui/src/views/infra/zone/ZoneWizardZoneTypeStep.vue | 1 + ui/src/views/network/AclListRulesTab.vue | 6 ++-- ui/src/views/network/CreateIsolatedNetworkForm.vue | 3 +- ui/src/views/network/CreateL2NetworkForm.vue | 3 +- ui/src/views/network/CreateSharedNetworkForm.vue | 3 +- ui/src/views/network/CreateVlanIpRange.vue | 1 + ui/src/views/network/CreateVpc.vue | 3 +- ui/src/views/network/CreateVpnCustomerGateway.vue | 3 +- ui/src/views/network/EgressRulesTab.vue | 2 +- ui/src/views/network/EnableStaticNat.vue | 6 +++- ui/src/views/network/FirewallRules.vue | 4 +-- .../views/network/IngressEgressRuleConfigure.vue | 10 +++++-- ui/src/views/network/InternalLBAssignVmForm.vue | 6 +++- ui/src/views/network/IpAddressesTab.vue | 2 ++ ui/src/views/network/LoadBalancing.vue | 12 +++++--- ui/src/views/network/PortForwarding.vue | 5 +++- ui/src/views/network/StaticRoutesTab.vue | 6 ++-- ui/src/views/network/VpcTab.vue | 8 +++-- ui/src/views/network/VpcTiersTab.vue | 4 ++- ui/src/views/offering/AddComputeOffering.vue | 1 + ui/src/views/offering/AddDiskOffering.vue | 1 + ui/src/views/offering/AddNetworkOffering.vue | 1 + ui/src/views/offering/AddVpcOffering.vue | 1 + ui/src/views/offering/ImportBackupOffering.vue | 1 + ui/src/views/offering/UpdateOfferingAccess.vue | 2 ++ .../views/plugins/quota/EditTariffValueWizard.vue | 1 + ui/src/views/project/AddAccountOrUserToProject.vue | 6 ++-- ui/src/views/project/InvitationTokenTemplate.vue | 1 + ui/src/views/project/InvitationsTemplate.vue | 3 +- ui/src/views/project/iam/ProjectRoleTab.vue | 8 +++-- ui/src/views/storage/AttachVolume.vue | 1 + .../views/storage/CreateSnapshotFromVMSnapshot.vue | 1 + ui/src/views/storage/CreateVolume.vue | 3 +- ui/src/views/storage/FormSchedule.vue | 3 +- ui/src/views/storage/MigrateVolume.vue | 5 +++- ui/src/views/storage/ResizeVolume.vue | 4 ++- ui/src/views/storage/RestoreAttachBackupVolume.vue | 3 +- ui/src/views/storage/TakeSnapshot.vue | 3 +- ui/src/views/storage/UploadLocalVolume.vue | 3 +- .../cloudstack/utils/redfish/RedfishClient.java | 3 +- .../utils/redfish/RedfishClientTest.java | 22 ++++++++++++++ 115 files changed, 399 insertions(+), 120 deletions(-) diff --cc server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index a3f818a,737beb5..09b15bf --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@@ -145,6 -150,6 +145,8 @@@ import com.cloud.agent.api.to.deployasi import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; ++import com.cloud.api.query.dao.ServiceOfferingJoinDao; ++import com.cloud.api.query.vo.ServiceOfferingJoinVO; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityManager; import com.cloud.configuration.Config; @@@ -512,7 -515,9 +514,9 @@@ public class UserVmManagerImpl extends @Inject private UserVmDeployAsIsDetailsDao userVmDeployAsIsDetailsDao; @Inject - private StorageManager _storageManager; - private StorageManager storageMgr; ++ private StorageManager storageManager; + @Inject + private ServiceOfferingJoinDao serviceOfferingJoinDao; private ScheduledExecutorService _executor = null; private ScheduledExecutorService _vmIpFetchExecutor = null; @@@ -2046,21 -2024,14 +2050,21 @@@ if (!CollectionUtils.isEmpty(volumeLocators)) { GetVolumeStatsCommand cmd = new GetVolumeStatsCommand(poolType, poolUuid, volumeLocators); + Answer answer = null; - if (timeout > 0) { - cmd.setWait(timeout/1000); - } + if (poolType == StoragePoolType.PowerFlex) { + // Get volume stats from the pool directly instead of sending cmd to host + // Added support for ScaleIO/PowerFlex pool only - answer = _storageManager.getVolumeStats(storagePool, cmd); ++ answer = storageManager.getVolumeStats(storagePool, cmd); + } else { + if (timeout > 0) { + cmd.setWait(timeout/1000); + } - Answer answer = _agentMgr.easySend(neighbor.getId(), cmd); + answer = _agentMgr.easySend(neighbor.getId(), cmd); + } - if (answer instanceof GetVolumeStatsAnswer){ + if (answer != null && answer instanceof GetVolumeStatsAnswer){ GetVolumeStatsAnswer volstats = (GetVolumeStatsAnswer)answer; if (volstats.getVolumeStats() != null) { volumeStatsByUuid.putAll(volstats.getVolumeStats()); @@@ -6349,7 -6262,7 +6365,7 @@@ HypervisorType hypervisorType = _volsDao.getHypervisorType(volume.getId()); if (hypervisorType.equals(HypervisorType.VMware)) { try { - boolean isStoragePoolStoragepolicyComplaince = _storageManager.isStoragePoolComplaintWithStoragePolicy(Arrays.asList(volume), pool); - boolean isStoragePoolStoragepolicyComplaince = storageMgr.isStoragePoolComplaintWithStoragePolicy(Arrays.asList(volume), pool); ++ boolean isStoragePoolStoragepolicyComplaince = storageManager.isStoragePoolComplaintWithStoragePolicy(Arrays.asList(volume), pool); if (!isStoragePoolStoragepolicyComplaince) { throw new CloudRuntimeException(String.format("Storage pool %s is not storage policy compliance with the volume %s", pool.getUuid(), volume.getUuid())); } diff --cc ui/src/views/storage/TakeSnapshot.vue index a898491,59cc003..735229f --- a/ui/src/views/storage/TakeSnapshot.vue +++ b/ui/src/views/storage/TakeSnapshot.vue @@@ -31,10 -31,11 +31,11 @@@ <a-form-item :label="$t('label.name')"> <a-input v-decorator="['name']" - :placeholder="apiParams.name.description" /> + :placeholder="apiParams.name.description" + autoFocus /> </a-form-item> </a-col> - <a-col :md="24" :lg="24"> + <a-col :md="24" :lg="24" v-if="!supportsStorageSnapshot"> <a-form-item :label="$t('label.asyncbackup')"> <a-switch v-decorator="['asyncbackup']" /> </a-form-item>