public async Task CloneTemplate(HypervisorNode node, int templateId, int vmId, string srcNode = null) { var sourceNode = srcNode ?? HypervisorNode.Name; await LoginIfNotLoggedIn(); await PerformRequest(() => client.Nodes[sourceNode].Qemu[templateId].Clone.CloneVm(vmId, target: node.Name)); }
protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); Badge.OnModelCreating(builder); User.OnModelCreating(builder); // module section Module.OnModelCreating(builder); Lab.OnModelCreating(builder); LabVm.OnModelCreating(builder); UserModule.OnModelCreating(builder); // user module section UserModule.OnModelCreating(builder); UserLab.OnModelCreating(builder); UserLabVm.OnModelCreating(builder); // hypervisor Hypervisor.OnModelCreating(builder); HypervisorNode.OnModelCreating(builder); // configure many to many relationship UserUserModule.OnModelCreating(builder); ContactEmail.OnModelCreating(builder); BridgeInstance.OnModelCreating(builder); VmInterfaceTemplate.OnModelCreating(builder); VmInterfaceInstance.OnModelCreating(builder); BridgeTemplate.OnModelCreating(builder); VmTemplate.OnModelCreating(builder); }
public async Task <int> CloneTemplate(HypervisorNode node, int vmId, string srcNode = null) { await LoginIfNotLoggedIn(); var newVmId = await GetNextAvailableVmId(); await CloneTemplate(node, vmId, newVmId); return(newVmId); }
public override async Task Run(AddHypervisorNodeOptions options) { var hypervisorNode = new HypervisorNode { Name = options.Name, HypervisorId = options.HypervisorId }; _context.HypervisorNodes.Add(hypervisorNode); await _context.SaveChangesAsync(); System.Console.WriteLine("Added Hypervisor Node:"); System.Console.WriteLine(JsonConvert.SerializeObject(hypervisorNode)); }
public void Setup() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", false, true); IConfiguration configuration = builder.Build(); var apiSection = configuration.GetSection("Api"); _hypervisorNode = new HypervisorNode { Name = apiSection["Node"], Hypervisor = new Hypervisor { Host = apiSection["Host"], UserName = apiSection["Username"], Password = apiSection["Password"] } }; _vmId = int.Parse(apiSection["VmId"]); client = new ProxmoxApi(_hypervisorNode, apiSection["Password"]); }
public async Task <NodeStatus> GetNodeStatus(HypervisorNode node = null) { if (node == null) { node = HypervisorNode; } await LoginIfNotLoggedIn(); var response = await PerformRequest(() => this.client.Nodes[node.Name].Status.Status()); var data = response.Response.data; var nodeStatus = new NodeStatus { CpuUsage = data.cpu * 100, MemoryUsage = new MemoryUsage { Free = data.memory.free, Used = data.memory.used, Total = data.memory.total } }; return(nodeStatus); }
public ProxmoxApi GetProxmoxApi(HypervisorNode node) { var password = Cryptography.DecryptString(node.Hypervisor.Password, _encryptionKey); return(new ProxmoxApi(node, password)); }
public HypervisorVmTemplate GetTemplateWithNode(HypervisorNode node) { return(VmTemplate.HypervisorVmTemplates.First(t => t.HypervisorNode == node)); }
public ProxmoxApi(HypervisorNode hypervisorNode, string password) { client = new PveClient(hypervisorNode.Hypervisor.Host); HypervisorNode = hypervisorNode; _password = password; }
public async Task LinkVmToBridgesAndAddInstances(UserLab userLab, UserLabVm vm, ProxmoxApi api, HypervisorNode node) { await LinkVmToBridges(userLab, vm, api, node); foreach (var templateInterface in vm.LabVm.TemplateInterfaces) { var bridge = userLab.BridgeInstances.First(b => b.BridgeTemplate == templateInterface.BridgeTemplate); vm.InterfaceInstances.Add(new VmInterfaceInstance { BridgeInstance = bridge, Template = templateInterface }); } }
public async Task LinkVmToBridges(UserLab userLab, UserLabVm vm, ProxmoxApi api, HypervisorNode node) { foreach (var templateInterface in vm.LabVm.TemplateInterfaces) { var bridge = userLab.BridgeInstances.First(b => b.BridgeTemplate == templateInterface.BridgeTemplate); await api.AddBridgeToVm(vm.ProxmoxVmId, bridge.HypervisorInterfaceId, templateInterface.InterfaceNumber, node.Name); } }