示例#1
0
        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;
            }
        }
示例#2
0
        //*********************************************************************
        ///
        ///  <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;
            }
        }
示例#3
0
        //*********************************************************************
        ///
        ///  <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
            });
        }
示例#4
0
        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;
            }
        }
示例#5
0
        //*********************************************************************
        ///
        ///  <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;
            }
        }
示例#6
0
        //*********************************************************************
        ///
        /// <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;
            }
        }
示例#7
0
        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;
            }
        }
示例#8
0
        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));
            }
        }
示例#9
0
        //*********************************************************************
        ///
        ///  <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;
            }
        }
示例#10
0
        //*********************************************************************
        ///
        ///  <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;
            }
        }