Beispiel #1
0
 /// <summary>
 /// Marks a data disk to be detached.
 /// </summary>
 public static void MarkDataDiskToBeDetached(DataDisk disk, string detachOption = null)
 {
     Assert.NotNull(disk);
     disk.ToBeDetached = true;
     if (!string.IsNullOrEmpty(detachOption))
     {
         disk.DetachOption = detachOption;
     }
 }
Beispiel #2
0
        private DataDisk CreateModelDataDisk(Disk disk)
        {
            var modelDisk = new DataDisk
            {
                DiskSizeGB   = disk.DiskSizeGB,
                CreateOption = DiskCreateOptionTypes.Attach
            };

            return(modelDisk);
        }
 private VirtualMachineScaleSetVM.Update.IUpdate WithExistingDataDisk(DataDisk dataDisk, int lun)
 {
     if (TryFindDataDisk(lun, Inner.StorageProfile.DataDisks) != null)
     {
         throw new System.InvalidOperationException(string.Format("A data disk with lun {0} already attached", lun));
     }
     else if (TryFindDataDisk(lun, managedDataDisks.ExistingDisksToAttach) != null)
     {
         throw new System.InvalidOperationException(string.Format("A data disk with lun {0} already scheduled to be attached", lun));
     }
     managedDataDisks.ExistingDisksToAttach.Add(dataDisk);
     return(this);
 }
        private DataDisk TryFindDataDisk(int lun, IList <DataDisk> dataDisks)
        {
            DataDisk disk = null;

            foreach (DataDisk dataDisk in dataDisks)
            {
                if (lun == dataDisk.Lun)
                {
                    disk = dataDisk;
                    break;
                }
            }
            return(disk);
        }
        public VirtualMachineScaleSetVM.Update.IUpdate WithoutDataDisk(int lun)
        {
            DataDisk dataDisk = TryFindDataDisk(lun, Inner.StorageProfile.DataDisks);

            if (dataDisk == null)
            {
                throw new System.InvalidOperationException(string.Format("A data disk with lun {0} not found", lun));
            }
            if (dataDisk.CreateOption != DiskCreateOptionTypes.Attach)
            {
                throw new System.InvalidOperationException(string.Format("A data disk with lun {0} cannot be detached, as it is part of Virtual Machine Scale Set model", lun));
            }
            managedDataDisks.DiskLunsToRemove.Add(lun);
            return(this);
        }
        private async Task AttachDataDiskToVMScaleSetVM(VirtualMachineScaleSetVM vmssVM, VirtualMachineScaleSetVM vmModel, int lun)
        {
            var diskName = TestPrefix + "dataDisk" + lun;

            var disk = await CreateDataDisk(diskName);

            var dd = new DataDisk(lun, DiskCreateOptionTypes.Attach)
            {
                Name        = diskName,
                ManagedDisk = new ManagedDiskParameters()
                {
                    Id = disk.Id,
                    StorageAccountType = changeType(disk.Sku.Name)
                }
            };

            //(lun, diskName, null, null, null, DiskCreateOptionTypes.Attach, null, new ManagedDiskParameters(disk.Id,disk.Sku.Name,null), null, null, null);

            vmssVM.StorageProfile.DataDisks.Add(dd);

            // Add the data disk to the model for validation later
            vmModel.StorageProfile.DataDisks.Add(CreateModelDataDisk(disk));
        }
Beispiel #7
0
 internal AzureSLA GetDiskSLA(DataDisk datadisk)
 {
     return(this.GetDiskSLA(datadisk.DiskSizeGB, datadisk.Vhd.Uri));
 }
Beispiel #8
0
        public async Task TestVMDataDiskScenario()
        {
            EnsureClientsInitialized(DefaultLocation);
            ImageReference imgageRef = await GetPlatformVMImage(useWindowsImage : true);

            // Create resource group
            var            rgName             = Recording.GenerateAssetName(TestPrefix);
            string         storageAccountName = Recording.GenerateAssetName(TestPrefix);
            string         asName             = Recording.GenerateAssetName("as");
            VirtualMachine inputVM;
            bool           passed = false;

            try
            {
                // Create Storage Account, so that both the VMs can share it
                var storageAccountOutput = await  CreateStorageAccount(rgName, storageAccountName);

                Action <VirtualMachine> addDataDiskToVM = vm =>
                {
                    string containerName = Recording.GenerateAssetName("testvmdatadiskscenario", TestPrefix);
                    var    vhdContainer  = "https://" + storageAccountName + ".blob.core.windows.net/" + containerName;
                    var    vhduri        = vhdContainer + string.Format("/{0}.vhd", Recording.GenerateAssetName("testvmdatadiskscenario", TestPrefix));

                    vm.HardwareProfile.VmSize = VirtualMachineSizeTypes.StandardA4;
                    foreach (int index in new int[] { 1, 2 })
                    {
                        var diskName = "dataDisk" + index;
                        var ddUri    = vhdContainer + string.Format("/{0}{1}.vhd", diskName, Recording.GenerateAssetName("testvmdatadiskscenario", TestPrefix));
                        var dd       = new DataDisk(1 + index, DiskCreateOptionTypes.Empty)
                        {
                            Caching    = CachingTypes.None,
                            Image      = null,
                            DiskSizeGB = 10,
                            Name       = diskName,
                            Vhd        = new VirtualHardDisk
                            {
                                Uri = ddUri
                            }
                        };
                        vm.StorageProfile.DataDisks.Add(dd);
                    }

                    var testStatus = new InstanceViewStatus
                    {
                        Code    = "test",
                        Message = "test"
                    };

                    var testStatusList = new List <InstanceViewStatus> {
                        testStatus
                    };

                    // Negative tests for a bug in 5.0.0 that read-only fields have side-effect on the request body

                    /* vm.InstanceView = new VirtualMachineInstanceView
                     * {
                     *  Statuses = testStatusList,
                     *  VmAgent = new VirtualMachineAgentInstanceView
                     *  {
                     *      Statuses = testStatusList,
                     *      ExtensionHandlers = {
                     *          new VirtualMachineExtensionHandlerInstanceView
                     *          {
                     *              Status = testStatus,
                     *              Type = "test",
                     *              TypeHandlerVersion = "test"
                     *          }
                     *      },
                     *      VmAgentVersion = "test"
                     *  },
                     *  Disks = {
                     *      new DiskInstanceView
                     *      {
                     *          Statuses = testStatusList,
                     *          Name = "test"
                     *      }
                     *  },
                     *  Extensions = {
                     *      new VirtualMachineExtensionInstanceView
                     *      {
                     *          Statuses = testStatusList
                     *      }
                     *  }
                     * }; */
                };

                var returnTwoVM = await CreateVM(rgName, asName, storageAccountOutput, imgageRef, addDataDiskToVM);

                VirtualMachine vm1 = returnTwoVM.Item1;
                inputVM = returnTwoVM.Item2;
                string inputVMName = returnTwoVM.Item3;
                var    getVMWithInstanceViewResponse = await VirtualMachinesOperations.GetAsync(rgName, inputVMName);

                Assert.True(getVMWithInstanceViewResponse != null, "VM in Get");
                ValidateVMInstanceView(inputVM, getVMWithInstanceViewResponse);

                var vm2 = getVMWithInstanceViewResponse;
                var vmReCreateResponse = await WaitForCompletionAsync(await VirtualMachinesOperations.StartCreateOrUpdateAsync(rgName, getVMWithInstanceViewResponse.Value.Name, getVMWithInstanceViewResponse));

                await WaitForCompletionAsync(await VirtualMachinesOperations.StartDeleteAsync(rgName, inputVMName));

                passed = true;
                Assert.True(passed);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public void TestVMDataDiskScenario()
        {
            using (MockContext context = MockContext.Start(this.GetType()))
            {
                EnsureClientsInitialized(context);

                ImageReference imgageRef = GetPlatformVMImage(useWindowsImage: true);
                // Create resource group
                var            rgName             = ComputeManagementTestUtilities.GenerateName(TestPrefix);
                string         storageAccountName = ComputeManagementTestUtilities.GenerateName(TestPrefix);
                string         asName             = ComputeManagementTestUtilities.GenerateName("as");
                VirtualMachine inputVM;
                bool           passed = false;

                try
                {
                    // Create Storage Account, so that both the VMs can share it
                    var storageAccountOutput = CreateStorageAccount(rgName, storageAccountName);

                    Action <VirtualMachine> addDataDiskToVM = vm =>
                    {
                        string containerName = HttpMockServer.GetAssetName("TestVMDataDiskScenario", TestPrefix);
                        var    vhdContainer  = "https://" + storageAccountName + ".blob.core.windows.net/" + containerName;
                        var    vhduri        = vhdContainer + string.Format("/{0}.vhd", HttpMockServer.GetAssetName("TestVMDataDiskScenario", TestPrefix));

                        vm.HardwareProfile.VmSize   = VirtualMachineSizeTypes.StandardA1V2;
                        vm.StorageProfile.DataDisks = new List <DataDisk>();
                        foreach (int index in new int[] { 1, 2 })
                        {
                            var diskName = "dataDisk" + index;
                            var ddUri    = vhdContainer + string.Format("/{0}{1}.vhd", diskName, HttpMockServer.GetAssetName("TestVMDataDiskScenario", TestPrefix));
                            var dd       = new DataDisk
                            {
                                Caching      = CachingTypes.None,
                                Image        = null,
                                DiskSizeGB   = 10,
                                CreateOption = DiskCreateOptionTypes.Empty,
                                Lun          = 1 + index,
                                Name         = diskName,
                                Vhd          = new VirtualHardDisk
                                {
                                    Uri = ddUri
                                }
                            };
                            vm.StorageProfile.DataDisks.Add(dd);
                        }

                        var testStatus = new InstanceViewStatus
                        {
                            Code    = "test",
                            Message = "test"
                        };

                        var testStatusList = new List <InstanceViewStatus> {
                            testStatus
                        };

                        // Negative tests for a bug in 5.0.0 that read-only fields have side-effect on the request body

                        /* vm.InstanceView = new VirtualMachineInstanceView
                         * {
                         *  Statuses = testStatusList,
                         *  VmAgent = new VirtualMachineAgentInstanceView
                         *  {
                         *      Statuses = testStatusList,
                         *      ExtensionHandlers = new List<VirtualMachineExtensionHandlerInstanceView>
                         *      {
                         *          new VirtualMachineExtensionHandlerInstanceView
                         *          {
                         *              Status = testStatus,
                         *              Type = "test",
                         *              TypeHandlerVersion = "test"
                         *          }
                         *      },
                         *      VmAgentVersion = "test"
                         *  },
                         *  Disks = new List<DiskInstanceView>
                         *  {
                         *      new DiskInstanceView
                         *      {
                         *          Statuses = testStatusList,
                         *          Name = "test"
                         *      }
                         *  },
                         *  Extensions = new List<VirtualMachineExtensionInstanceView>
                         *  {
                         *      new VirtualMachineExtensionInstanceView
                         *      {
                         *          Statuses = testStatusList
                         *      }
                         *  }
                         * }; */
                    };

                    var vm1 = CreateVM(rgName, asName, storageAccountOutput, imgageRef, out inputVM, addDataDiskToVM);

                    var getVMWithInstanceViewResponse = m_CrpClient.VirtualMachines.Get(rgName, inputVM.Name, InstanceViewTypes.InstanceView);
                    Assert.True(getVMWithInstanceViewResponse != null, "VM in Get");
                    ValidateVMInstanceView(inputVM, getVMWithInstanceViewResponse);

                    var vm2 = getVMWithInstanceViewResponse;
                    var vmReCreateResponse = m_CrpClient.VirtualMachines.CreateOrUpdate(rgName, getVMWithInstanceViewResponse.Name, getVMWithInstanceViewResponse);

                    m_CrpClient.VirtualMachines.Delete(rgName, inputVM.Name);

                    passed = true;
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    m_ResourcesClient.ResourceGroups.Delete(rgName);
                    Assert.True(passed);
                }
            }
        }
        public void TestVMDataDiskScenario_ManagedDisk_ForceDetach()
        {
            using (MockContext context = MockContext.Start(this.GetType()))
            {
                string originalTestLocation = Environment.GetEnvironmentVariable("AZURE_VM_TEST_LOCATION");
                Environment.SetEnvironmentVariable("AZURE_VM_TEST_LOCATION", "eastus2euap");
                EnsureClientsInitialized(context);

                ImageReference imageReference             = GetPlatformVMImage(useWindowsImage: true);
                string         resourceGroupName          = TestUtilities.GenerateName(TestPrefix);
                string         storageAccountForDisksName = TestUtilities.GenerateName(TestPrefix);
                string         availabilitySetName        = TestUtilities.GenerateName(TestPrefix);

                try
                {
                    StorageAccount storageAccountForDisks = CreateStorageAccount(resourceGroupName, storageAccountForDisksName);

                    Action <VirtualMachine> addManagedDataDiskToVM = vm =>
                    {
                        vm.HardwareProfile.VmSize   = VirtualMachineSizeTypes.StandardA4;
                        vm.StorageProfile.DataDisks = new List <DataDisk>();

                        var diskName = "dataDisk" + TestUtilities.GenerateGuid();
                        var dd       = new DataDisk
                        {
                            Caching      = CachingTypes.None,
                            DiskSizeGB   = 10,
                            CreateOption = DiskCreateOptionTypes.Empty,
                            Lun          = 0,
                            Name         = diskName,
                            ManagedDisk  = new ManagedDiskParameters()
                            {
                                StorageAccountType = StorageAccountType.StandardLRS
                            }
                        };
                        vm.StorageProfile.DataDisks.Add(dd);

                        var testStatus = new InstanceViewStatus
                        {
                            Code    = "test",
                            Message = "test"
                        };

                        var testStatusList = new List <InstanceViewStatus> {
                            testStatus
                        };
                    };

                    VirtualMachine inputVM;
                    CreateVM(resourceGroupName, availabilitySetName, storageAccountForDisks, imageReference, out inputVM, addManagedDataDiskToVM, hasManagedDisks: true);

                    VirtualMachine getVMWithInstanceViewResponse = m_CrpClient.VirtualMachines.Get(resourceGroupName, inputVM.Name, InstanceViewTypes.InstanceView);
                    ValidateVMInstanceView(inputVM, getVMWithInstanceViewResponse, hasManagedDisks: true);

                    DataDisk diskToBeForceDetached = getVMWithInstanceViewResponse.StorageProfile.DataDisks.FirstOrDefault(disk => disk.Lun == 0);
                    Assert.NotNull(diskToBeForceDetached);

                    Helpers.MarkDataDiskToBeDetached(diskToBeForceDetached, "ForceDetach");

                    var forceDetachVMResponse = m_CrpClient.VirtualMachines.CreateOrUpdate(resourceGroupName, getVMWithInstanceViewResponse.Name, getVMWithInstanceViewResponse);
                    Assert.Equal(0, forceDetachVMResponse.StorageProfile.DataDisks.Count);
                }
                finally
                {
                    Environment.SetEnvironmentVariable("AZURE_VM_TEST_LOCATION", originalTestLocation);
                    m_ResourcesClient.ResourceGroups.Delete(resourceGroupName);
                }
            }
        }
        private void CreateImageTestHelper(string originalTestLocation, string diskEncryptionSetId)
        {
            VirtualMachine inputVM = null;

            // Create resource group
            var rgName = ComputeManagementTestUtilities.GenerateName(TestPrefix);

            var imageName = ComputeManagementTestUtilities.GenerateName("imageTest");

            // Create a VM, so we can use its OS disk for creating the image
            string         storageAccountName = ComputeManagementTestUtilities.GenerateName(TestPrefix);
            string         asName             = ComputeManagementTestUtilities.GenerateName("as");
            ImageReference imageRef           = GetPlatformVMImage(useWindowsImage: true);

            try
            {
                // Create Storage Account
                var storageAccountOutput = CreateStorageAccount(rgName, storageAccountName);

                // Add data disk to the VM.
                Action <VirtualMachine> addDataDiskToVM = vm =>
                {
                    string containerName = HttpMockServer.GetAssetName("TestImageOperations", TestPrefix);
                    var    vhdContainer  = "https://" + storageAccountName + ".blob.core.windows.net/" + containerName;
                    var    vhduri        = vhdContainer + string.Format("/{0}.vhd", HttpMockServer.GetAssetName("TestImageOperations", TestPrefix));

                    vm.HardwareProfile.VmSize   = VirtualMachineSizeTypes.StandardA4;
                    vm.StorageProfile.DataDisks = new List <DataDisk>();
                    foreach (int index in new int[] { 1, 2 })
                    {
                        var diskName = "dataDisk" + index;
                        var ddUri    = vhdContainer + string.Format("/{0}{1}.vhd", diskName, HttpMockServer.GetAssetName("TestImageOperations", TestPrefix));
                        var dd       = new DataDisk
                        {
                            Caching      = CachingTypes.None,
                            Image        = null,
                            DiskSizeGB   = 10,
                            CreateOption = DiskCreateOptionTypes.Empty,
                            Lun          = 1 + index,
                            Name         = diskName,
                            Vhd          = new VirtualHardDisk
                            {
                                Uri = ddUri
                            }
                        };
                        vm.StorageProfile.DataDisks.Add(dd);
                    }

                    var testStatus = new InstanceViewStatus
                    {
                        Code    = "test",
                        Message = "test"
                    };

                    var testStatusList = new List <InstanceViewStatus> {
                        testStatus
                    };
                };

                // Create the VM, whose OS disk will be used in creating the image
                var createdVM = CreateVM(rgName, asName, storageAccountOutput, imageRef, out inputVM, addDataDiskToVM);

                int expectedDiskLunWithDiskEncryptionSet = createdVM.StorageProfile.DataDisks[0].Lun;

                // Create the Image
                var imageInput = new Image()
                {
                    Location = m_location,
                    Tags     = new Dictionary <string, string>()
                    {
                        { "RG", "rg" },
                        { "testTag", "1" },
                    },
                    StorageProfile = new ImageStorageProfile()
                    {
                        OsDisk = new ImageOSDisk()
                        {
                            BlobUri           = createdVM.StorageProfile.OsDisk.Vhd.Uri,
                            DiskEncryptionSet = diskEncryptionSetId == null ? null : new DiskEncryptionSetParameters()
                            {
                                Id = diskEncryptionSetId
                            },
                            OsState = OperatingSystemStateTypes.Generalized,
                            OsType  = OperatingSystemTypes.Windows,
                        },
                        DataDisks = new List <ImageDataDisk>()
                        {
                            new ImageDataDisk()
                            {
                                BlobUri           = createdVM.StorageProfile.DataDisks[0].Vhd.Uri,
                                DiskEncryptionSet = diskEncryptionSetId == null ? null: new DiskEncryptionSetParameters()
                                {
                                    Id = diskEncryptionSetId
                                },
                                Lun = expectedDiskLunWithDiskEncryptionSet,
                            }
                        }
                    },

                    HyperVGeneration = HyperVGeneration.V1
                };

                var image    = m_CrpClient.Images.CreateOrUpdate(rgName, imageName, imageInput);
                var getImage = m_CrpClient.Images.Get(rgName, imageName);

                ValidateImage(imageInput, getImage);

                if (diskEncryptionSetId != null)
                {
                    Assert.True(getImage.StorageProfile.OsDisk.DiskEncryptionSet != null, "OsDisk.DiskEncryptionSet is null");
                    Assert.True(string.Equals(diskEncryptionSetId, getImage.StorageProfile.OsDisk.DiskEncryptionSet.Id, StringComparison.OrdinalIgnoreCase),
                                "getImage.StorageProfile.OsDisk.DiskEncryptionSet is not matching with expected DiskEncryptionSet resource");

                    Assert.Equal(1, getImage.StorageProfile.DataDisks.Count);
                    Assert.True(getImage.StorageProfile.DataDisks[0].DiskEncryptionSet != null, ".DataDisks.DiskEncryptionSet is null");
                    Assert.True(string.Equals(diskEncryptionSetId, getImage.StorageProfile.DataDisks[0].DiskEncryptionSet.Id, StringComparison.OrdinalIgnoreCase),
                                "DataDisks.DiskEncryptionSet.Id is not matching with expected DiskEncryptionSet resource");
                }

                ImageUpdate updateParams = new ImageUpdate()
                {
                    Tags = getImage.Tags
                };

                string tagKey = "UpdateTag";
                updateParams.Tags.Add(tagKey, "TagValue");
                m_CrpClient.Images.Update(rgName, imageName, updateParams);

                getImage = m_CrpClient.Images.Get(rgName, imageName);
                Assert.True(getImage.Tags.ContainsKey(tagKey));

                var listResponse = m_CrpClient.Images.ListByResourceGroup(rgName);
                Assert.Single(listResponse);

                m_CrpClient.Images.Delete(rgName, image.Name);
            }
            finally
            {
                Environment.SetEnvironmentVariable("AZURE_VM_TEST_LOCATION", originalTestLocation);
                if (inputVM != null)
                {
                    m_CrpClient.VirtualMachines.Delete(rgName, inputVM.Name);
                }

                m_ResourcesClient.ResourceGroups.Delete(rgName);
            }
        }
Beispiel #12
0
 ///GENMHASH:8240626CF1A18F6A5466996742289188:6EE441451716A7DCFF423F19975ED54D
 internal VirtualMachineDataDiskImpl(DataDisk dataDiskInner) : base(dataDiskInner)
 {
 }
Beispiel #13
0
        private DataDisk CreateModelDataDisk(Disk disk)
        {
            var modelDisk = new DataDisk(0, null, null, null, null, null, DiskCreateOptionTypes.Attach, disk.DiskSizeGB, null, null, null, null);

            return(modelDisk);
        }
        private async Task CreateImageTestHelper(string originalTestLocation, string diskEncryptionSetId)
        {
            // Create resource group
            var rgName    = Recording.GenerateAssetName(TestPrefix);
            var imageName = Recording.GenerateAssetName("imageTest");
            // Create a VM, so we can use its OS disk for creating the image
            string         storageAccountName = Recording.GenerateAssetName(TestPrefix);
            string         asName             = Recording.GenerateAssetName("as");
            ImageReference imageRef           = await GetPlatformVMImage(useWindowsImage : true);

            // Create Storage Account
            var storageAccountOutput = await CreateStorageAccount(rgName, storageAccountName);

            // Add data disk to the VM.
            Action <VirtualMachine> addDataDiskToVM = vm =>
            {
                string containerName = Recording.GenerateAssetName("testimageoperations", TestPrefix);
                var    vhdContainer  = "https://" + storageAccountName + ".blob.core.windows.net/" + containerName;
                var    vhduri        = vhdContainer + string.Format("/{0}.vhd", Recording.GenerateAssetName("testimageoperations", TestPrefix));

                vm.HardwareProfile.VmSize = VirtualMachineSizeTypes.StandardA4;
                foreach (int index in new int[] { 1, 2 })
                {
                    var diskName = "dataDisk" + index;
                    var ddUri    = vhdContainer + string.Format("/{0}{1}.vhd", diskName, Recording.GenerateAssetName("testimageoperations", TestPrefix));
                    var dd       = new DataDisk(1 + index, DiskCreateOptionTypes.Empty)
                    {
                        Caching    = CachingTypes.None,
                        Image      = null,
                        DiskSizeGB = 10,
                        Name       = diskName,
                        Vhd        = new VirtualHardDisk
                        {
                            Uri = ddUri
                        }
                    };
                    vm.StorageProfile.DataDisks.Add(dd);
                }
                var testStatus = new InstanceViewStatus
                {
                    Code    = "test",
                    Message = "test"
                };
                var testStatusList = new List <InstanceViewStatus> {
                    testStatus
                };
            };
            // Create the VM, whose OS disk will be used in creating the image
            var returnTwoVM = await CreateVM(rgName, asName, storageAccountOutput, imageRef, addDataDiskToVM);

            var createdVM = returnTwoVM.Item1;
            int expectedDiskLunWithDiskEncryptionSet = createdVM.StorageProfile.DataDisks[0].Lun;
            // Create the Image
            var imageInput = new Image(m_location)
            {
                Tags =
                {
                    { "RG",      "rg" },
                    { "testTag", "1"  },
                },
                StorageProfile = new ImageStorageProfile()
                {
                    OsDisk = new ImageOSDisk(OperatingSystemTypes.Windows, OperatingSystemStateTypes.Generalized)
                    {
                        BlobUri           = createdVM.StorageProfile.OsDisk.Vhd.Uri,
                        DiskEncryptionSet = diskEncryptionSetId == null ? null : new DiskEncryptionSetParameters()
                        {
                            Id = diskEncryptionSetId
                        },
                    },
                    DataDisks =
                    {
                        new ImageDataDisk(expectedDiskLunWithDiskEncryptionSet)
                        {
                            BlobUri           = createdVM.StorageProfile.DataDisks[0].Vhd.Uri,
                            DiskEncryptionSet = diskEncryptionSetId == null ? null: new DiskEncryptionSetParameters()
                            {
                                Id = diskEncryptionSetId
                            },
                        }
                    }
                },
                HyperVGeneration = HyperVGenerationTypes.V1
            };
            var image = await WaitForCompletionAsync(await ImagesOperations.StartCreateOrUpdateAsync(rgName, imageName, imageInput));

            var getImage = (await ImagesOperations.GetAsync(rgName, imageName)).Value;

            ValidateImage(imageInput, getImage);
            if (diskEncryptionSetId != null)
            {
                Assert.True(getImage.StorageProfile.OsDisk.DiskEncryptionSet != null, "OsDisk.DiskEncryptionSet is null");
                Assert.True(string.Equals(diskEncryptionSetId, getImage.StorageProfile.OsDisk.DiskEncryptionSet.Id, StringComparison.OrdinalIgnoreCase),
                            "getImage.StorageProfile.OsDisk.DiskEncryptionSet is not matching with expected DiskEncryptionSet resource");
                Assert.AreEqual(1, getImage.StorageProfile.DataDisks.Count);
                Assert.True(getImage.StorageProfile.DataDisks[0].DiskEncryptionSet != null, ".DataDisks.DiskEncryptionSet is null");
                Assert.True(string.Equals(diskEncryptionSetId, getImage.StorageProfile.DataDisks[0].DiskEncryptionSet.Id, StringComparison.OrdinalIgnoreCase),
                            "DataDisks.DiskEncryptionSet.Id is not matching with expected DiskEncryptionSet resource");
            }

            ImageUpdate updateParams = new ImageUpdate();

            updateParams.Tags.InitializeFrom(getImage.Tags);

            string tagKey = "UpdateTag";

            updateParams.Tags.Add(tagKey, "TagValue");
            await WaitForCompletionAsync(await ImagesOperations.StartUpdateAsync(rgName, imageName, updateParams));

            getImage = (await ImagesOperations.GetAsync(rgName, imageName)).Value;
            Assert.True(getImage.Tags.ContainsKey(tagKey));
            var listResponse = await(ImagesOperations.ListByResourceGroupAsync(rgName)).ToEnumerableAsync();

            Assert.IsTrue(listResponse.Count() == 1);
            await WaitForCompletionAsync(await ImagesOperations.StartDeleteAsync(rgName, image.Value.Name));
        }
Beispiel #15
0
        public void TestVMDataDiskScenario()
        {
            using (var context = UndoContext.Current)
            {
                context.Start();
                EnsureClientsInitialized();

                ImageReference imgageRef = GetPlatformVMImage(useWindowsImage: true);
                // Create resource group
                var            rgName             = TestUtilities.GenerateName(TestPrefix);
                string         storageAccountName = TestUtilities.GenerateName(TestPrefix);
                string         asName             = TestUtilities.GenerateName("as");
                VirtualMachine inputVM;
                bool           passed = false;

                try
                {
                    // Create Storage Account, so that both the VMs can share it
                    var storageAccountOutput = CreateStorageAccount(rgName, storageAccountName);

                    Action <VirtualMachine> addDataDiskToVM = vm =>
                    {
                        string containerName = TestUtilities.GenerateName(TestPrefix);
                        var    vhdContainer  = string.Format(Constants.StorageAccountBlobUriTemplate, storageAccountName) + containerName;
                        var    vhduri        = vhdContainer + string.Format("/{0}.vhd", TestUtilities.GenerateName(TestPrefix));

                        vm.HardwareProfile.VirtualMachineSize = VirtualMachineSizeTypes.StandardA4;
                        vm.StorageProfile.DataDisks           = new List <DataDisk>();
                        foreach (int index in new int[] { 1, 2 })
                        {
                            var diskName = "dataDisk" + index;
                            var ddUri    = vhdContainer + string.Format("/{0}{1}.vhd", diskName, TestUtilities.GenerateName(TestPrefix));
                            var dd       = new DataDisk
                            {
                                Caching         = CachingTypes.None,
                                SourceImage     = null,
                                DiskSizeGB      = 10,
                                CreateOption    = DiskCreateOptionTypes.Empty,
                                Lun             = 1 + index,
                                Name            = diskName,
                                VirtualHardDisk = new VirtualHardDisk
                                {
                                    Uri = ddUri
                                }
                            };
                            vm.StorageProfile.DataDisks.Add(dd);
                        }

                        var testStatus = new InstanceViewStatus
                        {
                            Code    = "test",
                            Message = "test"
                        };

                        var testStatusList = new List <InstanceViewStatus> {
                            testStatus
                        };

                        // Negative tests for a bug in 5.0.0 that read-only fields have side-effect on the request body
                        vm.InstanceView = new VirtualMachineInstanceView
                        {
                            Statuses = testStatusList,
                            VMAgent  = new VirtualMachineAgentInstanceView
                            {
                                Statuses          = testStatusList,
                                ExtensionHandlers = new List <VirtualMachineExtensionHandlerInstanceView>
                                {
                                    new VirtualMachineExtensionHandlerInstanceView
                                    {
                                        Status             = testStatus,
                                        Type               = "test",
                                        TypeHandlerVersion = "test"
                                    }
                                },
                                VMAgentVersion = "test"
                            },
                            Disks = new List <DiskInstanceView>
                            {
                                new DiskInstanceView
                                {
                                    Statuses = testStatusList,
                                    Name     = "test"
                                }
                            },
                            Extensions = new List <VirtualMachineExtensionInstanceView>
                            {
                                new VirtualMachineExtensionInstanceView
                                {
                                    Statuses = testStatusList
                                }
                            }
                        };
                    };

                    var vm1 = CreateVM_NoAsyncTracking(rgName, asName, storageAccountOutput, imgageRef, out inputVM, addDataDiskToVM);

                    var getVMWithInstanceViewResponse = m_CrpClient.VirtualMachines.GetWithInstanceView(rgName, inputVM.Name);
                    Assert.True(getVMWithInstanceViewResponse.StatusCode == HttpStatusCode.OK);
                    Assert.True(getVMWithInstanceViewResponse.VirtualMachine != null, "VM in Get");
                    ValidateVMInstanceView(inputVM, getVMWithInstanceViewResponse.VirtualMachine);

                    var vm2 = getVMWithInstanceViewResponse.VirtualMachine;
                    var vmReCreateResponse = m_CrpClient.VirtualMachines.CreateOrUpdate(rgName, getVMWithInstanceViewResponse.VirtualMachine);
                    Assert.True(vmReCreateResponse.Status != ComputeOperationStatus.Failed);

                    var lroResponse = m_CrpClient.VirtualMachines.Delete(rgName, inputVM.Name);
                    Assert.True(lroResponse.Status != OperationStatus.Failed);

                    passed = true;
                }
                finally
                {
                    var deleteResourceGroupResponse = m_ResourcesClient.ResourceGroups.Delete(rgName);
                    Assert.True(deleteResourceGroupResponse.StatusCode == HttpStatusCode.OK);
                    Assert.True(passed);
                }
            }
        }
        public void CreateRpcAndRestorePoints()
        {
            using (MockContext context = MockContext.Start(this.GetType().FullName))
            {
                EnsureClientsInitialized(context);
                string         location = ComputeManagementTestUtilities.DefaultLocation;
                var            rgName   = ComputeManagementTestUtilities.GenerateName(TestPrefix);
                ImageReference imageRef = GetPlatformVMImage(useWindowsImage: true);
                VirtualMachine inputVM;
                string         storageAccountForDisksName = TestUtilities.GenerateName(TestPrefix);
                string         availabilitySetName        = TestUtilities.GenerateName(TestPrefix);

                try
                {
                    StorageAccount storageAccountForDisks = CreateStorageAccount(rgName, storageAccountForDisksName);
                    // create the VM
                    VirtualMachine createdVM = CreateVM(rgName, availabilitySetName, storageAccountForDisks, imageRef, out inputVM,
                                                        (vm) =>
                    {
                        vm.DiagnosticsProfile = GetManagedDiagnosticsProfile();
                    }, hasManagedDisks: true);
                    DataDisk dataDisk   = createdVM.StorageProfile.DataDisks[0];
                    string   dataDiskId = dataDisk.ManagedDisk.Id;
                    OSDisk   osDisk     = createdVM.StorageProfile.OsDisk;

                    string rpName   = ComputeManagementTestUtilities.GenerateName("rpClientTest");
                    string rpcName  = ComputeManagementTestUtilities.GenerateName("rpc1ClientTest");
                    string rpcName2 = ComputeManagementTestUtilities.GenerateName("rpc2ClientTest");
                    string vmId     = createdVM.Id;
                    string vmSize   = createdVM.HardwareProfile.VmSize;

                    // create two RPCs
                    Dictionary <string, string> tags = new Dictionary <string, string>()
                    {
                        { "RG", "rg" },
                        { "testTag", "testTagValue" },
                    };
                    RestorePointCollection createdRpc = CreateRpc(createdVM.Id, rpcName, rgName, location, tags);
                    VerifyRpc(createdRpc, rpcName, location, vmId);

                    RestorePointCollection createdRpc2 = CreateRpc(createdVM.Id, rpcName2, rgName, location, tags);
                    VerifyRpc(createdRpc2, rpcName2, location, vmId);

                    // for PATCH RPC, only tags are allowed to be updated
                    Dictionary <string, string> newTags = new Dictionary <string, string>()
                    {
                        { "newTag", "newValue1" },
                        { "newtestTag", "newValue2" },
                    };
                    UpdateRpc(rgName, rpcName, createdRpc, newTags);

                    // GET list of all rpc in the resource group.
                    IEnumerable <RestorePointCollection> rpcs = ListRpcInResourceGroup(rgName);
                    VerifyReturnedRpcs(rpcs, rpcName, rpcName2, location, vmId);

                    // GET list of all rpc in subscription.
                    rpcs = ListRpcInSubscription();
                    VerifyReturnedRpcs(rpcs, rpcName, rpcName2, location, vmId);

                    // create RP in the RPC
                    RestorePoint createdRP = CreateRestorePoint(rgName, rpcName, rpName, osDisk, diskToExclude: dataDiskId);
                    VerifyRestorePointDetails(createdRP, rpName, osDisk, 1,
                                              excludeDiskId: dataDiskId, vmSize: vmSize);
                    RestorePoint getRP = GetRP(rgName, rpcName, rpName);
                    VerifyRestorePointDetails(createdRP, rpName, osDisk, 1,
                                              excludeDiskId: dataDiskId, vmSize: vmSize);

                    // get RPC without $expand=restorePoints
                    RestorePointCollection returnedRpc = GetRpc(rgName, rpcName);
                    VerifyRpc(returnedRpc, rpcName, location, vmId);

                    // get RPC with $expand=restorePoints
                    returnedRpc = GetRpc(rgName, rpcName,
                                         RestorePointCollectionExpandOptions.RestorePoints);
                    VerifyRpc(returnedRpc, rpcName, location, vmId,
                              shouldRpcContainRestorePoints: true);

                    // verify the restore point returned from GET RPC with $expand=restorePoints
                    RestorePoint rpInRpc = returnedRpc.RestorePoints[0];
                    VerifyRestorePointDetails(rpInRpc, rpName, osDisk, 1,
                                              excludeDiskId: dataDiskId, vmSize: vmSize);

                    // delete the restore point
                    DeleteRP(rgName, rpcName, rpName);
                    // GET of deleted restore point should return 404 not found
                    try
                    {
                        GetRP(rgName, rpcName, rpName);
                        Assert.False(true);
                    }
                    catch (CloudException ex)
                    {
                        Assert.True(ex.Response.StatusCode == HttpStatusCode.NotFound);
                    }

                    // delete the restore point collection
                    DeleteRpc(rgName, rpcName);
                    // GET of deleted RPC should return 404 not found
                    try
                    {
                        GetRpc(rgName, rpcName);
                        Assert.False(true);
                    }
                    catch (CloudException ex)
                    {
                        Assert.True(ex.Response.StatusCode == HttpStatusCode.NotFound);
                    }
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    m_ResourcesClient.ResourceGroups.Delete(rgName);
                }
            }
        }