Compare commits

...

5 Commits

Author SHA1 Message Date
Daan Hoogland
59e2c39818 4.22/main Health Check, please don't merge this!
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
2025-10-23 10:40:36 +05:30
Nicolas Vazquez
4b74a99a57
Fix: NPE thrown on VMware to KVM migration tasks listing for removed VMs (#11892) 2025-10-23 10:40:17 +05:30
Nicolas Vazquez
2fcf96267d
UI: Fix duplicate memory values on InfoCard view conditions (#11896) 2025-10-23 10:30:17 +05:30
Daan Hoogland
8bbe253b00 Merge release branch 4.20 to main
* 4.20:
  Update CI workflow to use Ubuntu 24.04 (#11873)
2025-10-22 09:51:31 +02:00
dahn
a6068a850c
Update CI workflow to use Ubuntu 24.04 (#11873) 2025-10-21 16:22:46 +02:00
4 changed files with 28 additions and 25 deletions

View File

@ -29,7 +29,7 @@ permissions:
jobs:
build:
if: github.repository == 'apache/cloudstack'
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
strategy:
fail-fast: false
@ -236,7 +236,7 @@ jobs:
- name: Install Build Dependencies
run: |
sudo apt-get update
sudo apt-get install -y git uuid-runtime genisoimage netcat ipmitool build-essential libgcrypt20 libgpg-error-dev libgpg-error0 libopenipmi0 ipmitool libpython3-dev libssl-dev libffi-dev python3-openssl python3-dev python3-setuptools
sudo apt-get install -y git uuid-runtime genisoimage netcat-openbsd ipmitool build-essential libgcrypt20 libgpg-error-dev libgpg-error0 libopenipmi0 ipmitool libpython3-dev libssl-dev libffi-dev python3-openssl python3-dev python3-setuptools
- name: Install Python dependencies
run: |
@ -275,7 +275,7 @@ jobs:
- name: Setup Simulator Prerequisites
run: |
sudo python3 -m pip install --upgrade netaddr mysql-connector-python
python3 -m pip install --user --upgrade tools/marvin/dist/Marvin-*.tar.gz
python3 -m pip install --user --upgrade tools/marvin/dist/[mM]arvin-*.tar.gz
mvn -q -Pdeveloper -pl developer -Ddeploydb
mvn -q -Pdeveloper -pl developer -Ddeploydb-simulator

View File

@ -12,7 +12,7 @@
[![Apache CloudStack](tools/logo/apache_cloudstack.png)](https://cloudstack.apache.org/)
Apache CloudStack is open source software designed to deploy and manage large
Apache CloudStack is open-source software designed to deploy and manage large
networks of virtual machines, as a highly available, highly scalable
Infrastructure as a Service (IaaS) cloud computing platform. CloudStack is used
by a number of service providers to offer public cloud services, and by many

View File

@ -209,7 +209,10 @@ public class ImportVmTasksManagerImpl implements ImportVmTasksManager {
}
if (task.getVmId() != null) {
UserVmVO userVm = userVmDao.findById(task.getVmId());
response.setVirtualMachineId(userVm.getUuid());
if (userVm != null) {
// Migrated VM could have been removed from CloudStack after the migration
response.setVirtualMachineId(userVm.getUuid());
}
}
response.setCreated(task.getCreated());
response.setLastUpdated(task.getUpdated());

View File

@ -259,26 +259,6 @@
</span>
</div>
</div>
<div class="resource-detail-item" v-if="'gpucardname' in resource && resource.gpucardname !== ''">
<div class="resource-detail-item__label">{{ $t('label.gpu') }}</div>
<div class="resource-detail-item__details">
<font-awesome-icon
:icon="['fa-solid', 'fa-microchip']"
class="anticon"
:style="[$store.getters.darkMode ? { color: 'rgba(255, 255, 255, 0.65)' } : { color: '#888' }]" />
<span>
{{ resource.gpucount ? resource.gpucount + ' x ' : '' }}
<router-link v-if="resource.gpucardid" :to="{ path: '/gpucard/' + resource.gpucardid }">{{ resource.gpucardname}} </router-link>
<span v-else>{{ resource.gpucardname }}</span>
<router-link v-if="resource.vgpuprofilename !== 'passthrough' && resource.vgpuprofileid" :to="{ path: '/vgpuprofile/' + resource.vgpuprofileid }">{{ ' (' + resource.vgpuprofilename + ')' }}</router-link>
<span v-else-if="resource.vgpuprofilename !== 'passthrough' &&resource.vgpuprofilename">{{ ' (' + resource.vgpuprofilename + ')' }}</span>
<span v-if="resource.videoram || (resource.maxresolutionx || resource.maxresolutiony)">
<br/>{{ ' [' + (resource.videoram ? (resource.videoram + 'MB') : '') + ((resource.videoram && resource.maxresolutionx && resource.maxresolutiony) ? ', ' : '') +
(resource.maxresolutionx && resource.maxresolutiony ? resource.maxresolutionx + 'x' + resource.maxresolutiony : '') + ']' }}
</span>
</span>
</div>
</div>
<div class="resource-detail-item" v-else-if="resource.memorytotalgb">
<div class="resource-detail-item__label">{{ $t('label.memory') }}</div>
<div class="resource-detail-item__details">
@ -344,6 +324,26 @@
</div>
</div>
<div class="resource-detail-item" v-if="'gpucardname' in resource && resource.gpucardname !== ''">
<div class="resource-detail-item__label">{{ $t('label.gpu') }}</div>
<div class="resource-detail-item__details">
<font-awesome-icon
:icon="['fa-solid', 'fa-microchip']"
class="anticon"
:style="[$store.getters.darkMode ? { color: 'rgba(255, 255, 255, 0.65)' } : { color: '#888' }]" />
<span>
{{ resource.gpucount ? resource.gpucount + ' x ' : '' }}
<router-link v-if="resource.gpucardid" :to="{ path: '/gpucard/' + resource.gpucardid }">{{ resource.gpucardname}} </router-link>
<span v-else>{{ resource.gpucardname }}</span>
<router-link v-if="resource.vgpuprofilename !== 'passthrough' && resource.vgpuprofileid" :to="{ path: '/vgpuprofile/' + resource.vgpuprofileid }">{{ ' (' + resource.vgpuprofilename + ')' }}</router-link>
<span v-else-if="resource.vgpuprofilename !== 'passthrough' &&resource.vgpuprofilename">{{ ' (' + resource.vgpuprofilename + ')' }}</span>
<span v-if="resource.videoram || (resource.maxresolutionx || resource.maxresolutiony)">
<br/>{{ ' [' + (resource.videoram ? (resource.videoram + 'MB') : '') + ((resource.videoram && resource.maxresolutionx && resource.maxresolutiony) ? ', ' : '') +
(resource.maxresolutionx && resource.maxresolutiony ? resource.maxresolutionx + 'x' + resource.maxresolutiony : '') + ']' }}
</span>
</span>
</div>
</div>
<div class="resource-detail-item" v-if="resource.gputotal">
<div class="resource-detail-item__label">{{ $t('label.gpu') }}</div>
<div class="resource-detail-item__details">