/// <summary> /// Initializes a new instance of the <see cref="MigrationRunner" /> class. /// </summary> /// <param name="migrationTarget">The migration target.</param> /// <param name="database">The database.</param> /// <param name="migrationLocator">The migration locator.</param> /// <param name="databaseStatus">The database status.</param> /// <param name="logger">The logger.</param> public MigrationRunner(IMigrationTarget migrationTarget, IMongoDatabase database, IMigrationLocator migrationLocator, IDatabaseMigrationStatus databaseStatus, ILogger <MigrationRunner> logger) { _migrationTarget = migrationTarget ?? throw new ArgumentNullException(nameof(migrationTarget)); _database = database ?? throw new ArgumentNullException(nameof(database)); _databaseStatus = databaseStatus ?? throw new ArgumentNullException(nameof(databaseStatus)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); MigrationLocator = migrationLocator ?? throw new ArgumentNullException(nameof(migrationLocator)); }
public async Task RemoveASMNodeFromARMTree(IMigrationTarget migrationTarget) { TreeNode targetResourceGroupNode = SeekResourceGroupTreeNode(); if (targetResourceGroupNode != null) { TreeNode[] matchingNodes = targetResourceGroupNode.Nodes.Find(migrationTarget.SourceName, true); foreach (TreeNode matchingNode in matchingNodes) { if (matchingNode.Tag.GetType() == typeof(Azure.MigrationTarget.VirtualMachine)) { await RemoveTreeNodeCascadeUp(matchingNode); Azure.MigrationTarget.VirtualMachine targetVirtualMachine = (Azure.MigrationTarget.VirtualMachine)matchingNode.Tag; // if there are VMs that have originating Classic Disks, we may need to clean them up from the Resource Group if they were being moved to a Managed Disk (not under the VM in the Treeview) await RemoveAsmDiskTurnedManagedDiskFromARMTree(targetVirtualMachine.OSVirtualHardDisk); foreach (MigrationTarget.Disk disk in targetVirtualMachine.DataDisks) { await RemoveAsmDiskTurnedManagedDiskFromARMTree(disk); } foreach (MigrationTarget.NetworkInterface networkInterface in targetVirtualMachine.NetworkInterfaces) { await RemoveAsmNetworkTurnedArmNetworkFromARMTree(networkInterface); } await RemoveCloudServiceTurnedAvailabilitySetFromARMTree(targetVirtualMachine.TargetAvailabilitySet); } else if (matchingNode.Tag.GetType() == migrationTarget.GetType()) { await RemoveTreeNodeCascadeUp(matchingNode); } else if (matchingNode.Tag.GetType() == typeof(TreeNode)) { TreeNode childTreeNode = (TreeNode)matchingNode.Tag; if (migrationTarget.GetType() == childTreeNode.Tag.GetType()) { await RemoveTreeNodeCascadeUp(matchingNode); } } } } if (treeTargetARM.SelectedNode == null) { PropertyPanel.Clear(); } }
/// <summary> /// Initializes a new instance of the <see cref="MigrationRunner" /> class. /// </summary> /// <param name="database">The database.</param> public MigrationRunner(IMongoDatabase database) { IServiceCollection serviceCollection = new ServiceCollection() .AddMongoMigrations() .AddLogging(cfg => { cfg.AddConsole(); }); serviceCollection.AddSingleton(database); var serviceProvider = serviceCollection.BuildServiceProvider(); _database = database; _migrationTarget = serviceProvider.GetService <IMigrationTarget>(); _databaseStatus = _databaseStatus = serviceProvider.GetService <IDatabaseMigrationStatus>(); _logger = serviceProvider.GetService <ILogger <MigrationRunner> >(); MigrationLocator = serviceProvider.GetService <IMigrationLocator>(); }
public void Bind(IMigrationTarget migrationTarget, TargetTreeView targetTreeView) { _MigrationTarget = migrationTarget; _TargetTreeView = targetTreeView; if (_MigrationTarget != null && _TargetTreeView != null) { if (_MigrationTarget.GetType() == typeof(Azure.MigrationTarget.Disk)) { pictureBox1.Image = _TargetTreeView.ImageList.Images["Disk"]; } else if (_MigrationTarget.GetType() == typeof(Azure.MigrationTarget.NetworkInterface)) { pictureBox1.Image = _TargetTreeView.ImageList.Images["NetworkInterface"]; } else if (_MigrationTarget.GetType() == typeof(Azure.MigrationTarget.VirtualMachine)) { pictureBox1.Image = _TargetTreeView.ImageList.Images["VirtualMachine"]; } else if (_MigrationTarget.GetType() == typeof(Azure.MigrationTarget.AvailabilitySet)) { pictureBox1.Image = _TargetTreeView.ImageList.Images["AvailabilitySet"]; } else if (_MigrationTarget.GetType() == typeof(Azure.MigrationTarget.NetworkSecurityGroup)) { pictureBox1.Image = _TargetTreeView.ImageList.Images["NetworkSecurityGroup"]; } else if (_MigrationTarget.GetType() == typeof(Azure.MigrationTarget.RouteTable)) { pictureBox1.Image = _TargetTreeView.ImageList.Images["RouteTable"]; } label1.Text = _MigrationTarget.ToString(); } else { pictureBox1.Visible = false; label1.Visible = false; } }
public async Task RemoveASMNodeFromARMTree(IMigrationTarget migrationTarget) { TreeNode targetResourceGroupNode = SeekResourceGroupTreeNode(); if (targetResourceGroupNode != null) { TreeNode[] matchingNodes = targetResourceGroupNode.Nodes.Find(migrationTarget.SourceName, true); foreach (TreeNode matchingNode in matchingNodes) { if (matchingNode.Tag.GetType() == migrationTarget.GetType()) { await RemoveTreeNodeCascadeUp(matchingNode); } else if (matchingNode.Tag.GetType() == typeof(Azure.MigrationTarget.StorageAccount)) { if (migrationTarget.GetType() == typeof(Azure.Asm.StorageAccount)) { await RemoveTreeNodeCascadeUp(matchingNode); } else if (migrationTarget.GetType() == typeof(Azure.Arm.StorageAccount)) { await RemoveTreeNodeCascadeUp(matchingNode); } } else if (matchingNode.Tag.GetType() == typeof(Azure.MigrationTarget.VirtualMachine)) { if (migrationTarget.GetType() == typeof(Azure.Asm.VirtualMachine)) { await RemoveTreeNodeCascadeUp(matchingNode); } else if (migrationTarget.GetType() == typeof(Azure.Arm.VirtualMachine)) { await RemoveTreeNodeCascadeUp(matchingNode); } } else if (matchingNode.Tag.GetType() == typeof(Azure.MigrationTarget.NetworkSecurityGroup)) { if (migrationTarget.GetType() == typeof(Azure.Asm.NetworkSecurityGroup)) { await RemoveTreeNodeCascadeUp(matchingNode); } else if (migrationTarget.GetType() == typeof(Azure.Arm.NetworkSecurityGroup)) { await RemoveTreeNodeCascadeUp(matchingNode); } } else if (matchingNode.Tag.GetType() == typeof(Azure.MigrationTarget.VirtualNetwork)) { if (migrationTarget.GetType() == typeof(Azure.Asm.VirtualNetwork)) { await RemoveTreeNodeCascadeUp(matchingNode); } else if (migrationTarget.GetType() == typeof(Azure.Arm.VirtualNetwork)) { await RemoveTreeNodeCascadeUp(matchingNode); } } else if (matchingNode.Tag.GetType() == typeof(TreeNode)) { TreeNode childTreeNode = (TreeNode)matchingNode.Tag; if (migrationTarget.GetType() == childTreeNode.Tag.GetType()) { await RemoveTreeNodeCascadeUp(matchingNode); } } } } }
public async Task <TreeNode> AddMigrationTargetToTargetTree(IMigrationTarget parentNode) { if (parentNode == null) { throw new ArgumentNullException("Migration Target cannot be null."); } TreeNode targetResourceGroupNode = SeekResourceGroupTreeNode(); if (parentNode.GetType() == typeof(Azure.MigrationTarget.VirtualNetwork)) { Azure.MigrationTarget.VirtualNetwork targetVirtualNetwork = (Azure.MigrationTarget.VirtualNetwork)parentNode; TreeNode virtualNetworkNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetVirtualNetwork.SourceName, targetVirtualNetwork.ToString(), targetVirtualNetwork, true); foreach (Azure.MigrationTarget.Subnet targetSubnet in targetVirtualNetwork.TargetSubnets) { TreeNode subnetNode = SeekARMChildTreeNode(virtualNetworkNode.Nodes, targetVirtualNetwork.ToString(), targetSubnet.ToString(), targetSubnet, true); } targetResourceGroupNode.ExpandAll(); return(virtualNetworkNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.StorageAccount)) { Azure.MigrationTarget.StorageAccount targetStorageAccount = (Azure.MigrationTarget.StorageAccount)parentNode; TreeNode storageAccountNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetStorageAccount.SourceName, targetStorageAccount.ToString(), targetStorageAccount, true); targetResourceGroupNode.ExpandAll(); return(storageAccountNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.NetworkSecurityGroup)) { Azure.MigrationTarget.NetworkSecurityGroup targetNetworkSecurityGroup = (Azure.MigrationTarget.NetworkSecurityGroup)parentNode; TreeNode networkSecurityGroupNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetNetworkSecurityGroup.SourceName, targetNetworkSecurityGroup.ToString(), targetNetworkSecurityGroup, true); targetResourceGroupNode.ExpandAll(); return(networkSecurityGroupNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.LoadBalancer)) { Azure.MigrationTarget.LoadBalancer targetLoadBalancer = (Azure.MigrationTarget.LoadBalancer)parentNode; TreeNode targetLoadBalancerNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetLoadBalancer.SourceName, targetLoadBalancer.ToString(), targetLoadBalancer, true); targetResourceGroupNode.ExpandAll(); return(targetLoadBalancerNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.PublicIp)) { Azure.MigrationTarget.PublicIp targetPublicIp = (Azure.MigrationTarget.PublicIp)parentNode; TreeNode targetPublicIpNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetPublicIp.SourceName, targetPublicIp.ToString(), targetPublicIp, true); targetResourceGroupNode.ExpandAll(); return(targetPublicIpNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.VirtualMachine)) { Azure.MigrationTarget.VirtualMachine targetVirtualMachine = (Azure.MigrationTarget.VirtualMachine)parentNode; TreeNode virtualMachineParentNode = targetResourceGroupNode; TreeNode targetAvailabilitySetNode = null; // https://docs.microsoft.com/en-us/azure/virtual-machines/windows/manage-availability if (targetVirtualMachine.TargetAvailabilitySet != null) { targetAvailabilitySetNode = GetTargetAvailabilitySetNode(targetResourceGroupNode, targetVirtualMachine.TargetAvailabilitySet); virtualMachineParentNode = targetAvailabilitySetNode; } TreeNode virtualMachineNode = SeekARMChildTreeNode(virtualMachineParentNode.Nodes, targetVirtualMachine.SourceName, targetVirtualMachine.ToString(), targetVirtualMachine, true); foreach (Azure.MigrationTarget.Disk targetDisk in targetVirtualMachine.DataDisks) { TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, targetDisk.ToString(), targetDisk.ToString(), targetDisk, true); } foreach (Azure.MigrationTarget.NetworkInterface targetNetworkInterface in targetVirtualMachine.NetworkInterfaces) { TreeNode networkInterfaceNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, targetNetworkInterface.ToString(), targetNetworkInterface.ToString(), targetNetworkInterface, true); } targetResourceGroupNode.ExpandAll(); return(virtualMachineNode); } else { throw new Exception("Unhandled Node Type in AddMigrationTargetToTargetTree: " + parentNode.GetType()); } }
public async Task <TreeNode> AddMigrationTargetToTargetTree(IMigrationTarget parentNode) { if (parentNode == null) { throw new ArgumentNullException("Migration Target cannot be null."); } TreeNode targetResourceGroupNode = SeekResourceGroupTreeNode(); if (parentNode.GetType() == typeof(Azure.MigrationTarget.VirtualNetwork)) { Azure.MigrationTarget.VirtualNetwork targetVirtualNetwork = (Azure.MigrationTarget.VirtualNetwork)parentNode; TreeNode virtualNetworkNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetVirtualNetwork.SourceName, targetVirtualNetwork.ToString(), targetVirtualNetwork, true); foreach (Azure.MigrationTarget.Subnet targetSubnet in targetVirtualNetwork.TargetSubnets) { TreeNode subnetNode = SeekARMChildTreeNode(virtualNetworkNode.Nodes, targetVirtualNetwork.ToString(), targetSubnet.ToString(), targetSubnet, true); } targetResourceGroupNode.ExpandAll(); return(virtualNetworkNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.StorageAccount)) { Azure.MigrationTarget.StorageAccount targetStorageAccount = (Azure.MigrationTarget.StorageAccount)parentNode; TreeNode storageAccountNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetStorageAccount.SourceName, targetStorageAccount.ToString(), targetStorageAccount, true); targetResourceGroupNode.ExpandAll(); return(storageAccountNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.NetworkSecurityGroup)) { Azure.MigrationTarget.NetworkSecurityGroup targetNetworkSecurityGroup = (Azure.MigrationTarget.NetworkSecurityGroup)parentNode; TreeNode networkSecurityGroupNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetNetworkSecurityGroup.SourceName, targetNetworkSecurityGroup.ToString(), targetNetworkSecurityGroup, true); targetResourceGroupNode.ExpandAll(); return(networkSecurityGroupNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.LoadBalancer)) { Azure.MigrationTarget.LoadBalancer targetLoadBalancer = (Azure.MigrationTarget.LoadBalancer)parentNode; TreeNode targetLoadBalancerNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetLoadBalancer.SourceName, targetLoadBalancer.ToString(), targetLoadBalancer, true); targetResourceGroupNode.ExpandAll(); return(targetLoadBalancerNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.PublicIp)) { Azure.MigrationTarget.PublicIp targetPublicIp = (Azure.MigrationTarget.PublicIp)parentNode; TreeNode targetPublicIpNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetPublicIp.SourceName, targetPublicIp.ToString(), targetPublicIp, true); targetResourceGroupNode.ExpandAll(); return(targetPublicIpNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.NetworkInterface)) { Azure.MigrationTarget.NetworkInterface targetNetworkInterface = (Azure.MigrationTarget.NetworkInterface)parentNode; TreeNode targetNetworkInterfaceNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetNetworkInterface.ToString(), targetNetworkInterface.ToString(), targetNetworkInterface, true); targetResourceGroupNode.ExpandAll(); return(targetNetworkInterfaceNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.AvailabilitySet)) { Azure.MigrationTarget.AvailabilitySet targetAvailabilitySet = (Azure.MigrationTarget.AvailabilitySet)parentNode; TreeNode targetAvailabilitySetNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetAvailabilitySet.ToString(), targetAvailabilitySet.ToString(), targetAvailabilitySet, true); targetResourceGroupNode.ExpandAll(); return(targetAvailabilitySetNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.VirtualMachine)) { Azure.MigrationTarget.VirtualMachine targetVirtualMachine = (Azure.MigrationTarget.VirtualMachine)parentNode; TreeNode virtualMachineParentNode = targetResourceGroupNode; TreeNode virtualMachineNode = SeekARMChildTreeNode(virtualMachineParentNode.Nodes, targetVirtualMachine.SourceName, targetVirtualMachine.ToString(), targetVirtualMachine, true); if (targetVirtualMachine.TargetAvailabilitySet != null) { if (targetVirtualMachine.TargetAvailabilitySet.SourceAvailabilitySet != null && targetVirtualMachine.TargetAvailabilitySet.SourceAvailabilitySet.GetType() == typeof(Asm.CloudService)) { // Adding under Virtual Machine, as it is not a managed disk TreeNode dataDiskNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetVirtualMachine.TargetAvailabilitySet.ToString(), targetVirtualMachine.TargetAvailabilitySet.ToString(), targetVirtualMachine.TargetAvailabilitySet, true); } } if (targetVirtualMachine.OSVirtualHardDisk.IsUnmanagedDisk) { // Adding under Virtual Machine, as it is not a managed disk TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, targetVirtualMachine.OSVirtualHardDisk.ToString(), targetVirtualMachine.OSVirtualHardDisk.ToString(), targetVirtualMachine.OSVirtualHardDisk, true); } else { // Under Resource Group, as it is a managed Disk TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineParentNode.Nodes, targetVirtualMachine.OSVirtualHardDisk.ToString(), targetVirtualMachine.OSVirtualHardDisk.ToString(), targetVirtualMachine.OSVirtualHardDisk, true); } foreach (Azure.MigrationTarget.Disk targetDisk in targetVirtualMachine.DataDisks) { if (targetDisk.IsUnmanagedDisk) { // Adding under Virtual Machine, as it is not a managed disk TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, targetDisk.ToString(), targetDisk.ToString(), targetDisk, true); } else { // Under Resource Group, as it is a managed Disk TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineParentNode.Nodes, targetDisk.ToString(), targetDisk.ToString(), targetDisk, true); } } foreach (Azure.MigrationTarget.NetworkInterface targetNetworkInterface in targetVirtualMachine.NetworkInterfaces) { if (targetNetworkInterface.SourceNetworkInterface != null && targetNetworkInterface.SourceNetworkInterface.GetType() == typeof(Azure.Asm.NetworkInterface)) { // We are only adding as a child node if it is an ASM Network Interface, otherwise we expect this to follow ARM convention in which NIC is a first class object in the resource group (not embededded under the VM). TreeNode networkInterfaceNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetNetworkInterface.ToString(), targetNetworkInterface.ToString(), targetNetworkInterface, true); } } targetResourceGroupNode.ExpandAll(); return(virtualMachineNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.Disk)) { Azure.MigrationTarget.Disk targetDisk = (Azure.MigrationTarget.Disk)parentNode; TreeNode targetDiskNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetDisk.SourceName, targetDisk.ToString(), targetDisk, true); targetResourceGroupNode.ExpandAll(); return(targetDiskNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.VirtualMachineImage)) { Azure.MigrationTarget.VirtualMachineImage targetVirtualMachineImage = (Azure.MigrationTarget.VirtualMachineImage)parentNode; TreeNode targetVirtualMachineImageNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetVirtualMachineImage.SourceName, targetVirtualMachineImage.ToString(), targetVirtualMachineImage, true); targetResourceGroupNode.ExpandAll(); return(targetVirtualMachineImageNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.NetworkInterface)) { Azure.MigrationTarget.NetworkInterface targetNetworkInterface = (Azure.MigrationTarget.NetworkInterface)parentNode; TreeNode targetNetworkInterfaceNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetNetworkInterface.SourceName, targetNetworkInterface.ToString(), targetNetworkInterface, true); targetResourceGroupNode.ExpandAll(); return(targetNetworkInterfaceNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.RouteTable)) { Azure.MigrationTarget.RouteTable targetRouteTable = (Azure.MigrationTarget.RouteTable)parentNode; TreeNode targetRouteTableNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetRouteTable.SourceName, targetRouteTable.ToString(), targetRouteTable, true); targetRouteTableNode.ExpandAll(); return(targetRouteTableNode); } else { throw new Exception("Unhandled Node Type in AddMigrationTargetToTargetTree: " + parentNode.GetType()); } }
public ResourceSummary(IMigrationTarget migrationTarget, TargetTreeView targetTreeView) { InitializeComponent(); Bind(migrationTarget, targetTreeView); }