示例#1
0
        public Disk(IArmDisk sourceDisk, VirtualMachine parentVirtualMachine)
        {
            this.SourceDisk            = (IDisk)sourceDisk;
            this._ParentVirtualMachine = parentVirtualMachine;
            this.TargetStorage         = new ManagedDiskStorage(sourceDisk);

            if (sourceDisk.GetType() == typeof(Azure.Arm.ClassicDisk))
            {
                Azure.Arm.ClassicDisk armDisk = (Azure.Arm.ClassicDisk)sourceDisk;

                this.TargetName               = armDisk.Name;
                this.Lun                      = armDisk.Lun;
                this.HostCaching              = armDisk.Caching;
                this.DiskSizeInGB             = armDisk.DiskSizeGb;
                this.TargetStorageAccountBlob = armDisk.StorageAccountBlob;
                this.SourceStorageAccount     = armDisk.SourceStorageAccount;
            }
            else if (sourceDisk.GetType() == typeof(Azure.Arm.ManagedDisk))
            {
                Azure.Arm.ManagedDisk armManagedDisk = (Azure.Arm.ManagedDisk)sourceDisk;

                this.TargetName   = armManagedDisk.Name;
                this.DiskSizeInGB = armManagedDisk.DiskSizeGb;
            }
        }
示例#2
0
文件: Disk.cs 项目: brootware/migAz
        public Disk(IArmDisk sourceDisk, VirtualMachine parentVirtualMachine, TargetSettings targetSettings) : base(ArmConst.MicrosoftCompute, ArmConst.Disks)
        {
            this.SourceDisk            = (IDisk)sourceDisk;
            this._ParentVirtualMachine = parentVirtualMachine;
            this.TargetStorage         = new ManagedDiskStorage(sourceDisk);

            if (sourceDisk != null)
            {
                if (sourceDisk.GetType() == typeof(Azure.Arm.ClassicDisk))
                {
                    Azure.Arm.ClassicDisk armDisk = (Azure.Arm.ClassicDisk)sourceDisk;

                    this.SetTargetName(armDisk.Name, targetSettings);
                    this.Lun                      = armDisk.Lun;
                    this.HostCaching              = armDisk.Caching;
                    this.DiskSizeInGB             = armDisk.DiskSizeGb;
                    this.TargetStorageAccountBlob = armDisk.StorageAccountBlob;
                    this.SourceStorageAccount     = armDisk.SourceStorageAccount;
                }
                else if (sourceDisk.GetType() == typeof(Azure.Arm.ManagedDisk))
                {
                    Azure.Arm.ManagedDisk armManagedDisk = (Azure.Arm.ManagedDisk)sourceDisk;

                    this.SetTargetName(armManagedDisk.Name, targetSettings);
                    this.DiskSizeInGB = armManagedDisk.DiskSizeGb;
                }
            }
        }
示例#3
0
        public Disk(IArmDisk sourceDisk, VirtualMachine parentVirtualMachine, TargetSettings targetSettings, ILogProvider logProvider) : base(ArmConst.MicrosoftCompute, ArmConst.Disks, logProvider)
        {
            this.SourceDisk            = (IDisk)sourceDisk;
            this._ParentVirtualMachine = parentVirtualMachine;
            this.TargetStorage         = new ManagedDiskStorage(sourceDisk);

            if (sourceDisk != null)
            {
                if (sourceDisk.GetType() == typeof(Azure.Arm.ClassicDisk))
                {
                    Azure.Arm.ClassicDisk armDisk = (Azure.Arm.ClassicDisk)sourceDisk;

                    this.SetTargetName(armDisk.Name, targetSettings);
                    this.Lun                            = armDisk.Lun;
                    this.HostCaching                    = armDisk.Caching;
                    this.DiskSizeInGB                   = armDisk.DiskSizeGb;
                    this.TargetStorageAccountBlob       = armDisk.StorageAccountBlob;
                    this.SourceStorageAccount           = armDisk.SourceStorageAccount;
                    this.IsEncrypted                    = armDisk.IsEncrypted;
                    this.DiskEncryptionKeySourceVaultId = armDisk.DiskEncryptionKeySourceVaultId;
                    this.DiskEncryptionKeySecretUrl     = armDisk.DiskEncryptionKeySecretUrl;
                    this.KeyEncryptionKeySourceVaultId  = armDisk.KeyEncryptionKeySourceVaultId;
                    this.KeyEncryptionKeyKeyUrl         = armDisk.KeyEncryptionKeyKeyUrl;
                }
                else if (sourceDisk.GetType() == typeof(Azure.Arm.ManagedDisk))
                {
                    Azure.Arm.ManagedDisk armManagedDisk = (Azure.Arm.ManagedDisk)sourceDisk;

                    this.SetTargetName(armManagedDisk.Name, targetSettings);
                    this.DiskSizeInGB = armManagedDisk.DiskSizeGb;
                    this.IsEncrypted  = armManagedDisk.IsEncrypted;
                    this.DiskEncryptionKeySourceVaultId = armManagedDisk.DiskEncryptionKeySourceVaultId;
                    this.DiskEncryptionKeySecretUrl     = armManagedDisk.DiskEncryptionKeySecretUrl;
                    this.KeyEncryptionKeySourceVaultId  = armManagedDisk.KeyEncryptionKeySourceVaultId;
                    this.KeyEncryptionKeyKeyUrl         = armManagedDisk.KeyEncryptionKeyKeyUrl;
                }
            }
        }
示例#4
0
        private async Task BindCommon()
        {
            if (_TargetDisk == null)
            {
                throw new ArgumentException("MigrationTarget Disk object cannot be null.");
            }

            _IsBinding = true;

            if (_TargetDisk.TargetStorage != null && _TargetDisk.TargetStorage.GetType() == typeof(Azure.MigrationTarget.ManagedDiskStorage))
            {
                rbManagedDisk.Checked = true;
            }
            if (_TargetDisk.TargetStorage != null && _TargetDisk.TargetStorage.GetType() == typeof(Azure.MigrationTarget.StorageAccount))
            {
                rbStorageAccountInMigration.Checked = true;
            }
            else if (_TargetDisk.TargetStorage != null && _TargetDisk.TargetStorage.GetType() == typeof(Azure.Arm.StorageAccount))
            {
                rbExistingARMStorageAccount.Checked = true;
            }

            lblAsmStorageAccount.Text = String.Empty;
            lblDiskName.Text          = _TargetDisk.TargetName;
            lblHostCaching.Text       = _TargetDisk.HostCaching;
            lblLUN.Text            = _TargetDisk.Lun.ToString();
            txtTargetDiskName.Text = _TargetDisk.TargetName;
            txtBlobName.Text       = _TargetDisk.TargetStorageAccountBlob;

            txtTargetSize.Text = _TargetDisk.DiskSizeInGB.ToString();

            if (_TargetDisk.SourceDisk != null)
            {
                lblSourceSizeGb.Text = _TargetDisk.SourceDisk.DiskSizeGb.ToString();

                if (_TargetDisk.SourceDisk.GetType() == typeof(Azure.Asm.Disk))
                {
                    Azure.Asm.Disk asmDisk = (Azure.Asm.Disk)_TargetDisk.SourceDisk;
                    if (asmDisk.SourceStorageAccount != null)
                    {
                        lblAsmStorageAccount.Text = asmDisk.SourceStorageAccount.Name;
                    }
                }
                else if (_TargetDisk.SourceDisk.GetType() == typeof(Azure.Arm.ClassicDisk))
                {
                    Azure.Arm.ClassicDisk armDisk = (Azure.Arm.ClassicDisk)_TargetDisk.SourceDisk;
                    if (armDisk.SourceStorageAccount != null)
                    {
                        lblAsmStorageAccount.Text = armDisk.SourceStorageAccount.Name;
                    }
                }
            }

            if (_TargetTreeView.TargetResourceGroup != null && _TargetTreeView.TargetResourceGroup.TargetLocation != null)
            {
                rbExistingARMStorageAccount.Text = "Existing Storage in " + _TargetTreeView.TargetResourceGroup.TargetLocation.DisplayName;
                List <Azure.Arm.StorageAccount> a = await _AzureContext.AzureRetriever.GetAzureARMStorageAccounts(_TargetTreeView.TargetResourceGroup.TargetLocation);

                rbExistingARMStorageAccount.Enabled = a.Count() > 0;
            }
            else
            {
                // Cannot use existing ARM Storage without Target Location
                rbExistingARMStorageAccount.Enabled = false;
                rbExistingARMStorageAccount.Text    = "<Set Resource Group Location>";
            }

            if (!_TargetTreeView.HasStorageAccount)
            {
                rbStorageAccountInMigration.Enabled = false;
            }

            virtualMachineSummary.Bind(_TargetDisk.ParentVirtualMachine, _TargetTreeView);

            _IsBinding = false;
        }
示例#5
0
        private async Task BindCommon()
        {
            if (_TargetDisk == null)
            {
                throw new ArgumentException("MigrationTarget Disk object cannot be null.");
            }

            _IsBinding = true;

            if (_TargetDisk.TargetStorage != null && _TargetDisk.TargetStorage.GetType() == typeof(Azure.MigrationTarget.ManagedDiskStorage))
            {
                rbManagedDisk.Checked = true;
            }
            if (_TargetDisk.TargetStorage != null && _TargetDisk.TargetStorage.GetType() == typeof(Azure.MigrationTarget.StorageAccount))
            {
                rbStorageAccountInMigration.Checked = true;
            }
            else if (_TargetDisk.TargetStorage != null && _TargetDisk.TargetStorage.GetType() == typeof(Azure.Arm.StorageAccount))
            {
                rbExistingARMStorageAccount.Checked = true;
            }

            txtTargetDiskName.Text = _TargetDisk.TargetName;
            txtBlobName.Text       = _TargetDisk.TargetStorageAccountBlob;

            txtTargetSize.Text = _TargetDisk.DiskSizeInGB.ToString();

            lblAsmStorageAccount.Text = String.Empty;
            if (_TargetDisk.SourceDisk != null)
            {
                lblDiskName.Text     = _TargetDisk.TargetName;
                lblHostCaching.Text  = _TargetDisk.SourceDisk.HostCaching;
                lblLUN.Text          = _TargetDisk.SourceDisk.Lun.ToString();
                lblSourceSizeGb.Text = _TargetDisk.SourceDisk.DiskSizeGb.ToString();

                if (_TargetDisk.SourceDisk.GetType() == typeof(Azure.Asm.Disk))
                {
                    Azure.Asm.Disk asmDisk = (Azure.Asm.Disk)_TargetDisk.SourceDisk;
                    if (asmDisk.SourceStorageAccount != null)
                    {
                        lblAsmStorageAccount.Text = asmDisk.SourceStorageAccount.Name;
                    }
                }
                else if (_TargetDisk.SourceDisk.GetType() == typeof(Azure.Arm.ClassicDisk))
                {
                    Azure.Arm.ClassicDisk armDisk = (Azure.Arm.ClassicDisk)_TargetDisk.SourceDisk;
                    if (armDisk.SourceStorageAccount != null)
                    {
                        lblAsmStorageAccount.Text = armDisk.SourceStorageAccount.Name;
                    }
                }
            }
            else
            {
                lblDiskName.Text          = String.Empty;
                lblHostCaching.Text       = String.Empty;
                lblLUN.Text               = String.Empty;
                lblSourceSizeGb.Text      = String.Empty;
                lblAsmStorageAccount.Text = String.Empty;
            }

            if (_TargetTreeView.TargetResourceGroup != null && _TargetTreeView.TargetResourceGroup.TargetLocation != null)
            {
                rbExistingARMStorageAccount.Text    = "Existing Storage in " + _TargetTreeView.TargetResourceGroup.TargetLocation.DisplayName;
                rbExistingARMStorageAccount.Enabled = _TargetTreeView.GetExistingArmStorageAccounts().Count > 0;
            }
            else
            {
                // Cannot use existing ARM Storage without Target Location
                rbExistingARMStorageAccount.Enabled = false;
                rbExistingARMStorageAccount.Text    = "<Set Resource Group Location>";
            }

            if (!_TargetTreeView.HasStorageAccount)
            {
                rbStorageAccountInMigration.Enabled = false;
            }

            upDownLUN.Visible = _TargetDisk.Lun.HasValue;
            upDownLUN.Enabled = _TargetDisk.Lun.HasValue;
            if (_TargetDisk.Lun.HasValue)
            {
                // There is a chance that the assigned LUN Value exceeds the Max Allowed LUN Value.
                // This can happen, for example, if the Disk LUN was index 15 and the VM is resized from DS3 to DS2
                // thus exceeding the Max allowed.  In this case, we're going to temporarily increase the Max value
                // to avoid value assignment error, and then handle downsizing / scaling back the Max allowed value
                // as the value is decreased (max value reassignment to occur in the UpDown ValueChanged Event).
                // We are utilizing the MigAz Error validation here to tell the user their LUN index exceeds that of the VM Size.
                if (upDownLUN.Maximum < _TargetDisk.Lun.Value)
                {
                    // Since it exceeds, we'll allow the Max value increase, and downsize in the UpDown ValueChanged Event
                    upDownLUN.Maximum = _TargetDisk.Lun.Value;
                }

                if (_TargetDisk.Lun.Value == -1)
                {
                    upDownLUN.Minimum = -1;
                }
                else
                {
                    upDownLUN.Minimum = 0;
                }

                upDownLUN.Value = _TargetDisk.Lun.Value;
            }

            virtualMachineSummary.Bind(_TargetDisk.ParentVirtualMachine, _TargetTreeView, false);

            _IsBinding = false;
        }
示例#6
0
        private async Task AsmSelectDependencies(TreeNode selectedNode)
        {
            if (this.AutoSelectDependencies && (selectedNode.Checked) && (selectedNode.Tag != null))
            {
                if (selectedNode.Tag.GetType() == typeof(Azure.MigrationTarget.AvailabilitySet))
                {
                    Azure.MigrationTarget.AvailabilitySet targetAvailabilitySet = (Azure.MigrationTarget.AvailabilitySet)selectedNode.Tag;

                    foreach (Azure.MigrationTarget.VirtualMachine targetVirtualMachine in targetAvailabilitySet.TargetVirtualMachines)
                    {
                        foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(targetVirtualMachine.TargetName, true))
                        {
                            if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.VirtualMachine)))
                            {
                                if (!treeNode.Checked)
                                {
                                    treeNode.Checked = true;
                                }
                            }
                        }
                    }
                }
                if (selectedNode.Tag.GetType() == typeof(Azure.MigrationTarget.VirtualMachine))
                {
                    Azure.MigrationTarget.VirtualMachine targetVirtualMachine = (Azure.MigrationTarget.VirtualMachine)selectedNode.Tag;

                    if (targetVirtualMachine.Source != null)
                    {
                        if (targetVirtualMachine.Source.GetType() == typeof(Azure.Arm.VirtualMachine))
                        {
                            Azure.Arm.VirtualMachine armVirtualMachine = (Azure.Arm.VirtualMachine)targetVirtualMachine.Source;

                            #region process virtual network

                            // This source code to auto select the Virtual Network as a Parent node has been commented out purposefully.
                            // It was observed through use of MigAz that users were not aware that "including the Virtual Network" in multiple
                            // migrations was actually creating new / independent / non-connected versions of the same Virtual Network.
                            // It is valid that the user would want to migrate the Virtual Network during the first run migration; however, beyond
                            // that first pass (the Azure ARM Virtual Network exists) the user is more likely to need to migrate the Virtual Machine(s)
                            // into an existing Azure Virtual Network.  In order to guide the user in this direction, we do not want to auto select the
                            // source Virtual Network to be included in the Migration Template as a new Virtual Network.  We want the user to explicitly
                            // select and include the source Azure Virtual Network into the Migration Template (if they want to include it), or utilize
                            // the built in property editor dialogs to "select an existing Virtual Network and Subnet".

                            //foreach (Azure.Arm.NetworkInterface networkInterface in armVirtualMachine.NetworkInterfaces)
                            //{
                            //    foreach (Azure.Arm.NetworkInterfaceIpConfiguration ipConfiguration in networkInterface.NetworkInterfaceIpConfigurations)
                            //    {
                            //        if (ipConfiguration.VirtualNetwork != null)
                            //        {
                            //            foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(ipConfiguration.VirtualNetwork.Name, true))
                            //            {
                            //                if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.VirtualNetwork)))
                            //                {
                            //                    if (!treeNode.Checked)
                            //                        treeNode.Checked = true;
                            //                }
                            //            }
                            //        }
                            //    }
                            //}

                            #endregion

                            #region process managed disks

                            if (armVirtualMachine.OSVirtualHardDisk.GetType() == typeof(Azure.Arm.ManagedDisk))
                            {
                                foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(((Azure.Arm.ManagedDisk)armVirtualMachine.OSVirtualHardDisk).Name, true))
                                {
                                    if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.Disk)))
                                    {
                                        if (!treeNode.Checked)
                                        {
                                            treeNode.Checked = true;
                                        }
                                    }
                                }
                            }

                            foreach (Azure.Interface.IArmDisk dataDisk in armVirtualMachine.DataDisks)
                            {
                                if (dataDisk.GetType() == typeof(Azure.Arm.ManagedDisk))
                                {
                                    Azure.Arm.ManagedDisk managedDisk = (Azure.Arm.ManagedDisk)dataDisk;

                                    foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(managedDisk.Name, true))
                                    {
                                        if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.Disk)))
                                        {
                                            if (!treeNode.Checked)
                                            {
                                                treeNode.Checked = true;
                                            }
                                        }
                                    }
                                }
                            }

                            #endregion

                            #region OS Disk Storage Account

                            if (armVirtualMachine.OSVirtualHardDisk.GetType() == typeof(Azure.Arm.ClassicDisk)) // Disk in a Storage Account, not a Managed Disk
                            {
                                foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(((Azure.Arm.ClassicDisk)armVirtualMachine.OSVirtualHardDisk).StorageAccountName, true))
                                {
                                    if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.StorageAccount)))
                                    {
                                        if (!treeNode.Checked)
                                        {
                                            treeNode.Checked = true;
                                        }
                                    }
                                }
                            }

                            #endregion

                            #region Data Disk(s) Storage Account(s)

                            foreach (IArmDisk dataDisk in armVirtualMachine.DataDisks)
                            {
                                if (dataDisk.GetType() == typeof(Azure.Arm.ClassicDisk))
                                {
                                    Azure.Arm.ClassicDisk classicDisk = (Azure.Arm.ClassicDisk)dataDisk;
                                    foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(classicDisk.StorageAccountName, true))
                                    {
                                        if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.StorageAccount)))
                                        {
                                            if (!treeNode.Checked)
                                            {
                                                treeNode.Checked = true;
                                            }
                                        }
                                    }
                                }
                                else if (dataDisk.GetType() == typeof(Azure.Arm.ManagedDisk))
                                {
                                    Azure.Arm.ManagedDisk managedDisk = (Azure.Arm.ManagedDisk)dataDisk;
                                    foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(managedDisk.Name, true))
                                    {
                                        if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.Disk)))
                                        {
                                            if (!treeNode.Checked)
                                            {
                                                treeNode.Checked = true;
                                            }
                                        }
                                    }
                                }
                            }

                            #endregion

                            #region Network Interface Card(s)

                            foreach (Azure.Arm.NetworkInterface networkInterface in armVirtualMachine.NetworkInterfaces)
                            {
                                foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(networkInterface.Name, true))
                                {
                                    if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.NetworkInterface)))
                                    {
                                        if (!treeNode.Checked)
                                        {
                                            treeNode.Checked = true;
                                        }
                                    }
                                }

                                if (networkInterface.NetworkSecurityGroup != null)
                                {
                                    foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(networkInterface.NetworkSecurityGroup.Name, true))
                                    {
                                        if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.NetworkSecurityGroup)))
                                        {
                                            if (!treeNode.Checked)
                                            {
                                                treeNode.Checked = true;
                                            }
                                        }
                                    }
                                }

                                foreach (Azure.Arm.NetworkInterfaceIpConfiguration ipConfiguration in networkInterface.NetworkInterfaceIpConfigurations)
                                {
                                    if (ipConfiguration.BackEndAddressPool != null && ipConfiguration.BackEndAddressPool.LoadBalancer != null)
                                    {
                                        foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(ipConfiguration.BackEndAddressPool.LoadBalancer.Name, true))
                                        {
                                            if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.LoadBalancer)))
                                            {
                                                if (!treeNode.Checked)
                                                {
                                                    treeNode.Checked = true;
                                                }
                                            }
                                        }
                                    }

                                    if (ipConfiguration.PublicIP != null)
                                    {
                                        foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(ipConfiguration.PublicIP.Name, true))
                                        {
                                            if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.PublicIp)))
                                            {
                                                if (!treeNode.Checked)
                                                {
                                                    treeNode.Checked = true;
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            #endregion

                            #region Parent Availability Set

                            if (armVirtualMachine.AvailabilitySet != null)
                            {
                                foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(armVirtualMachine.AvailabilitySet.Name, true))
                                {
                                    if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.AvailabilitySet)))
                                    {
                                        if (!treeNode.Checked)
                                        {
                                            treeNode.Checked = true;
                                        }
                                    }
                                }
                            }

                            #endregion
                        }
                    }
                }
                else if (selectedNode.Tag.GetType() == typeof(Azure.MigrationTarget.VirtualNetwork))
                {
                    Azure.MigrationTarget.VirtualNetwork targetVirtualNetwork = (Azure.MigrationTarget.VirtualNetwork)selectedNode.Tag;

                    foreach (Azure.MigrationTarget.Subnet targetSubnet in targetVirtualNetwork.TargetSubnets)
                    {
                        if (targetSubnet.NetworkSecurityGroup != null)
                        {
                            if (targetSubnet.NetworkSecurityGroup.SourceNetworkSecurityGroup != null)
                            {
                                if (targetSubnet.NetworkSecurityGroup.SourceNetworkSecurityGroup.GetType() == typeof(Azure.Arm.NetworkSecurityGroup))
                                {
                                    foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(targetSubnet.NetworkSecurityGroup.SourceName, true))
                                    {
                                        if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.NetworkSecurityGroup)))
                                        {
                                            if (!treeNode.Checked)
                                            {
                                                treeNode.Checked = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                else if (selectedNode.Tag.GetType() == typeof(Azure.MigrationTarget.LoadBalancer))
                {
                    Azure.MigrationTarget.LoadBalancer targetLoadBalancer = (Azure.MigrationTarget.LoadBalancer)selectedNode.Tag;

                    if (targetLoadBalancer.Source != null)
                    {
                        if (targetLoadBalancer.Source.GetType() == typeof(Azure.Arm.LoadBalancer))
                        {
                            Azure.Arm.LoadBalancer armLoadBalaner = (Azure.Arm.LoadBalancer)targetLoadBalancer.Source;

                            foreach (Azure.Arm.FrontEndIpConfiguration frontEndIpConfiguration in armLoadBalaner.FrontEndIpConfigurations)
                            {
                                if (frontEndIpConfiguration.PublicIP != null)
                                {
                                    foreach (TreeNode treeNode in selectedNode.TreeView.Nodes.Find(frontEndIpConfiguration.PublicIP.Name, true))
                                    {
                                        if ((treeNode.Tag != null) && (treeNode.Tag.GetType() == typeof(Azure.MigrationTarget.PublicIp)))
                                        {
                                            if (!treeNode.Checked)
                                            {
                                                treeNode.Checked = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                _StatusProvider.UpdateStatus("Ready");
            }
        }