app.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const API_BASE = window.location.origin;
  2. async function loadVMs() {
  3. try {
  4. const response = await fetch(`${API_BASE}/vms`);
  5. const data = await response.json();
  6. const tbody = document.getElementById('vmTableBody');
  7. tbody.innerHTML = '';
  8. data.vms.forEach(vm => {
  9. const row = document.createElement('tr');
  10. row.innerHTML = `
  11. <td>${vm.id}</td>
  12. <td>${vm.name}</td>
  13. <td>${vm.state}</td>
  14. <td>
  15. <button class="btn btn-sm btn-success" onclick="startVM(${vm.id})">Start</button>
  16. <button class="btn btn-sm btn-warning" onclick="stopVM(${vm.id})">Stop</button>
  17. <button class="btn btn-sm btn-danger" onclick="deleteVM('${vm.name}')">Delete</button>
  18. </td>
  19. `;
  20. tbody.appendChild(row);
  21. });
  22. } catch (error) {
  23. console.error('Error loading VMs:', error);
  24. alert('Error loading VMs');
  25. }
  26. }
  27. async function startVM(id) {
  28. try {
  29. await fetch(`${API_BASE}/vms/${id}/start`);
  30. loadVMs();
  31. } catch (error) {
  32. console.error('Error starting VM:', error);
  33. alert('Error starting VM');
  34. }
  35. }
  36. async function stopVM(id) {
  37. try {
  38. await fetch(`${API_BASE}/vms/${id}/stop`);
  39. loadVMs();
  40. } catch (error) {
  41. console.error('Error stopping VM:', error);
  42. alert('Error stopping VM');
  43. }
  44. }
  45. async function deleteVM(name) {
  46. if (confirm(`Delete VM ${name}?`)) {
  47. try {
  48. await fetch(`${API_BASE}/vms/${name}`, { method: 'DELETE' });
  49. loadVMs();
  50. } catch (error) {
  51. console.error('Error deleting VM:', error);
  52. alert('Error deleting VM');
  53. }
  54. }
  55. }
  56. document.getElementById('createVMForm').addEventListener('submit', async (e) => {
  57. e.preventDefault();
  58. const name = document.getElementById('name').value;
  59. const memory = document.getElementById('memory').value;
  60. const disk_size = document.getElementById('disk_size').value;
  61. const iso = document.getElementById('iso').value;
  62. try {
  63. const response = await fetch(`${API_BASE}/vms?name=${name}&memory=${memory}&disk_size=${disk_size}&iso=${iso}`, {
  64. method: 'POST'
  65. });
  66. const result = await response.json();
  67. if (response.ok) {
  68. alert(result.message);
  69. loadVMs();
  70. document.getElementById('createVMForm').reset();
  71. } else {
  72. alert(result.error);
  73. }
  74. } catch (error) {
  75. console.error('Error creating VM:', error);
  76. alert('Error creating VM');
  77. }
  78. });
  79. // Load VMs on page load
  80. loadVMs();