Пример #1
0
        private static void QueueMessage(string messageType, VirtualMachine virtualMachine)
        {
            if (VirtualMachine.IsValid(virtualMachine) == false)
            {
                throw new ArgumentException("Invalid virtual machine.", "virtualMachine");
            }

            var connectionString = CloudConfigurationManager.GetSetting("ServiceBus.ConnectionString");
            var queueName = CloudConfigurationManager.GetSetting("QueueName");

            var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

            if (!namespaceManager.QueueExists(queueName))
            {
                var queue = new QueueDescription(queueName)
                {
                    DefaultMessageTimeToLive = new TimeSpan(7, 0, 0, 0)
                };

                namespaceManager.CreateQueue(queue);
            }

            var message = PrepareMessage(messageType, virtualMachine);

            var client = QueueClient.CreateFromConnectionString(connectionString, queueName);

            client.Send(message);
        }
Пример #2
0
        public static bool IsValid(VirtualMachine virtualMachine)
        {
            var result = true;

            if (virtualMachine == null)
            {
                result = false;
            }
            else if (String.IsNullOrWhiteSpace(virtualMachine.Name))
            {
                result = false;
            }
            else if (virtualMachine.Size == AzureVirtualMachineSize.None)
            {
                result = false;
            }
            else if (String.IsNullOrWhiteSpace(virtualMachine.AdminUserName))
            {
                result = false;
            }
            else if (String.IsNullOrWhiteSpace(virtualMachine.AdminPassword))
            {
                result = false;
            }
            else if (String.IsNullOrWhiteSpace(virtualMachine.TimeZone))
            {
                result = false;
            }
            else if (String.IsNullOrWhiteSpace(virtualMachine.Location))
            {
                result = false;
            }

            return result;
        }
Пример #3
0
        public void QueueCreateMessage_InvalidVirtualMachine_ThrowsArgumentException()
        {
            var messenger = new Messenger();
            var virtualMachine = new VirtualMachine();

            Assert.That(() => messenger.QueueCreateMessage(virtualMachine), Throws.ArgumentException);
        }
        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);
        }
Пример #5
0
        private static BrokeredMessage PrepareMessage(string messageType, VirtualMachine virtualMachine)
        {
            var message = new BrokeredMessage();
            message.SetMessageType(messageType);
            message.SetObject(virtualMachine);

            return message;
        }
        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;
        }
        public void Delete(string name)
        {
            var virtualMachine = new VirtualMachine
            {
                AdminPassword = "******",
                AdminUserName = "******",
                Location = ".",
                Name = name,
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "."
            }; //TODO: This feels hacky

            _repository.Delete(name);
            _messenger.QueueDeleteMessage(virtualMachine);
        }
        public void SetAndGetVirtualMachine_AdminUserNameIsPersisted()
        {
            var message = new BrokeredMessage();
            var expected = new VirtualMachine
            {
                Name = "Name",
                AdminUserName = "******",
                AdminPassword = "******",
                Location = "Location",
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "TimeZone"
            };

            message.SetObject(expected);

            var actual = message.GetObject<VirtualMachine>();

            Assert.That(actual.AdminUserName, Is.EqualTo(expected.AdminUserName));
        }
Пример #9
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);
        }
Пример #10
0
        public void QueueCreateMessage_ValidVirtualMachine_QueuesMessage()
        {
            var messenger = new Messenger();
            var virtualMachine = new VirtualMachine
            {
                Name = "Test",
                AdminPassword = "******",
                AdminUserName = "******",
                Location = "a;sdgh;",
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "kl;agh;"
            };

            messenger.QueueCreateMessage(virtualMachine);

            //Verify message on test queue
            var result = RetrieveQueuedMessage();

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Properties["VirtualMachine.Name"], Is.EqualTo("Test"));
            result.Complete();
        }
Пример #11
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);
        }
 public void Create(VirtualMachine machine)
 {
     //VirtualMachines[machine.Name] = machine;
 }
Пример #13
0
 public void QueueDeleteMessage(VirtualMachine virtualMachine)
 {
     QueueMessage("Delete", virtualMachine);
 }
        public void Get_NoVirtualMachines_ReturnsEmptyList()
        {
            // Arrange
            var machineList = new VirtualMachine[0];

            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(machineList.AsQueryable());

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var result = controller.Get();

            // Assert
            Assert.That(result.Any(), Is.False);
        }
Пример #15
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);
            }
        }
Пример #16
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;
        }
        public void Get_RepositoryIsCalled()
        {
            // Arrange
            var machineList = new VirtualMachine[0];

            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(machineList.AsQueryable());

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            controller.Get();

            // Assert
            repository.VerifyAllExpectations();
        }
Пример #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);
        }
Пример #19
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;
        }
        public void Post_InvalidVirtualMachine_RepositoryIsNotCalled()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Create(Arg<VirtualMachine>.Is.TypeOf))
                .Repeat.Never();

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            var machine = new VirtualMachine();

            // Act
            try
            {
                controller.Post(machine);
            }
            catch (HttpException) { }

            // Assert
            repository.VerifyAllExpectations();
        }
Пример #21
0
        private static void DeleteExistingVirtualMachine(IPowershellExecutor executor, VirtualMachine virtualMachine, string serviceName)
        {
            var removeAzureVmCommand = new RemoveAzureVmCommand
            {
                ServiceName = serviceName,
                Name = virtualMachine.Name
            };

            executor.Execute(removeAzureVmCommand);
        }
Пример #22
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);
        }
Пример #23
0
 public void QueueCreateMessage(VirtualMachine virtualMachine)
 {
     QueueMessage("Create", virtualMachine);
 }
        public void Post_VirtualMachineAlreadyExists_ThrowsHttpException()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(new EnumerableQuery<VirtualMachine>(new[] {new VirtualMachine {Name = "Machine"}}));

            var messenger = MockRepository.GenerateStub<IMessenger>();
            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var virtualMachine = new VirtualMachine
            {
                Name = "Machine",
                AdminPassword = "******",
                AdminUserName = "******",
                Location = "a;sdgh;",
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "kl;agh;"
            };

            // Assert
            Assert.That(() => controller.Post(virtualMachine), Throws.InstanceOf<HttpException>());
            repository.VerifyAllExpectations();
        }
        public void Post_ValidVirtualMachine_ReturnsMachine()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(new EnumerableQuery<VirtualMachine>(Enumerable.Empty<VirtualMachine>()));
            var messenger = MockRepository.GenerateStub<IMessenger>();
            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var virtualMachine = new VirtualMachine
            {
                Name = "Machine",
                AdminPassword = "******",
                AdminUserName = "******",
                Location = "a;sdgh;",
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "kl;agh;"
            };
            var result = controller.Post(virtualMachine);

            // Assert
            Assert.That(result.Name, Is.EqualTo("Machine"));
        }
        public void Post_ValidVirtualMachine_RepositoryIsCalled()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(new EnumerableQuery<VirtualMachine>(Enumerable.Empty<VirtualMachine>()));
            repository.Expect(x => x.Create(Arg<VirtualMachine>.Is.TypeOf));

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            var virtualMachine = new VirtualMachine
            {
                Name = "Machine",
                AdminPassword = "******",
                AdminUserName = "******",
                Location = "a;sdgh;",
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "kl;agh;"
            };

            // Act
            controller.Post(virtualMachine);

            // Assert
            repository.VerifyAllExpectations();
        }