//********************************************************************* /// /// <summary> /// This method is used to add VM to VM list. /// </summary> /// <param name="cmpReq"></param> /// //********************************************************************* private void AddVmToList(Models.CmpRequest cmpReq) { if (!cmpReq.StatusCode.Equals(CmpInterfaceModel.Constants.StatusEnum.Complete.ToString())) { _havePendingStatus = true; } VmList.Add(item: new CreateVm { Id = cmpReq.Id, //Id = VmList.Count, CmpRequestId = Convert.ToInt32(cmpReq.CmpRequestID), Name = cmpReq.TargetVmName, SubscriptionId = cmpReq.WapSubscriptionID, StatusCode = cmpReq.StatusCode, StatusMessage = cmpReq.StatusMessage, ExceptionMessage = cmpReq.ExceptionMessage, VmAppName = cmpReq.ParentAppName, VmDomain = cmpReq.Domain, VmAdminName = "", //VmAdminPassword = "", VmSourceImage = cmpReq.SourceImageName, VmSize = cmpReq.VmSize, VmRegion = cmpReq.TargetLocation, VmRole = "", VmDiskSpec = "", VmConfig = cmpReq.Config, VmTagData = cmpReq.TagData, AddressFromVm = cmpReq.AddressFromVm //ExtensionData = "" }); }
//******************************************************************** /// /// <summary> /// Ugly code, does not belong here. Belongs in a lib. Should remove /// this when we solve the big 'method not returning' bug /// </summary> /// <param name="cmpReq"></param> /// <returns></returns> /// //******************************************************************** private VmDashboardInfo GetLocalvmDBI(Models.CmpRequest cmpReq) { string cmpDbConnectionString = GetCmpContextConnectionStringFromConfig(); CmpServiceLib.CmpService cmps = new CmpServiceLib.CmpService(eventLog, cmpDbConnectionString, null); var vmg = cmps.VmGet((int)cmpReq.CmpRequestID, CmpInterfaceModel.Constants.FetchType.AzureFull); VmDashboardInfo vmDBI = new VmDashboardInfo() { //Cores = "", DataVirtualHardDisks = ConvertDisk(vmg.DataVirtualHardDisks), DeploymentID = vmg.DeploymentID, DNSName = vmg.DNSName, InternalIP = vmg.InternalIP, MediaLocation = vmg.MediaLocation, OSVersion = vmg.OSVersion, OSVirtualHardDisk = new OsVirtualHardDisk() { DiskLabel = vmg.OSVirtualHardDisk.DiskLabel, DiskName = vmg.OSVirtualHardDisk.DiskName, HostCaching = vmg.OSVirtualHardDisk.HostCaching, MediaLink = vmg.OSVirtualHardDisk.MediaLink, OS = vmg.OSVirtualHardDisk.OS, RemoteSourceImageLink = vmg.OSVirtualHardDisk.RemoteSourceImageLink, SourceImageName = vmg.OSVirtualHardDisk.SourceImageName }, QueueStatus = "", RDPCertificateThumbprint = "", RoleName = vmg.RoleName, RoleSize = cmpReq.VmSize, Status = vmg.Status, Subscription = new SubscriptionInfo() { CurrentCoreCount = vmg.Subscription.CurrentCoreCount, MaximumCoreCount = vmg.Subscription.MaximumCoreCount, SubscriptionID = vmg.Subscription.SubscriptionID, SubscriptionName = vmg.Subscription.SubscriptionName } }; return(vmDBI); }
//******************************************************************** /// /// <summary> /// Ugly code, does not belong here. Belongs in a lib. Should remove /// this when we solve the big 'method not returning' bug /// </summary> /// <param name="cmpReq"></param> /// <returns></returns> /// //******************************************************************** private VmDashboardInfo GetLocalvmDBI2(Models.CmpRequest cmpReq) { VmDashboardInfo vmDBI = new VmDashboardInfo() { //Cores = "", DataVirtualHardDisks = new List <ApiClient.DataContracts.DataVirtualHardDisk>(), DeploymentID = "", DNSName = cmpReq.TargetVmName + "." + cmpReq.TargetLocation.ToLower().Replace(" ", "") + ".cloudapp.azure.com", InternalIP = cmpReq.AddressFromVm, MediaLocation = null, OSVersion = cmpReq.SourceImageName, OSVirtualHardDisk = new OsVirtualHardDisk() { DiskLabel = "C", DiskName = "osdisk", HostCaching = "ReadWrite", MediaLink = string.Format("http://{0}.blob.core.windows.net/{1}/{2}.vhd", Utilities.GetXmlInnerText(cmpReq.Config, "newStorageAccountName"), Utilities.GetXmlInnerText(cmpReq.Config, "vmStorageAccountContainerName"), Utilities.GetXmlInnerText(cmpReq.Config, "OSDiskName")), OS = "Windows", RemoteSourceImageLink = null, SourceImageName = null }, QueueStatus = "", RDPCertificateThumbprint = "", RoleName = cmpReq.TargetVmName, RoleSize = cmpReq.VmSize, Status = "Running", //*** TODO * MW * This is not good Subscription = new SubscriptionInfo() { CurrentCoreCount = "0", MaximumCoreCount = "0", SubscriptionID = "", SubscriptionName = "" } }; return(vmDBI); }
//********************************************************************* /// /// <summary> /// This method is used to Sync VM Object with CMP. /// </summary> /// //********************************************************************* void SyncWithCmp() { var cmpi = new VMServiceRepository(_eventLog); var cwdb = new CmpWapDb(); foreach (CreateVm vM in VmList.ToList()) { //*** If status is complete or exception then don't process *** //if (vM.StatusCode.Equals(CmpInterfaceModel.Constants.StatusEnum.Complete.ToString()) || // vM.StatusCode.Equals(CmpInterfaceModel.Constants.StatusEnum.Exception.ToString())) if (vM.StatusCode.Equals(CmpInterfaceModel.Constants.StatusEnum.Complete.ToString())) { continue; } try { //*** Access the CMP service *** var fetchedVm = cmpi.FetchCmpRequest(vM.CmpRequestId); //*** update CmpWapDb if status has changed *** //if (!vM.StatusCode.Equals(fetchedVm.Status)) if (true) { vM.StatusCode = fetchedVm.Status; vM.StatusMessage = fetchedVm.StatusMessage; var cmpWapReq = new Models.CmpRequest { StatusCode = fetchedVm.Status, StatusMessage = GetStatusMessage(fetchedVm), ExceptionMessage = fetchedVm.ExceptionMessage, Id = vM.Id, Config = fetchedVm.Config }; if (null != fetchedVm.Config) { var vmc = CmpInterfaceModel.Models.VmConfig.Deserialize(fetchedVm.Config); if (null != vmc) { if (null != vmc.InfoFromVM) { cmpWapReq.AddressFromVm = vmc.InfoFromVM.VmAddress; } } } cwdb.SetVmDepRequestStatus(cmpWapReq, null); } } catch (Exception) { vM.StatusCode = "NoCmpContact"; vM.StatusMessage = "Temporarily unable to contact CMP for status"; } } }
//********************************************************************* /// /// <summary> /// This method is used to build a disk object. /// </summary> /// <param name="jsonDisks"></param> /// <param name="vmReq"></param> /// <returns>VHD object</returns> /// //********************************************************************* private static IEnumerable <VhdInfo> BuildDiskObject(IEnumerable <object> jsonDisks, Models.CmpRequest vmReq) { var config = new XmlDocument(); config.LoadXml(vmReq.Config); XmlNodeList nodes = config.SelectNodes(@"/VmConfig/Placement/StorageContainerUrl"); foreach (var jsonDisk in jsonDisks) { var disks = JsonConvert.DeserializeObject <IEnumerable <VhdInfo> >(jsonDisk.ToString()); foreach (var disk in disks) { disk.MediaLink = nodes[0].InnerText; yield return(disk); } } }