Skip to content

Commit 0c05a72

Browse files
committed
Adjusted image path in the vm details
1 parent 62793a0 commit 0c05a72

2 files changed

Lines changed: 28 additions & 11 deletions

File tree

host-agent/debian/changelog

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
firecracker-cloudstack-agent (0.3.0-0) unstable; urgency=medium
1+
firecracker-cloudstack-agent (0.3.0-1) unstable; urgency=medium
22

33
* Added a Vue-based host dashboard served from the agent (/ui) with
44
basic-auth backed by the existing API.
@@ -13,7 +13,7 @@ firecracker-cloudstack-agent (0.3.0-0) unstable; urgency=medium
1313
* Extend the Debian packaging to build the UI bundle with npm and install the
1414
generated `dist/` assets alongside the agent.
1515

16-
-- Marco Sinhoreli <msinhore@gmail.com> Tue, 14 Oct 2025 23:58:00 +0000
16+
-- Marco Sinhoreli <msinhore@gmail.com> Tue, 15 Oct 2025 00:26:00 +0000
1717

1818
firecracker-cloudstack-agent (0.2.0-1) unstable; urgency=medium
1919

host-agent/ui/src/components/VmDetails.vue

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
</section>
9999

100100
<section>
101-
<h3 class="section-title">Image & Payload</h3>
101+
<h3 class="section-title">Template</h3>
102102
<table class="details-table">
103103
<tbody>
104104
<tr>
@@ -185,16 +185,33 @@ const storageSizeLabel = computed(() => {
185185
const networkInterfaces = computed(() => props.details?.network?.interfaces || []);
186186
const originImageLabel = computed(() => {
187187
const config = props.details?.firecracker_config;
188-
if (config && typeof config.image_idr === "string" && config.image_idr.trim()) {
189-
return config.image_idr;
188+
const baseDir =
189+
(config && typeof config.image_dir === "string" && config.image_dir.trim()) ||
190+
props.details?.agent_defaults?.host?.image_dir;
191+
192+
const fromConfig = config && typeof config.image_idr === "string" && config.image_idr.trim();
193+
const legacyConfig = config && typeof config.image_id === "string" && config.image_id.trim();
194+
const payloadImage = props.details?.payload?.image;
195+
196+
const imageToken = fromConfig || legacyConfig || payloadImage;
197+
if (!imageToken || typeof imageToken !== "string" || !imageToken.trim()) {
198+
return "-";
190199
}
191-
if (config && typeof config.image_id === "string" && config.image_id.trim()) {
192-
return config.image_id;
200+
201+
if (
202+
imageToken.startsWith("/") ||
203+
imageToken.startsWith("./") ||
204+
imageToken.startsWith("../") ||
205+
imageToken.includes(":\\")
206+
) {
207+
return imageToken;
193208
}
194-
const payloadImage = props.details?.payload?.image;
195-
if (typeof payloadImage === "string" && payloadImage.trim()) {
196-
return payloadImage;
209+
210+
if (!baseDir) {
211+
return imageToken;
197212
}
198-
return "-";
213+
214+
const sanitizedBase = baseDir.endsWith("/") ? baseDir.slice(0, -1) : baseDir;
215+
return `${sanitizedBase}/${imageToken}`;
199216
});
200217
</script>

0 commit comments

Comments
 (0)