コード例 #1
0
        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);
        }
コード例 #2
0
 public MessageHandler(IPowershellExecutor executor)
 {
     _handlers = new Dictionary<string, IMessageHandler>
     {
         {"Create", new SowMessageHandler(executor)},
         {"Delete", new ReapMessageHandler(executor)}
     };
 }
コード例 #3
0
        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;
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public ReapMessageHandler(IPowershellExecutor executor)
 {
     _executor = executor;
 }
コード例 #6
0
        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);
        }
コード例 #7
0
        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;
        }
コード例 #8
0
        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;
        }
コード例 #9
0
        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);
            }
        }
コード例 #10
0
        private static void DeleteOsDisk(IPowershellExecutor executor, string osDisk)
        {
            WaitForDiskToBeFree(executor, osDisk);

            DeleteDisk(executor, osDisk);
        }
コード例 #11
0
        private static void DeleteExistingVirtualMachine(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName)
        {
            var removeAzureVmCommand = new RemoveAzureVmCommand
            {
                ServiceName = serviceName,
                Name = virtualMachine.Name
            };

            executor.Execute(removeAzureVmCommand);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        private static void PrepareAzureDrive(IPowershellExecutor executor, string sourceVhdName, string storageAccountUrl, string vhdContainerName, string dataDiskName)
        {
            CopyVirtualHardDrive(executor, sourceVhdName, vhdContainerName, dataDiskName);

            CreateDisk(executor, storageAccountUrl, vhdContainerName, dataDiskName);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        private static void DeleteDisk(IPowershellExecutor executor, string diskName)
        {
            var removeAzureDiskCommand = new RemoveAzureDiskCommand
            {
                DiskName = diskName,
                DeleteVhd = true
            };

            executor.Execute(removeAzureDiskCommand);
        }
コード例 #17
0
        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);
            }
        }
コード例 #18
0
        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);
        }