private static void DeleteDataDisk(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName, string diskName, int logicalUnitNumber) { DetachDiskFromVirtualMachine(executor, virtualMachine, serviceName, logicalUnitNumber); WaitForDiskToBeFree(executor, diskName); DeleteDisk(executor, diskName); }
public MessageHandler(IPowershellExecutor executor) { _handlers = new Dictionary<string, IMessageHandler> { {"Create", new SowMessageHandler(executor)}, {"Delete", new ReapMessageHandler(executor)} }; }
private static bool AzureVirtualMachineExists(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName) { var getAzureVmCommand = new GetAzureVmCommand { ServiceName = serviceName, Name = virtualMachine.Name }; var results = executor.Execute(getAzureVmCommand); var result = results.Any(); return result; }
private static void AttachAzureDrive(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName, string dataDiskName) { var getAzureVm = new GetAzureVmCommand { Name = virtualMachine.Name, ServiceName = serviceName }; var addAzureDataDisk = new AddAzureDataDiskCommand { Import = true, DiskName = dataDiskName, LogicalUnitNumber = 0 }; var updateAzureVm = new UpdateAzureVmCommand(); var result = executor.Execute(getAzureVm, addAzureDataDisk, updateAzureVm); }
public ReapMessageHandler(IPowershellExecutor executor) { _executor = executor; }
private static void WaitForDiskToBeFree(IPowershellExecutor executor, string diskName) { var diskAvailable = false; do { var getAzureDiskCommand = new GetAzureDiskCommand { DiskName = diskName }; var availability = executor.Execute(getAzureDiskCommand) .Select(x => x.Properties["AttachedTo"].Value) .FirstOrDefault(); if (availability == null) { diskAvailable = true; } } while (diskAvailable == false); }
private static string GetAttachedOsDisks(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName) { var getAzureVmCommand = new GetAzureVmCommand { ServiceName = serviceName, Name = virtualMachine.Name }; var getAzureOsDiskCommand = new GetAzureOsDiskCommand(); var osDisk = executor.Execute(getAzureVmCommand, getAzureOsDiskCommand) .Select(x => x.Properties["DiskName"].Value) .Cast<string>() .FirstOrDefault(); return osDisk; }
private static IEnumerable<KeyValuePair<string, int>> GetAttachedDataDisks(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName) { var getAzureVmCommand = new GetAzureVmCommand { ServiceName = serviceName, Name = virtualMachine.Name }; var getAzureDataDiskCommand = new GetAzureDataDiskCommand(); var dataDisks = executor.Execute(getAzureVmCommand, getAzureDataDiskCommand) .ToDictionary(x => (string) x.Properties["DiskName"].Value, y => (int) y.Properties["LUN"].Value); //.Select(x => x.Properties["DiskName"].Value) //.Cast<string>(); return dataDisks; }
private static void CopyVirtualHardDrive(IPowershellExecutor executor, string sourceVhdName, string vhdContainerName, string dataDiskName) { var azureStorageBlobCopyCommand = new StartAzureStorageBlobCopyCommand { SrcBlob = sourceVhdName, SrcContainer = vhdContainerName, DestContainer = vhdContainerName, DestBlob = String.Format("{0}.vhd", dataDiskName), Force = true }; var results = executor.Execute(azureStorageBlobCopyCommand); if (results.Any()) { var copyPending = false; var getAzureStorageBlobCopyStateCommand = new GetAzureStorageBlobCopyStateCommand(); do { var copyResult = executor.Execute(results, getAzureStorageBlobCopyStateCommand) .OfType<PSObject>() .Select(x => x.BaseObject) .FirstOrDefault(); if (copyResult != null) { var type = copyResult.GetType(); var property = type.GetProperty("Status", BindingFlags.Instance | BindingFlags.Public); var value = String.Format("{0}", property.GetValue(copyResult)); copyPending = (value == "Pending"); } if (copyPending) { Thread.Sleep(10); } } while (copyPending); } }
private static void DeleteOsDisk(IPowershellExecutor executor, string osDisk) { WaitForDiskToBeFree(executor, osDisk); DeleteDisk(executor, osDisk); }
private static void DeleteExistingVirtualMachine(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName) { var removeAzureVmCommand = new RemoveAzureVmCommand { ServiceName = serviceName, Name = virtualMachine.Name }; executor.Execute(removeAzureVmCommand); }
private static void ProvisionVirtualMachine(IPowershellExecutor executor, VirtualMachine virtualMachine, string imageName, string serviceName) { var newAzureVmConfigCommand = new NewAzureVmConfigCommand { Name = virtualMachine.Name, ImageName = imageName, InstanceSize = virtualMachine.Size }; var addAzureProvisioningConfigCommand = new AddAzureProvisioningConfigCommand { Windows = true, AdminPassword = virtualMachine.AdminPassword, AdminUsername = virtualMachine.AdminUserName, TimeZone = virtualMachine.TimeZone }; var newAzureVmCommand = new NewAzureVmCommand { //Location = virtualMachine.Location, ServiceName = serviceName, DeploymentName = serviceName, WaitForBoot = false }; var results = executor.Execute(newAzureVmConfigCommand, addAzureProvisioningConfigCommand, newAzureVmCommand); }
private static void PrepareAzureDrive(IPowershellExecutor executor, string sourceVhdName, string storageAccountUrl, string vhdContainerName, string dataDiskName) { CopyVirtualHardDrive(executor, sourceVhdName, vhdContainerName, dataDiskName); CreateDisk(executor, storageAccountUrl, vhdContainerName, dataDiskName); }
private static void CreateNewVirtualMachine(IPowershellExecutor executor, VirtualMachine virtualMachine, string imageName, string serviceName, string sourceVhdName, string storageAccountUrl, string vhdContainerName, string dataDiskName) { ProvisionVirtualMachine(executor, virtualMachine, imageName, serviceName); PrepareAzureDrive(executor, sourceVhdName, storageAccountUrl, vhdContainerName, dataDiskName); AttachAzureDrive(executor, virtualMachine, serviceName, dataDiskName); }
private static void CreateDisk(IPowershellExecutor executor, string storageAccountUrl, string vhdContainerName, string dataDiskName) { var addAzureDiskCommand = new AddAzureDiskCommand { DiskName = dataDiskName, Label = dataDiskName, MediaLocation = String.Format("{0}/{1}/{2}.vhd", storageAccountUrl, vhdContainerName, dataDiskName) }; var results = executor.Execute(addAzureDiskCommand); }
private static void DeleteDisk(IPowershellExecutor executor, string diskName) { var removeAzureDiskCommand = new RemoveAzureDiskCommand { DiskName = diskName, DeleteVhd = true }; executor.Execute(removeAzureDiskCommand); }
private static void DeleteExistingArtifacts(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName) { if (AzureVirtualMachineExists(executor, virtualMachine, serviceName)) { var osDisk = GetAttachedOsDisks(executor, virtualMachine, serviceName); var dataDisks = GetAttachedDataDisks(executor, virtualMachine, serviceName); foreach (var dataDisk in dataDisks) { DeleteDataDisk(executor, virtualMachine, serviceName, dataDisk.Key, dataDisk.Value); } DeleteExistingVirtualMachine(executor, virtualMachine, serviceName); DeleteOsDisk(executor, osDisk); } }
private static void DetachDiskFromVirtualMachine(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName, int logicalUnitNumber) { var getAzureVmCommand = new GetAzureVmCommand { ServiceName = serviceName, Name = virtualMachine.Name }; var removeAzureDataDiskCommand = new RemoveAzureDataDiskCommand { LogicalUnitNumber = logicalUnitNumber }; var updateAzureVmCommand = new UpdateAzureVmCommand(); executor.Execute(getAzureVmCommand, removeAzureDataDiskCommand, updateAzureVmCommand); }