public VmDashboardInfo GetVm(string subscriptionId, int Id) { try { ICmpWapDb cwdb = new CmpWapDb(); ICmpWapDbTenantRepository cwdbTenant = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(Id); var vmsizes = cwdbTenant.FetchVmSizeInfoList(subscriptionId); if (null != foundVmDepRequest && null != foundVmDepRequest.CmpRequestID) { var cmpi = new VMServiceRepository(_eventLog); //when we solve the big 'method not returning' bug: uncomment line below, delete second line below //var vm = cmpi.GetVm(Convert.ToInt32(foundVmDepRequest.CmpRequestID), // CmpInterfaceModel.Constants.FetchType.AzureStatus); var vm = GetLocalvmDBI(foundVmDepRequest); cwdb.UpdateVmIp(Id, vm.InternalIP); vm.Cores = vmsizes.Where(x => x.Name == vm.RoleSize).Select(x => x.Cores).FirstOrDefault().ToString(); vm.OSVirtualHardDisk.Type = "OS Disk"; if (vm.DataVirtualHardDisks != null) { vm.DataVirtualHardDisks.Select(d => { d.Type = "Data Disk"; return(d); }).ToList(); } return(vm); } return(null); } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.VmsController.GetVm()", 100, 1); throw; } }
//********************************************************************* /// /// <summary> /// This method is used to add disk to a VM. /// </summary> /// <param name="vMId"></param> /// <param name="disks"></param> /// //********************************************************************* private void AddDisk(int vMId, List <object> disks) { try { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(vMId); if (null != foundVmDepRequest) { if (null != foundVmDepRequest.CmpRequestID) { if (!CanAddDisks((int)foundVmDepRequest.CmpRequestID, disks.Count)) { throw new Exception("Role size of given VM does not support the requested number of data disks"); } var cmpi = new VMServiceRepository(_eventLog); cmpi.AddDisk(Convert.ToInt32(foundVmDepRequest.CmpRequestID), BuildDiskObject(disks, foundVmDepRequest).ToList()); } } } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.VmsController.AddDisk()", 100, 1); throw; } }
//********************************************************************* /// /// <summary> /// This method is used to convert VMOp type in OpSpec type /// </summary> /// <param name="vmOp"></param> /// //********************************************************************* public static OpSpec Translate(VmOp vmOp) { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(vmOp.VmId); if (null == foundVmDepRequest) { throw new Exception("VM not found in DB"); } if (null == foundVmDepRequest.CmpRequestID) { throw new Exception("CmpRequestID not found for given VM"); } if (vmOp.Name == null) { vmOp.Name = string.Format("{0} : {1}", vmOp.Opcode, foundVmDepRequest.TargetVmName); } List <CmpCommon.VhdInfo> diskList = null; if (vmOp.disks != null) { diskList = BuildDiskObject(vmOp.disks, foundVmDepRequest).ToList(); } if (!String.IsNullOrEmpty(foundVmDepRequest.Domain)) { vmOp.Name += "." + foundVmDepRequest.Domain; foundVmDepRequest.TargetVmName += "." + foundVmDepRequest.Domain; } return(new OpSpec() { Config = vmOp.Config, Disks = diskList, Id = vmOp.Id, Name = vmOp.Name, Opcode = vmOp.Opcode, StatusCode = vmOp.StatusCode, StatusMessage = vmOp.StatusMessage, TargetId = (int)foundVmDepRequest.CmpRequestID, TargetName = foundVmDepRequest.TargetVmName, TargetType = "VM", Vmsize = vmOp.Vmsize, iData = vmOp.iData, sData = vmOp.sData }); }
public IQueryable <DataVirtualHardDisk> GetDetachedDisks(string subscriptionId, int vmId) { try { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(vmId); var cmpi = new VMServiceRepository(_eventLog); return(cmpi.GetDetachedDisks(foundVmDepRequest.CmpRequestID).Select(d => new DataVirtualHardDisk { DiskName = d.DiskName, }).AsQueryable()); } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.DisksController.GetDetachedDisks()", 100, 1); throw; } }
//********************************************************************* /// /// <summary> /// This method is used to delete a VM. /// </summary> /// <param name="vMId"></param> /// <param name="deleteFromStorage"></param> /// //********************************************************************* private void DeleteVm(int vMId, bool deleteFromStorage) { try { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(vMId); if (null != foundVmDepRequest) { var cmpi = new VMServiceRepository(_eventLog); cmpi.DeleteVm(Convert.ToInt32(foundVmDepRequest.CmpRequestID), deleteFromStorage); } DeleteWapdbRecord(vMId, cwdb); } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.VmsController.DeleteVm()", 100, 1); throw; } }
//********************************************************************* /// /// <summary> /// This method is used to restart a VM. /// </summary> /// <param name="vMId"></param> /// //********************************************************************* private void RestartVm(int vMId) { try { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(vMId); if (null != foundVmDepRequest) { if (null != foundVmDepRequest.CmpRequestID) { var cmpi = new VMServiceRepository(_eventLog); cmpi.RebootVm((int)foundVmDepRequest.CmpRequestID); } } } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.VmsController.ResetVm()", 100, 1); throw; } }
private void AttachExistingDisks(int vMId, IList <object> disks) { try { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(vMId); if (foundVmDepRequest != null) { var cmpi = new VMServiceRepository(_eventLog); var disk = disks.Select(d => new VhdInfo { DiskName = d.ToString() }).FirstOrDefault(); cmpi.AttachExistingDisk(foundVmDepRequest.CmpRequestID, disk); } } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.VmsController.AttachExistingDisks()", 100, 1); throw; } }
public IHttpActionResult GetVmOpsQueueStatus(string subscriptionId, int Id) { try { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(Id); if (null != foundVmDepRequest) { var cmpi = new VMServiceRepository(_eventLog); var vmOpsInfo = cmpi.GetVmOpsRequestSpec(foundVmDepRequest.TargetVmName); if (vmOpsInfo == null) { BadRequest("Can't retrieve ops queue status"); } else { if (vmOpsInfo.StatusCode == CmpInterfaceModel.Constants.StatusEnum.Complete.ToString()) { if (vmOpsInfo.Opcode == CmpInterfaceModel.Constants.VmOpcodeEnum.DELETE.ToString() || // Delete VM record from wap db if delete operation is selected vmOpsInfo.Opcode == CmpInterfaceModel.Constants.VmOpcodeEnum.DELETEFROMSTORAGE.ToString()) { DeleteWapdbRecord(Id, cwdb); } } return(Ok(vmOpsInfo)); } } return(BadRequest("Can't find VM deployment request data")); } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.VMOpsController.GetVMOpsQueueStatus()", 100, 1); return(BadRequest(ex.Message)); } }
//********************************************************************* /// /// <summary> /// This method is used to resize a VM. /// </summary> /// <param name="vMId"></param> /// <param name="size"></param> /// //********************************************************************* private void ResizeVm(int vMId, string size) { try { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(vMId); if (null != foundVmDepRequest) { if (null != foundVmDepRequest.CmpRequestID) { var cmpi = new VMServiceRepository(_eventLog); cmpi.ResizeVM(Convert.ToInt32(foundVmDepRequest.CmpRequestID), size); } } cwdb.UpdateVmSize(vMId, size); } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.VmsController.ResizeVM()", 100, 1); throw; } }
//********************************************************************* /// /// <summary> /// This method is used to deallocate a VM. /// </summary> /// <param name="vMId"></param> /// //********************************************************************* private void DeallocateVm(int vMId) { try { var cwdb = new CmpWapDb(); var foundVmDepRequest = cwdb.FetchVmDepRequest(vMId); if (null != foundVmDepRequest) { if (null != foundVmDepRequest.CmpRequestID) { var cmpi = new VMServiceRepository(_eventLog); cmpi.DeallocateVm(Convert.ToInt32(foundVmDepRequest.CmpRequestID)); //cmpi.SubmitOpToQueue() } } } catch (Exception ex) { LogThis(ex, EventLogEntryType.Error, "CmpWapExtension.VmsController.DeallocateVm()", 100, 1); throw; } }