Skip to content

Commit 3b526c3

Browse files
authored
Merge branch 'main' into add-makefile-for-convenience
2 parents bb56e0f + b1851ba commit 3b526c3

File tree

3 files changed

+45
-24
lines changed

3 files changed

+45
-24
lines changed

.github/workflows/ci.yml

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ permissions:
2929
jobs:
3030
build:
3131
if: github.repository == 'apache/cloudstack'
32-
runs-on: ubuntu-22.04
32+
runs-on: ubuntu-24.04
3333

3434
strategy:
3535
fail-fast: false
@@ -236,7 +236,25 @@ jobs:
236236
- name: Install Build Dependencies
237237
run: |
238238
sudo apt-get update
239-
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
239+
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
240+
241+
- name: Setup IPMI Tool for CloudStack
242+
run: |
243+
# Create cloudstack-common directory if it doesn't exist
244+
sudo mkdir -p /usr/share/cloudstack-common
245+
246+
# Copy ipmitool to cloudstack-common directory if it doesn't exist
247+
if [ ! -f /usr/share/cloudstack-common/ipmitool ]; then
248+
sudo cp /usr/bin/ipmitool /usr/share/cloudstack-common/ipmitool
249+
sudo chmod 755 /usr/share/cloudstack-common/ipmitool
250+
fi
251+
252+
# Create ipmitool-C3 wrapper script
253+
sudo tee /usr/bin/ipmitool > /dev/null << 'EOF'
254+
#!/bin/bash
255+
/usr/share/cloudstack-common/ipmitool -C3 $@
256+
EOF
257+
sudo chmod 755 /usr/bin/ipmitool
240258
241259
- name: Install Python dependencies
242260
run: |
@@ -275,7 +293,7 @@ jobs:
275293
- name: Setup Simulator Prerequisites
276294
run: |
277295
sudo python3 -m pip install --upgrade netaddr mysql-connector-python
278-
python3 -m pip install --user --upgrade tools/marvin/dist/Marvin-*.tar.gz
296+
python3 -m pip install --user --upgrade tools/marvin/dist/[mM]arvin-*.tar.gz
279297
mvn -q -Pdeveloper -pl developer -Ddeploydb
280298
mvn -q -Pdeveloper -pl developer -Ddeploydb-simulator
281299

server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,10 @@ private ImportVMTaskResponse createImportVMTaskResponse(ImportVMTaskVO task) {
209209
}
210210
if (task.getVmId() != null) {
211211
UserVmVO userVm = userVmDao.findById(task.getVmId());
212-
response.setVirtualMachineId(userVm.getUuid());
212+
if (userVm != null) {
213+
// Migrated VM could have been removed from CloudStack after the migration
214+
response.setVirtualMachineId(userVm.getUuid());
215+
}
213216
}
214217
response.setCreated(task.getCreated());
215218
response.setLastUpdated(task.getUpdated());

ui/src/components/view/InfoCard.vue

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -259,26 +259,6 @@
259259
</span>
260260
</div>
261261
</div>
262-
<div class="resource-detail-item" v-if="'gpucardname' in resource && resource.gpucardname !== ''">
263-
<div class="resource-detail-item__label">{{ $t('label.gpu') }}</div>
264-
<div class="resource-detail-item__details">
265-
<font-awesome-icon
266-
:icon="['fa-solid', 'fa-microchip']"
267-
class="anticon"
268-
:style="[$store.getters.darkMode ? { color: 'rgba(255, 255, 255, 0.65)' } : { color: '#888' }]" />
269-
<span>
270-
{{ resource.gpucount ? resource.gpucount + ' x ' : '' }}
271-
<router-link v-if="resource.gpucardid" :to="{ path: '/gpucard/' + resource.gpucardid }">{{ resource.gpucardname}} </router-link>
272-
<span v-else>{{ resource.gpucardname }}</span>
273-
<router-link v-if="resource.vgpuprofilename !== 'passthrough' && resource.vgpuprofileid" :to="{ path: '/vgpuprofile/' + resource.vgpuprofileid }">{{ ' (' + resource.vgpuprofilename + ')' }}</router-link>
274-
<span v-else-if="resource.vgpuprofilename !== 'passthrough' &&resource.vgpuprofilename">{{ ' (' + resource.vgpuprofilename + ')' }}</span>
275-
<span v-if="resource.videoram || (resource.maxresolutionx || resource.maxresolutiony)">
276-
<br/>{{ ' [' + (resource.videoram ? (resource.videoram + 'MB') : '') + ((resource.videoram && resource.maxresolutionx && resource.maxresolutiony) ? ', ' : '') +
277-
(resource.maxresolutionx && resource.maxresolutiony ? resource.maxresolutionx + 'x' + resource.maxresolutiony : '') + ']' }}
278-
</span>
279-
</span>
280-
</div>
281-
</div>
282262
<div class="resource-detail-item" v-else-if="resource.memorytotalgb">
283263
<div class="resource-detail-item__label">{{ $t('label.memory') }}</div>
284264
<div class="resource-detail-item__details">
@@ -344,6 +324,26 @@
344324

345325
</div>
346326
</div>
327+
<div class="resource-detail-item" v-if="'gpucardname' in resource && resource.gpucardname !== ''">
328+
<div class="resource-detail-item__label">{{ $t('label.gpu') }}</div>
329+
<div class="resource-detail-item__details">
330+
<font-awesome-icon
331+
:icon="['fa-solid', 'fa-microchip']"
332+
class="anticon"
333+
:style="[$store.getters.darkMode ? { color: 'rgba(255, 255, 255, 0.65)' } : { color: '#888' }]" />
334+
<span>
335+
{{ resource.gpucount ? resource.gpucount + ' x ' : '' }}
336+
<router-link v-if="resource.gpucardid" :to="{ path: '/gpucard/' + resource.gpucardid }">{{ resource.gpucardname}} </router-link>
337+
<span v-else>{{ resource.gpucardname }}</span>
338+
<router-link v-if="resource.vgpuprofilename !== 'passthrough' && resource.vgpuprofileid" :to="{ path: '/vgpuprofile/' + resource.vgpuprofileid }">{{ ' (' + resource.vgpuprofilename + ')' }}</router-link>
339+
<span v-else-if="resource.vgpuprofilename !== 'passthrough' &&resource.vgpuprofilename">{{ ' (' + resource.vgpuprofilename + ')' }}</span>
340+
<span v-if="resource.videoram || (resource.maxresolutionx || resource.maxresolutiony)">
341+
<br/>{{ ' [' + (resource.videoram ? (resource.videoram + 'MB') : '') + ((resource.videoram && resource.maxresolutionx && resource.maxresolutiony) ? ', ' : '') +
342+
(resource.maxresolutionx && resource.maxresolutiony ? resource.maxresolutionx + 'x' + resource.maxresolutiony : '') + ']' }}
343+
</span>
344+
</span>
345+
</div>
346+
</div>
347347
<div class="resource-detail-item" v-if="resource.gputotal">
348348
<div class="resource-detail-item__label">{{ $t('label.gpu') }}</div>
349349
<div class="resource-detail-item__details">

0 commit comments

Comments
 (0)