diff --git a/src/Tribufu.Proxmox.Tests/Program.cs b/src/Tribufu.Proxmox.Tests/Program.cs index 3afe31d..d3b104b 100644 --- a/src/Tribufu.Proxmox.Tests/Program.cs +++ b/src/Tribufu.Proxmox.Tests/Program.cs @@ -17,7 +17,7 @@ namespace Tribufu.Proxmox.Tests var proxmox = new ProxmoxClient(clusterUrl, tokenId, tokenSecret); - var nodes = await proxmox.ListNodesAsync(); + var nodes = await proxmox.ListVirtualMachinesAsync("broadwell"); foreach (var node in nodes) { Console.WriteLine($"- {node.Name}"); diff --git a/src/Tribufu.Proxmox/Interfaces/IProxmoxClient.cs b/src/Tribufu.Proxmox/Interfaces/IProxmoxClient.cs index cc05ad2..fc410a8 100644 --- a/src/Tribufu.Proxmox/Interfaces/IProxmoxClient.cs +++ b/src/Tribufu.Proxmox/Interfaces/IProxmoxClient.cs @@ -19,6 +19,8 @@ namespace Tribufu.Proxmox.Interfaces Task GetVirtualMachineStatusAsync(string node, int vmid); + Task CreateVirtualMachineAsync(string node, int vmid, string name, int memoryMb, int cores, string storage, string iso, string netConfig = "virtio,bridge=vmbr0"); + Task StartVirtualMachineAsync(string node, int vmid); Task RebootVirtualMachineAsync(string node, int vmid); diff --git a/src/Tribufu.Proxmox/ProxmoxClient.cs b/src/Tribufu.Proxmox/ProxmoxClient.cs index 60c10e0..b135b0c 100644 --- a/src/Tribufu.Proxmox/ProxmoxClient.cs +++ b/src/Tribufu.Proxmox/ProxmoxClient.cs @@ -83,6 +83,22 @@ namespace Tribufu.Proxmox return json["data"].ToObject(); } + public async Task CreateVirtualMachineAsync(string node, int vmid, string name, int memoryMb, int cores, string storage, string iso, string netConfig = "virtio,bridge=vmbr0") + { + var request = new RestRequest($"nodes/{node}/qemu", Method.Post); + request.AddParameter("vmid", vmid); + request.AddParameter("name", name); + request.AddParameter("memory", memoryMb); + request.AddParameter("cores", cores); + request.AddParameter("ide2", iso + ",media=cdrom"); + request.AddParameter("scsihw", "virtio-scsi-pci"); + request.AddParameter("scsi0", $"{storage}:32"); + request.AddParameter("net0", netConfig); + + var response = await _client.ExecuteAsync(request); + return response.IsSuccessful; + } + public async Task> ListVirtualMachinesAsync(string node) { var request = new RestRequest($"nodes/{node}/qemu", Method.Get);