예제 #1
0
        public VirtualMachine(AzureContext azureContext, Arm.VirtualMachine virtualMachine, ArmDiskType targetDiskType)
        {
            this._AzureContext       = azureContext;
            this.Source              = virtualMachine;
            this.TargetName          = virtualMachine.Name;
            this.TargetSize          = virtualMachine.VmSize;
            this.OSVirtualHardDiskOS = virtualMachine.OSVirtualHardDiskOS;

            if (virtualMachine.OSVirtualHardDisk.GetType() == typeof(Azure.Arm.ManagedDisk))
            {
                Azure.Arm.ManagedDisk sourceManagedDisk = (Azure.Arm.ManagedDisk)virtualMachine.OSVirtualHardDisk;

                foreach (Disk targetDisk in azureContext.AzureRetriever.ArmTargetManagedDisks)
                {
                    if ((targetDisk.SourceDisk != null) && (targetDisk.SourceDisk.GetType() == typeof(Azure.Arm.ManagedDisk)))
                    {
                        Azure.Arm.ManagedDisk targetDiskSourceDisk = (Azure.Arm.ManagedDisk)targetDisk.SourceDisk;
                        if (String.Compare(targetDiskSourceDisk.Name, sourceManagedDisk.Name, true) == 0)
                        {
                            this.OSVirtualHardDisk          = targetDisk;
                            targetDisk.ParentVirtualMachine = this;
                            targetDisk.HostCaching          = sourceManagedDisk.HostCaching;
                            break;
                        }
                    }
                }
            }
            else
            {
                this.OSVirtualHardDisk = new Disk(virtualMachine.OSVirtualHardDisk, this);
            }

            if (virtualMachine.OSVirtualHardDisk.GetType() == typeof(Arm.ClassicDisk))
            {
                Arm.ClassicDisk armDisk = (Arm.ClassicDisk)virtualMachine.OSVirtualHardDisk;
                if (targetDiskType == ArmDiskType.ClassicDisk)
                {
                    this.OSVirtualHardDisk.TargetStorage = SeekTargetStorageAccount(azureContext.AzureRetriever.ArmTargetStorageAccounts, armDisk.StorageAccountName);
                }
            }

            foreach (IArmDisk dataDisk in virtualMachine.DataDisks)
            {
                if (dataDisk.GetType() == typeof(Azure.Arm.ManagedDisk))
                {
                    Azure.Arm.ManagedDisk sourceManagedDisk = (Azure.Arm.ManagedDisk)dataDisk;

                    foreach (Disk targetDisk in azureContext.AzureRetriever.ArmTargetManagedDisks)
                    {
                        if ((targetDisk.SourceDisk != null) && (targetDisk.SourceDisk.GetType() == typeof(Azure.Arm.ManagedDisk)))
                        {
                            Azure.Arm.ManagedDisk targetDiskSourceDisk = (Azure.Arm.ManagedDisk)targetDisk.SourceDisk;
                            if (String.Compare(targetDiskSourceDisk.Name, sourceManagedDisk.Name, true) == 0)
                            {
                                this.DataDisks.Add(targetDisk);
                                targetDisk.ParentVirtualMachine = this;
                                targetDisk.Lun         = sourceManagedDisk.Lun;
                                targetDisk.HostCaching = sourceManagedDisk.HostCaching;
                                break;
                            }
                        }
                    }
                }
                else if (dataDisk.GetType() == typeof(Arm.ClassicDisk))
                {
                    Disk targetDataDisk = new Disk(dataDisk, this);
                    this.DataDisks.Add(targetDataDisk);

                    Arm.ClassicDisk armDisk = (Arm.ClassicDisk)dataDisk;
                    if (targetDiskType == ArmDiskType.ClassicDisk)
                    {
                        targetDataDisk.TargetStorage = SeekTargetStorageAccount(azureContext.AzureRetriever.ArmTargetStorageAccounts, armDisk.StorageAccountName);
                    }
                }
            }

            foreach (Arm.NetworkInterface armNetworkInterface in virtualMachine.NetworkInterfaces)
            {
                foreach (NetworkInterface targetNetworkInterface in azureContext.AzureRetriever.ArmTargetNetworkInterfaces)
                {
                    if ((targetNetworkInterface.SourceNetworkInterface != null) && (targetNetworkInterface.SourceNetworkInterface.GetType() == typeof(Azure.Arm.NetworkInterface)))
                    {
                        Azure.Arm.NetworkInterface targetNetworkInterfaceSourceInterface = (Azure.Arm.NetworkInterface)targetNetworkInterface.SourceNetworkInterface;
                        if (String.Compare(targetNetworkInterfaceSourceInterface.Name, armNetworkInterface.Name, true) == 0)
                        {
                            this.NetworkInterfaces.Add(targetNetworkInterface);
                            targetNetworkInterface.ParentVirtualMachine = this;
                            break;
                        }
                    }
                }
            }

            if (virtualMachine.HasPlan)
            {
                _PlanAttributes = new Dictionary <string, string>();

                foreach (JProperty planAttribute in virtualMachine.ResourceToken["plan"])
                {
                    _PlanAttributes.Add(planAttribute.Name, planAttribute.Value.ToString());
                }
            }
        }
예제 #2
0
        public VirtualMachine(AzureContext azureContext, Asm.VirtualMachine virtualMachine, ArmDiskType targetDiskType, List <VirtualNetwork> targetVirtualNetworks, List <StorageAccount> targetStorageAccounts, List <NetworkSecurityGroup> networkSecurityGroups)
        {
            this._AzureContext       = azureContext;
            this.Source              = virtualMachine;
            this.TargetName          = virtualMachine.RoleName;
            this.OSVirtualHardDisk   = new Disk(virtualMachine.OSVirtualHardDisk, this);
            this.OSVirtualHardDiskOS = virtualMachine.OSVirtualHardDiskOS;

            if (targetDiskType == ArmDiskType.ClassicDisk)
            {
                this.OSVirtualHardDisk.TargetStorage = SeekTargetStorageAccount(targetStorageAccounts, virtualMachine.OSVirtualHardDisk.StorageAccountName);
            }

            foreach (Asm.Disk asmDataDisk in virtualMachine.DataDisks)
            {
                Disk targetDataDisk = new Disk(asmDataDisk, this);
                this.DataDisks.Add(targetDataDisk);

                if (targetDiskType == ArmDiskType.ClassicDisk)
                {
                    targetDataDisk.TargetStorage = SeekTargetStorageAccount(targetStorageAccounts, asmDataDisk.StorageAccountName);
                }
            }

            foreach (Asm.NetworkInterface asmNetworkInterface in virtualMachine.NetworkInterfaces)
            {
                Azure.MigrationTarget.NetworkInterface migrationNetworkInterface = new Azure.MigrationTarget.NetworkInterface(_AzureContext, virtualMachine, asmNetworkInterface, targetVirtualNetworks, networkSecurityGroups);
                migrationNetworkInterface.ParentVirtualMachine = this;
                this.NetworkInterfaces.Add(migrationNetworkInterface);
            }

            #region Seek ARM Target Size

            // Get ARM Based Location (that matches location of Source ASM VM
            Arm.Location armLocation = _AzureContext.AzureRetriever.GetAzureARMLocation(virtualMachine.Location).Result;
            if (armLocation != null)
            {
                // First, try to seek matching ARM VM Size by name
                if (armLocation.VMSizes != null)
                {
                    this.TargetSize = armLocation.VMSizes.Where(a => a.Name == virtualMachine.RoleSize.Name).FirstOrDefault();

                    if (this.TargetSize == null)
                    {
                        // if not found, defer to alternate matching options

                        Dictionary <string, string> VMSizeTable = new Dictionary <string, string>();
                        VMSizeTable.Add("ExtraSmall", "Standard_A0");
                        VMSizeTable.Add("Small", "Standard_A1");
                        VMSizeTable.Add("Medium", "Standard_A2");
                        VMSizeTable.Add("Large", "Standard_A3");
                        VMSizeTable.Add("ExtraLarge", "Standard_A4");
                        VMSizeTable.Add("A5", "Standard_A5");
                        VMSizeTable.Add("A6", "Standard_A6");
                        VMSizeTable.Add("A7", "Standard_A7");
                        VMSizeTable.Add("A8", "Standard_A8");
                        VMSizeTable.Add("A9", "Standard_A9");
                        VMSizeTable.Add("A10", "Standard_A10");
                        VMSizeTable.Add("A11", "Standard_A11");

                        if (VMSizeTable.ContainsKey(virtualMachine.RoleSize.Name))
                        {
                            this.TargetSize = armLocation.VMSizes.Where(a => a.Name == VMSizeTable[virtualMachine.RoleSize.Name]).FirstOrDefault();
                        }
                    }
                }
            }

            #endregion
        }