|
|
@@ -98,6 +98,40 @@ async function loadVMs() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+async function loadVMsCard() {
|
|
|
+ try {
|
|
|
+ const response = await fetch(`${API_BASE}/vms`);
|
|
|
+ const data = await response.json();
|
|
|
+ const card = document.getElementById('vmCard');
|
|
|
+ card.innerHTML = '';
|
|
|
+ // const select = document.getElementById('bootVM');
|
|
|
+ //select.innerHTML = '<option value="">Select VM</option>';
|
|
|
+
|
|
|
+ data.vms.forEach(vm => {
|
|
|
+ const tarjeta = document.createElement('div');
|
|
|
+ tarjeta.className = 'card-body';
|
|
|
+
|
|
|
+ tarjeta.innerHTML = `
|
|
|
+ <h6>${vm.id}</h6>
|
|
|
+ <h5>${vm.name}</h5>
|
|
|
+ <p><span class="badge ${getStateClass(vm.state)}">${vm.state}</span></p
|
|
|
+ <button class="btn btn-sm btn-success" onclick="startVM('${vm.name}')">Lanzar</button>
|
|
|
+ <button class="btn btn-sm btn-warning" onclick="stopVM('${vm.name}')">Stop</button>
|
|
|
+ <button class="btn btn-sm btn-danger" onclick="deleteVM('${vm.name}')">Delete</button>
|
|
|
+ ${vm.vnc_port ? `<button class="btn btn-sm btn-info" onclick="openVNC('${vm.name}')">Console</button>` : ''}
|
|
|
+ `;
|
|
|
+ card.appendChild(tarjeta);
|
|
|
+ //select.innerHTML += `<option value="${vm.name}">${vm.name}</option>`;
|
|
|
+ });
|
|
|
+ //loadISOsForSelect(); // Load ISOs after loading VMs
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error loading VMs:', error);
|
|
|
+ alert('Error loading VMs');
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
async function startVM(name) {
|
|
|
try {
|
|
|
await fetch(`${API_BASE}/vms/${name}/start`);
|
|
|
@@ -236,4 +270,5 @@ document.getElementById('uploadIsoForm').addEventListener('submit', async (e) =>
|
|
|
|
|
|
// Load VMs on page load
|
|
|
loadVMs();
|
|
|
+loadVMsCard();
|
|
|
loadISOs();
|