Ejemplo n.º 1
0
 internal ProximityPlacementGroupData(ResourceIdentifier id, string name, ResourceType resourceType, SystemData systemData, IDictionary <string, string> tags, AzureLocation location, IList <string> zones, ProximityPlacementGroupType?proximityPlacementGroupType, IReadOnlyList <ComputeSubResourceDataWithColocationStatus> virtualMachines, IReadOnlyList <ComputeSubResourceDataWithColocationStatus> virtualMachineScaleSets, IReadOnlyList <ComputeSubResourceDataWithColocationStatus> availabilitySets, InstanceViewStatus colocationStatus, ProximityPlacementGroupPropertiesIntent intent) : base(id, name, resourceType, systemData, tags, location)
 {
     Zones = zones;
     ProximityPlacementGroupType = proximityPlacementGroupType;
     VirtualMachines             = virtualMachines;
     VirtualMachineScaleSets     = virtualMachineScaleSets;
     AvailabilitySets            = availabilitySets;
     ColocationStatus            = colocationStatus;
     Intent = intent;
 }
        private void AssertExtension(NodeVMExtension extension, string name = "batchNodeExtension")
        {
            Assert.NotNull(extension);

            Assert.NotNull(extension.VmExtension);
            Assert.Equal(name, extension.VmExtension.Name);
            Assert.Equal("Microsoft.Azure.Extensions", extension.VmExtension.Publisher);
            Assert.Equal("CustomScript", extension.VmExtension.Type);
            Assert.Equal("2.0", extension.VmExtension.TypeHandlerVersion);
            Assert.True(extension.VmExtension.AutoUpgradeMinorVersion);

            Assert.NotNull(extension.InstanceView);
            Assert.Equal(name, extension.InstanceView.Name);

            Assert.NotNull(extension.InstanceView.Statuses);
            Assert.Single(extension.InstanceView.Statuses);
            InstanceViewStatus status = extension.InstanceView.Statuses.First();

            Assert.Equal("ProvisioningState/succeeded", status.Code);
            Assert.Equal("Provisioning succeeded", status.DisplayStatus);
            Assert.True(status.Level.HasValue);
            Assert.Equal(Models.StatusLevelTypes.Info.ToString(), status.Level.Value.ToString());
            Assert.Equal("Enable succeeded: Enabling and starting agent and controller", status.Message);
        }
        private async Task VerifyProximityPlacementGroupColocationStatusView()
        {
            var            ppgName            = Recording.GenerateAssetName("testppg");
            string         asName             = Recording.GenerateAssetName("testas");
            string         vmssName           = Recording.GenerateAssetName("testvmss");
            string         storageAccountName = Recording.GenerateAssetName(TestPrefix);
            ImageReference imageRef           = await GetPlatformVMImage(useWindowsImage : true);

            var inputProximityPlacementGroup = new ProximityPlacementGroup(m_location)
            {
                Tags =
                {
                    { "RG",      "rg" },
                    { "testTag", "1"  },
                },
                ProximityPlacementGroupType = ProximityPlacementGroupType.Standard
            };

            var expectedProximityPlacementGroup = new ProximityPlacementGroup(m_location)
            {
                Tags =
                {
                    { "RG",      "rg" },
                    { "testTag", "1"  },
                },
                ProximityPlacementGroupType = ProximityPlacementGroupType.Standard
            };

            // Create and expect success.
            ProximityPlacementGroup outProximityPlacementGroup = await ProximityPlacementGroupsOperations.CreateOrUpdateAsync(m_resourceGroup1Name, ppgName, inputProximityPlacementGroup);

            ValidateProximityPlacementGroup(expectedProximityPlacementGroup, outProximityPlacementGroup, ppgName);

            VirtualMachine inputVM;
            var            returnTwoVM = await CreateVM(m_resourceGroup1Name, asName, storageAccountName, imageRef, hasManagedDisks : true, hasDiffDisks : false, vmSize : "Standard_A0",
                                                        osDiskStorageAccountType : "Standard_LRS", dataDiskStorageAccountType : "Standard_LRS", writeAcceleratorEnabled : false, zones : null, ppgName : ppgName, diskEncryptionSetId : null);

            VirtualMachine outVM = returnTwoVM.Item1;

            inputVM = returnTwoVM.Item2;
            // Get and expect success.
            outProximityPlacementGroup = await ProximityPlacementGroupsOperations.GetAsync(m_resourceGroup1Name, ppgName, includeColocationStatus : "true");

            InstanceViewStatus expectedInstanceViewStatus = new InstanceViewStatus
            {
                Code          = "ColocationStatus/Aligned",
                Level         = StatusLevelTypes.Info,
                DisplayStatus = "Aligned",
                Message       = "All resources in the proximity placement group are aligned."
            };

            expectedProximityPlacementGroup = new ProximityPlacementGroup(null, null, null, m_location,
                                                                          new Dictionary <string, string>()
            {
                { "RG", "rg" },
                { "testTag", "1" },
            },
                                                                          ProximityPlacementGroupType.Standard,
                                                                          new List <SubResourceWithColocationStatus> {
                new SubResourceWithColocationStatus(outVM.Id, null)
            },
                                                                          null,
                                                                          new List <SubResourceWithColocationStatus> {
                new SubResourceWithColocationStatus(outVM.AvailabilitySet.Id, null)
            },
                                                                          null
                                                                          );
            ValidateProximityPlacementGroup(expectedProximityPlacementGroup, outProximityPlacementGroup, ppgName);
            ValidateColocationStatus(expectedInstanceViewStatus, outProximityPlacementGroup.ColocationStatus);
        }
Ejemplo n.º 4
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;
            }
        }
        internal static AvailabilitySetData DeserializeAvailabilitySetData(JsonElement element)
        {
            Optional <ComputeSku>        sku             = default;
            IDictionary <string, string> tags            = default;
            AzureLocation      location                  = default;
            ResourceIdentifier id                        = default;
            string             name                      = default;
            ResourceType       type                      = default;
            SystemData         systemData                = default;
            Optional <int>     platformUpdateDomainCount = default;
            Optional <int>     platformFaultDomainCount  = default;
            Optional <IList <WritableSubResource> >        virtualMachines         = default;
            Optional <WritableSubResource>                 proximityPlacementGroup = default;
            Optional <IReadOnlyList <InstanceViewStatus> > statuses = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("sku"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    sku = ComputeSku.DeserializeComputeSku(property.Value);
                    continue;
                }
                if (property.NameEquals("tags"))
                {
                    Dictionary <string, string> dictionary = new Dictionary <string, string>();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        dictionary.Add(property0.Name, property0.Value.GetString());
                    }
                    tags = dictionary;
                    continue;
                }
                if (property.NameEquals("location"))
                {
                    location = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("id"))
                {
                    id = new ResourceIdentifier(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("name"))
                {
                    name = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("type"))
                {
                    type = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("systemData"))
                {
                    systemData = JsonSerializer.Deserialize <SystemData>(property.Value.ToString());
                    continue;
                }
                if (property.NameEquals("properties"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.NameEquals("platformUpdateDomainCount"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            platformUpdateDomainCount = property0.Value.GetInt32();
                            continue;
                        }
                        if (property0.NameEquals("platformFaultDomainCount"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            platformFaultDomainCount = property0.Value.GetInt32();
                            continue;
                        }
                        if (property0.NameEquals("virtualMachines"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <WritableSubResource> array = new List <WritableSubResource>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(JsonSerializer.Deserialize <WritableSubResource>(item.ToString()));
                            }
                            virtualMachines = array;
                            continue;
                        }
                        if (property0.NameEquals("proximityPlacementGroup"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            proximityPlacementGroup = JsonSerializer.Deserialize <WritableSubResource>(property0.Value.ToString());
                            continue;
                        }
                        if (property0.NameEquals("statuses"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <InstanceViewStatus> array = new List <InstanceViewStatus>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(InstanceViewStatus.DeserializeInstanceViewStatus(item));
                            }
                            statuses = array;
                            continue;
                        }
                    }
                    continue;
                }
            }
            return(new AvailabilitySetData(id, name, type, systemData, tags, location, sku.Value, Optional.ToNullable(platformUpdateDomainCount), Optional.ToNullable(platformFaultDomainCount), Optional.ToList(virtualMachines), proximityPlacementGroup, Optional.ToList(statuses)));
        }
Ejemplo n.º 6
0
 internal DiskRestorePointReplicationStatus(InstanceViewStatus status, int?completionPercent)
 {
     Status            = status;
     CompletionPercent = completionPercent;
 }
        private void VerifyProximityPlacementGroupColocationStatusView()
        {
            var            ppgName            = ComputeManagementTestUtilities.GenerateName("testppg");
            string         asName             = ComputeManagementTestUtilities.GenerateName("testas");
            string         vmssName           = ComputeManagementTestUtilities.GenerateName("testvmss");
            string         storageAccountName = ComputeManagementTestUtilities.GenerateName(TestPrefix);
            ImageReference imageRef           = GetPlatformVMImage(useWindowsImage: true);

            var inputProximityPlacementGroup = new ProximityPlacementGroup
            {
                Location = m_location,
                Tags     = new Dictionary <string, string>()
                {
                    { "RG", "rg" },
                    { "testTag", "1" },
                },
                ProximityPlacementGroupType = ProximityPlacementGroupType.Standard
            };

            var expectedProximityPlacementGroup = new ProximityPlacementGroup
            {
                Location = m_location,
                Tags     = new Dictionary <string, string>()
                {
                    { "RG", "rg" },
                    { "testTag", "1" },
                },
                ProximityPlacementGroupType = ProximityPlacementGroupType.Standard
            };

            // Create and expect success.
            ProximityPlacementGroup outProximityPlacementGroup = m_CrpClient.ProximityPlacementGroups.CreateOrUpdate(m_resourceGroup1Name, ppgName, inputProximityPlacementGroup);

            ValidateProximityPlacementGroup(expectedProximityPlacementGroup, outProximityPlacementGroup, ppgName);

            VirtualMachine inputVM;
            VirtualMachine outVM = CreateVM(m_resourceGroup1Name, asName, storageAccountName, imageRef, out inputVM, hasManagedDisks: true, hasDiffDisks: false, vmSize: "Standard_A1_v2",
                                            osDiskStorageAccountType: "Standard_LRS", dataDiskStorageAccountType: "Standard_LRS", writeAcceleratorEnabled: false, zones: null, ppgName: ppgName, diskEncryptionSetId: null);

            // Get and expect success.
            outProximityPlacementGroup = m_CrpClient.ProximityPlacementGroups.Get(m_resourceGroup1Name, ppgName, includeColocationStatus: "true");
            InstanceViewStatus expectedInstanceViewStatus = new InstanceViewStatus
            {
                Code          = "ColocationStatus/Aligned",
                Level         = StatusLevelTypes.Info,
                DisplayStatus = "Aligned",
                Message       = "All resources in the proximity placement group are aligned."
            };

            expectedProximityPlacementGroup = new ProximityPlacementGroup(
                m_location,
                tags: new Dictionary <string, string>()
            {
                { "RG", "rg" },
                { "testTag", "1" },
            },
                proximityPlacementGroupType: ProximityPlacementGroupType.Standard,
                virtualMachines: new List <SubResourceWithColocationStatus> {
                new SubResourceWithColocationStatus(outVM.Id)
            },
                availabilitySets: new List <SubResourceWithColocationStatus> {
                new SubResourceWithColocationStatus(outVM.AvailabilitySet.Id)
            });

            ValidateProximityPlacementGroup(expectedProximityPlacementGroup, outProximityPlacementGroup, ppgName);
            ValidateColocationStatus(expectedInstanceViewStatus, outProximityPlacementGroup.ColocationStatus);
        }
Ejemplo n.º 8
0
        private List <AEMTestResult> TestOldExtension(VirtualMachine selectedVM, VirtualMachineInstanceView selectedVMStatus, VirtualMachineExtension monExtension)
        {
            var osdisk = selectedVM.StorageProfile.OsDisk;
            List <AEMTestResult> partialResults = new List <AEMTestResult>();

            this._Helper.WriteHost("Azure Enhanced Monitoring Extension for SAP Installation check...", false);

            string monPublicConfig = null;

            if (monExtension != null)
            {
                monPublicConfig = monExtension.Settings.ToString();
            }

            if (monExtension == null || String.IsNullOrEmpty(monPublicConfig))
            {
                partialResults.Add(new AEMTestResult("Azure Enhanced Monitoring Extension for SAP Installation check", false));
                this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
            }
            else
            {
                partialResults.Add(new AEMTestResult("Azure Enhanced Monitoring Extension for SAP Installation check", true));
                this._Helper.WriteHost("OK ", ConsoleColor.Green);
            }
            //#################################################
            //#################################################

            var accounts = new List <string>();
            //var osdisk = selectedVM.StorageProfile.OsDisk;

            var osaccountName = String.Empty;

            if (osdisk.ManagedDisk == null)
            {
                var accountName = this._Helper.GetStorageAccountFromUri(osdisk.Vhd.Uri);
                osaccountName = accountName;
                accounts.Add(accountName);
            }

            var dataDisks = selectedVM.StorageProfile.DataDisks;

            foreach (var disk in dataDisks)
            {
                if (disk.ManagedDisk != null)
                {
                    continue;
                }
                var accountName = this._Helper.GetStorageAccountFromUri(disk.Vhd.Uri);
                if (!accounts.Contains(accountName))
                {
                    accounts.Add(accountName);
                }
            }

            //#################################################
            //# Check storage metrics
            //#################################################
            this._Helper.WriteHost("Storage Metrics check...");
            var metricsResult = new AEMTestResult("Storage Metrics check");

            partialResults.Add(metricsResult);
            if (!this.SkipStorageCheck.IsPresent)
            {
                foreach (var account in accounts)
                {
                    var accountResult = new AEMTestResult("Storage Metrics check for {0}", account);
                    metricsResult.PartialResults.Add(accountResult);

                    this._Helper.WriteHost("\tStorage Metrics check for {0}...", account);
                    var storage = this._Helper.GetStorageAccountFromCache(account);

                    if (!this._Helper.IsPremiumStorageAccount(storage))
                    {
                        this._Helper.WriteHost("\t\tStorage Metrics configuration check for {0}...", false, account);
                        var currentConfig = this._Helper.GetStorageAnalytics(account);

                        bool storageConfigOk = false;
                        if (!this._Helper.CheckStorageAnalytics(account, currentConfig))
                        {
                            accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics configuration check for {0}", false, account));
                            this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                        }
                        else
                        {
                            accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics configuration check for {0}", true, account));
                            this._Helper.WriteHost("OK ", ConsoleColor.Green);
                            storageConfigOk = true;
                        }

                        this._Helper.WriteHost("\t\tStorage Metrics data check for {0}...", false, account);
                        var filterMinute = Microsoft.WindowsAzure.Storage.Table.TableQuery.
                                           GenerateFilterConditionForDate("Timestamp", "gt", DateTime.Now.AddMinutes(AEMExtensionConstants.ContentAgeInMinutes * -1));

                        if (storageConfigOk && this._Helper.CheckTableAndContent(account, "$MetricsMinutePrimaryTransactionsBlob", filterMinute, ".", false, this.WaitTimeInMinutes))

                        {
                            this._Helper.WriteHost("OK ", ConsoleColor.Green);
                            accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics data check for {0}", true, account));
                        }
                        else
                        {
                            accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics data check for {0}", false, account));
                            this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                        }
                    }
                    else
                    {
                        accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics not available for Premium Storage account {0}", true, account));
                        this._Helper.WriteHost("\t\tStorage Metrics not available for Premium Storage account {0}...", false, account);
                        this._Helper.WriteHost("OK ", ConsoleColor.Green);
                    }
                }
                if (accounts.Count == 0)
                {
                    metricsResult.Result = true;
                }
            }
            else
            {
                metricsResult.Result = true;
                this._Helper.WriteHost("Skipped ", ConsoleColor.Yellow);
            }
            //#################################################
            //#################################################


            //#################################################
            //# Check Azure Enhanced Monitoring Extension for SAP Configuration
            //#################################################
            this._Helper.WriteHost("Azure Enhanced Monitoring Extension for SAP public configuration check...", false);
            var aemConfigResult = new AEMTestResult("Azure Enhanced Monitoring Extension for SAP public configuration check");

            partialResults.Add(aemConfigResult);

            JObject sapmonPublicConfig = null;

            if (monExtension != null)
            {
                this._Helper.WriteHost(""); //New Line

                sapmonPublicConfig = JsonConvert.DeserializeObject(monPublicConfig) as JObject;

                StorageAccount storage            = null;
                var            osaccountIsPremium = false;
                if (!String.IsNullOrEmpty(osaccountName))
                {
                    storage            = this._Helper.GetStorageAccountFromCache(osaccountName);
                    osaccountIsPremium = this._Helper.IsPremiumStorageAccount(osaccountName);
                }

                var vmSize = selectedVM.HardwareProfile.VmSize;
                this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Size", "vmsize", sapmonPublicConfig, vmSize.ToString(), aemConfigResult);
                this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Memory", "vm.memory.isovercommitted", sapmonPublicConfig, 0, aemConfigResult);
                this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM CPU", "vm.cpu.isovercommitted", sapmonPublicConfig, 0, aemConfigResult);
                this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: Script Version", "script.version", sapmonPublicConfig, aemConfigResult);

                var vmSLA = this._Helper.GetVMSLA(selectedVM);
                if (vmSLA.HasSLA)
                {
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM SLA IOPS", "vm.sla.iops", sapmonPublicConfig, vmSLA.IOPS, aemConfigResult);
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM SLA Throughput", "vm.sla.throughput", sapmonPublicConfig, vmSLA.TP, aemConfigResult);
                }

                int wadEnabled;
                if (this._Helper.GetMonPropertyValue("wad.isenabled", sapmonPublicConfig, out wadEnabled))
                {
                    if (wadEnabled == 1)
                    {
                        this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: WAD name", "wad.name", sapmonPublicConfig, aemConfigResult);
                        this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: WAD URI", "wad.uri", sapmonPublicConfig, aemConfigResult);
                    }
                    else
                    {
                        this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: WAD name", "wad.name", sapmonPublicConfig, aemConfigResult, false);
                        this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: WAD URI", "wad.uri", sapmonPublicConfig, aemConfigResult, false);
                    }
                }
                else
                {
                    string message = "Azure Enhanced Monitoring Extension for SAP public configuration check:";
                    aemConfigResult.PartialResults.Add(new AEMTestResult(message, false));
                    this._Helper.WriteHost(message + "...", false);
                    this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                }

                if (!osaccountIsPremium && storage != null)
                {
                    var endpoint  = this._Helper.GetAzureSAPTableEndpoint(storage);
                    var minuteUri = endpoint + "$MetricsMinutePrimaryTransactionsBlob";

                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS disk URI Key", "osdisk.connminute", sapmonPublicConfig, osaccountName + ".minute", aemConfigResult);
                    //# TODO: check uri config
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS disk URI Value", osaccountName + ".minute.uri", sapmonPublicConfig, minuteUri, aemConfigResult);
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS disk URI Name", osaccountName + ".minute.name", sapmonPublicConfig, osaccountName, aemConfigResult);
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk Type", "osdisk.type", sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_STANDARD, aemConfigResult);
                }
                else if (storage != null)
                {
                    var sla = this._Helper.GetDiskSLA(osdisk);

                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk Type", "osdisk.type", sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_PREMIUM, aemConfigResult);
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk SLA IOPS", "osdisk.sla.throughput", sapmonPublicConfig, sla.TP, aemConfigResult);
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk SLA Throughput", "osdisk.sla.iops", sapmonPublicConfig, sla.IOPS, aemConfigResult);
                }
                else
                {
                    var resId = new ResourceIdentifier(osdisk.ManagedDisk.Id);

                    var osDiskMD = ComputeClient.ComputeManagementClient.Disks.Get(resId.ResourceGroupName, resId.ResourceName);
                    if (osDiskMD.Sku.Name == StorageAccountTypes.PremiumLRS)
                    {
                        var sla = this._Helper.GetDiskSLA(osDiskMD.DiskSizeGB, null);

                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk Type", "osdisk.type", sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_PREMIUM_MD, aemConfigResult);
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk SLA IOPS", "osdisk.sla.throughput", sapmonPublicConfig, sla.TP, aemConfigResult);
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk SLA Throughput", "osdisk.sla.iops", sapmonPublicConfig, sla.IOPS, aemConfigResult);
                    }
                    else
                    {
                        this._Helper.WriteWarning("[WARN] Standard Managed Disks are not supported.");
                    }
                }

                if (osdisk.ManagedDisk == null)
                {
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS disk name", "osdisk.name", sapmonPublicConfig, this._Helper.GetDiskName(osdisk.Vhd.Uri), aemConfigResult);
                }


                var diskNumber = 1;
                foreach (var disk in dataDisks)
                {
                    if (disk.ManagedDisk != null)
                    {
                        var resId = new ResourceIdentifier(disk.ManagedDisk.Id);

                        var diskMD = ComputeClient.ComputeManagementClient.Disks.Get(resId.ResourceGroupName, resId.ResourceName);

                        if (diskMD.Sku.Name == StorageAccountTypes.PremiumLRS)
                        {
                            var sla = this._Helper.GetDiskSLA(diskMD.DiskSizeGB, null);

                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " Type", "disk.type." + diskNumber, sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_PREMIUM_MD, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " SLA IOPS", "disk.sla.throughput." + diskNumber, sapmonPublicConfig, sla.TP, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " SLA Throughput", "disk.sla.iops." + diskNumber, sapmonPublicConfig, sla.IOPS, aemConfigResult);
                        }
                        else if (diskMD.Sku.Name == StorageAccountTypes.UltraSSDLRS)
                        {
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " Type", "disk.type." + diskNumber, sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_PREMIUM_MD, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " SLA IOPS", "disk.sla.throughput." + diskNumber, sapmonPublicConfig, diskMD.DiskMBpsReadWrite, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " SLA Throughput", "disk.sla.iops." + diskNumber, sapmonPublicConfig, diskMD.DiskIOPSReadWrite, aemConfigResult);
                        }
                        else
                        {
                            this._Helper.WriteWarning("[WARN] Standard Managed Disks are not supported.");
                        }
                    }
                    else
                    {
                        var accountName = this._Helper.GetStorageAccountFromUri(disk.Vhd.Uri);
                        storage = this._Helper.GetStorageAccountFromCache(accountName);
                        var accountIsPremium = this._Helper.IsPremiumStorageAccount(storage);

                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " LUN", "disk.lun." + diskNumber, sapmonPublicConfig, disk.Lun, aemConfigResult);
                        if (!accountIsPremium)
                        {
                            var endpoint  = this._Helper.GetAzureSAPTableEndpoint(storage);
                            var minuteUri = endpoint + "$MetricsMinutePrimaryTransactionsBlob";

                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " URI Key", "disk.connminute." + diskNumber, sapmonPublicConfig, accountName + ".minute", aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " URI Value", accountName + ".minute.uri", sapmonPublicConfig, minuteUri, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " URI Name", accountName + ".minute.name", sapmonPublicConfig, accountName, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " Type", "disk.type." + diskNumber, sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_STANDARD, aemConfigResult);
                        }
                        else
                        {
                            var sla = this._Helper.GetDiskSLA(disk);

                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " Type", "disk.type." + diskNumber, sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_PREMIUM, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " SLA IOPS", "disk.sla.throughput." + diskNumber, sapmonPublicConfig, sla.TP, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " SLA Throughput", "disk.sla.iops." + diskNumber, sapmonPublicConfig, sla.IOPS, aemConfigResult);
                        }

                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " name", "disk.name." + diskNumber, sapmonPublicConfig, this._Helper.GetDiskName(disk.Vhd.Uri), aemConfigResult);
                    }

                    diskNumber += 1;
                }
                if (dataDisks.Count == 0)
                {
                    aemConfigResult.PartialResults.Add(new AEMTestResult("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disks", true));
                    this._Helper.WriteHost("\tAzure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disks ", false);
                    this._Helper.WriteHost("OK ", ConsoleColor.Green);
                }
            }
            else
            {
                aemConfigResult.Result = false;
                this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
            }
            //#################################################
            //#################################################


            //#################################################
            //# Check WAD Configuration
            //#################################################
            int iswadEnabled;

            if (this._Helper.GetMonPropertyValue("wad.isenabled", sapmonPublicConfig, out iswadEnabled) && iswadEnabled == 1)
            {
                var wadConfigResult = new AEMTestResult("IaaSDiagnostics check");
                partialResults.Add(wadConfigResult);

                string wadPublicConfig = null;
                var    wadExtension    = AEMHelper.GetWADExtension(selectedVM, this.OSType);
                if (wadExtension != null)
                {
                    wadPublicConfig = wadExtension.Settings.ToString();
                }

                this._Helper.WriteHost("IaaSDiagnostics check...", false);
                if (wadExtension != null)
                {
                    this._Helper.WriteHost(""); //New Line
                    this._Helper.WriteHost("\tIaaSDiagnostics configuration check...", false);

                    var currentJSONConfig = JsonConvert.DeserializeObject(wadPublicConfig) as Newtonsoft.Json.Linq.JObject;
                    var base64            = currentJSONConfig["xmlCfg"] as Newtonsoft.Json.Linq.JValue;
                    System.Xml.XmlDocument currentConfig = new System.Xml.XmlDocument();
                    currentConfig.LoadXml(Encoding.UTF8.GetString(System.Convert.FromBase64String(base64.Value.ToString())));


                    if (!this._Helper.CheckWADConfiguration(currentConfig))
                    {
                        wadConfigResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics configuration check", false));
                        this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                    }
                    else
                    {
                        wadConfigResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics configuration check", true));
                        this._Helper.WriteHost("OK ", ConsoleColor.Green);
                    }

                    this._Helper.WriteHost("\tIaaSDiagnostics performance counters check...");
                    var wadPerfCountersResult = new AEMTestResult("IaaSDiagnostics performance counters check");
                    wadConfigResult.PartialResults.Add(wadPerfCountersResult);

                    foreach (var perfCounter in AEMExtensionConstants.PerformanceCounters[this.OSType])
                    {
                        this._Helper.WriteHost("\t\tIaaSDiagnostics performance counters " + (perfCounter.counterSpecifier) + "check...", false);
                        var currentCounter = currentConfig.SelectSingleNode("/WadCfg/DiagnosticMonitorConfiguration/PerformanceCounters/PerformanceCounterConfiguration[@counterSpecifier = '" + perfCounter.counterSpecifier + "']");
                        if (currentCounter != null)
                        {
                            wadPerfCountersResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics performance counters " + (perfCounter.counterSpecifier) + "check...", true));
                            this._Helper.WriteHost("OK ", ConsoleColor.Green);
                        }
                        else
                        {
                            wadPerfCountersResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics performance counters " + (perfCounter.counterSpecifier) + "check...", false));
                            this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                        }
                    }

                    string wadstorage;
                    if (!this._Helper.GetMonPropertyValue <string>("wad.name", sapmonPublicConfig, out wadstorage))
                    {
                        wadstorage = null;
                    }

                    this._Helper.WriteHost("\tIaaSDiagnostics data check...", false);

                    var deploymentId = String.Empty;
                    var roleName     = String.Empty;

                    var extStatuses = AEMHelper.GetAEMExtensionStatus(selectedVM, selectedVMStatus, this.OSType);
                    InstanceViewStatus aemStatus = null;
                    if (extStatuses != null && extStatuses.Statuses != null)
                    {
                        aemStatus = extStatuses.Statuses.FirstOrDefault(stat => Regex.Match(stat.Message, "deploymentId=(\\S*) roleInstance=(\\S*)").Success);
                    }

                    if (aemStatus != null)
                    {
                        var match = Regex.Match(aemStatus.Message, "deploymentId=(\\S*) roleInstance=(\\S*)");
                        deploymentId = match.Groups[1].Value;
                        roleName     = match.Groups[2].Value;
                    }
                    else
                    {
                        this._Helper.WriteWarning("DeploymentId and RoleInstanceName could not be parsed from extension status");
                    }


                    var ok = false;
                    if (!this.SkipStorageCheck.IsPresent && (!String.IsNullOrEmpty(deploymentId)) && (!String.IsNullOrEmpty(roleName)) && (!String.IsNullOrEmpty(wadstorage)))
                    {
                        if (this.OSType.Equals(AEMExtensionConstants.OSTypeLinux, StringComparison.InvariantCultureIgnoreCase))
                        {
                            ok = this._Helper.CheckDiagnosticsTable(wadstorage, deploymentId,
                                                                    selectedVM.OsProfile.ComputerName, ".", this.OSType, this.WaitTimeInMinutes);
                        }
                        else
                        {
                            string filterMinute = "Role eq '" + AEMExtensionConstants.ROLECONTENT + "' and DeploymentId eq '"
                                                  + deploymentId + "' and RoleInstance eq '" + roleName + "' and PartitionKey gt '0"
                                                  + DateTime.UtcNow.AddMinutes(AEMExtensionConstants.ContentAgeInMinutes * -1).Ticks + "'";
                            ok = this._Helper.CheckTableAndContent(wadstorage, AEMExtensionConstants.WadTableName,
                                                                   filterMinute, ".", false, this.WaitTimeInMinutes);
                        }
                    }
                    if (ok && !this.SkipStorageCheck.IsPresent)
                    {
                        wadConfigResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics data check", true));
                        this._Helper.WriteHost("OK ", ConsoleColor.Green);
                    }
                    else if (!this.SkipStorageCheck.IsPresent)
                    {
                        wadConfigResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics data check", false));
                        this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                    }
                    else
                    {
                        this._Helper.WriteHost("Skipped ", ConsoleColor.Yellow);
                    }
                }
                else
                {
                    wadConfigResult.Result = false;
                    this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                }
            }

            return(partialResults);
        }
Ejemplo n.º 9
0
        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 ValidateColocationStatus(InstanceViewStatus expectedColocationStatus, InstanceViewStatus actualColocationStatus)
 {
     Assert.True(expectedColocationStatus.Code == actualColocationStatus.Code, "ColocationStatus code do not match with expected value.");
     Assert.True(expectedColocationStatus.Level == actualColocationStatus.Level, "ColocationStatus level do not match with expected value.");
     Assert.True(expectedColocationStatus.DisplayStatus == actualColocationStatus.DisplayStatus, "ColocationStatus display status do not match with expected value.");
     Assert.True(expectedColocationStatus.Message == actualColocationStatus.Message, "ColocationStatus message do not match with expected value.");
 }
 internal VirtualMachineHealthStatus(InstanceViewStatus status)
 {
     Status = status;
 }
Ejemplo n.º 12
0
        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);
            }
        }
Ejemplo n.º 13
0
        internal static ProximityPlacementGroupData DeserializeProximityPlacementGroupData(JsonElement element)
        {
            IDictionary <string, string> tags = default;
            Location           location       = default;
            ResourceIdentifier id             = default;
            string             name           = default;
            ResourceType       type           = default;
            Optional <ProximityPlacementGroupType> proximityPlacementGroupType                  = default;
            Optional <IReadOnlyList <SubResourceWithColocationStatus> > virtualMachines         = default;
            Optional <IReadOnlyList <SubResourceWithColocationStatus> > virtualMachineScaleSets = default;
            Optional <IReadOnlyList <SubResourceWithColocationStatus> > availabilitySets        = default;
            Optional <InstanceViewStatus> colocationStatus = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("tags"))
                {
                    Dictionary <string, string> dictionary = new Dictionary <string, string>();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        dictionary.Add(property0.Name, property0.Value.GetString());
                    }
                    tags = dictionary;
                    continue;
                }
                if (property.NameEquals("location"))
                {
                    location = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("id"))
                {
                    id = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("name"))
                {
                    name = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("type"))
                {
                    type = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("properties"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.NameEquals("proximityPlacementGroupType"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            proximityPlacementGroupType = new ProximityPlacementGroupType(property0.Value.GetString());
                            continue;
                        }
                        if (property0.NameEquals("virtualMachines"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <SubResourceWithColocationStatus> array = new List <SubResourceWithColocationStatus>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(SubResourceWithColocationStatus.DeserializeSubResourceWithColocationStatus(item));
                            }
                            virtualMachines = array;
                            continue;
                        }
                        if (property0.NameEquals("virtualMachineScaleSets"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <SubResourceWithColocationStatus> array = new List <SubResourceWithColocationStatus>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(SubResourceWithColocationStatus.DeserializeSubResourceWithColocationStatus(item));
                            }
                            virtualMachineScaleSets = array;
                            continue;
                        }
                        if (property0.NameEquals("availabilitySets"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <SubResourceWithColocationStatus> array = new List <SubResourceWithColocationStatus>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(SubResourceWithColocationStatus.DeserializeSubResourceWithColocationStatus(item));
                            }
                            availabilitySets = array;
                            continue;
                        }
                        if (property0.NameEquals("colocationStatus"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            colocationStatus = InstanceViewStatus.DeserializeInstanceViewStatus(property0.Value);
                            continue;
                        }
                    }
                    continue;
                }
            }
            return(new ProximityPlacementGroupData(id, name, type, tags, location, Optional.ToNullable(proximityPlacementGroupType), Optional.ToList(virtualMachines), Optional.ToList(virtualMachineScaleSets), Optional.ToList(availabilitySets), colocationStatus.Value));
        }
Ejemplo n.º 14
0
        public override void ExecuteCmdlet()
        {
            this._Helper = new AEMHelper((err) => this.WriteError(err), (msg) => this.WriteVerbose(msg), (msg) => this.WriteWarning(msg),
                                         this.CommandRuntime.Host.UI,
                                         AzureSession.ClientFactory.CreateClient <StorageManagementClient>(DefaultProfile.Context, AzureEnvironment.Endpoint.ResourceManager),
                                         this.DefaultContext.Subscription);

            this._Helper.WriteVerbose("Starting TestAzureRmVMAEMExtension");

            base.ExecuteCmdlet();

            ExecuteClientAction(() =>
            {
                AEMTestResult rootResult = new AEMTestResult();
                rootResult.TestName      = "Azure Enhanced Monitoring Test";

                //#################################################
                //# Check if VM exists
                //#################################################
                this._Helper.WriteHost("VM Existance check for {0} ...", false, this.VMName);
                var selectedVM       = this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(this.ResourceGroupName, this.VMName);
                var selectedVMStatus = this.ComputeClient.ComputeManagementClient.VirtualMachines.GetWithInstanceView(this.ResourceGroupName, this.VMName).Body.InstanceView;


                if (selectedVM == null)
                {
                    rootResult.PartialResults.Add(new AEMTestResult("VM Existance check for {0}", false, this.VMName));
                    this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                    return;
                }
                else
                {
                    rootResult.PartialResults.Add(new AEMTestResult("VM Existance check for {0}", true, this.VMName));
                    this._Helper.WriteHost("OK ", ConsoleColor.Green);
                }
                //#################################################
                //#################################################
                var osdisk = selectedVM.StorageProfile.OsDisk;
                if (String.IsNullOrEmpty(this.OSType))
                {
                    this.OSType = osdisk.OsType.ToString();
                }
                if (String.IsNullOrEmpty(this.OSType))
                {
                    this._Helper.WriteError("Could not determine Operating System of the VM. Please provide the Operating System type ({0} or {1}) via parameter OSType", AEMExtensionConstants.OSTypeWindows, AEMExtensionConstants.OSTypeLinux);
                    return;
                }
                //#################################################
                //# Check for Guest Agent
                //#################################################
                this._Helper.WriteHost("VM Guest Agent check...", false);
                var vmAgentStatus = false;

                //# It is not possible to detect if VM Agent is installed on ARM
                vmAgentStatus = true;
                if (!vmAgentStatus)
                {
                    rootResult.PartialResults.Add(new AEMTestResult("VM Guest Agent check", false));
                    this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                    this._Helper.WriteWarning(AEMExtensionConstants.MissingGuestAgentWarning);
                    return;
                }
                else
                {
                    rootResult.PartialResults.Add(new AEMTestResult("VM Guest Agent check", true));
                    this._Helper.WriteHost("OK ", ConsoleColor.Green);
                }
                //#################################################
                //#################################################


                //#################################################
                //# Check for Azure Enhanced Monitoring Extension for SAP
                //#################################################
                this._Helper.WriteHost("Azure Enhanced Monitoring Extension for SAP Installation check...", false);

                string monPublicConfig = null;
                var monExtension       = this._Helper.GetExtension(selectedVM, AEMExtensionConstants.AEMExtensionType[this.OSType], AEMExtensionConstants.AEMExtensionPublisher[this.OSType]);
                if (monExtension != null)
                {
                    monPublicConfig = monExtension.Settings.ToString();
                }

                if (monExtension == null || String.IsNullOrEmpty(monPublicConfig))
                {
                    rootResult.PartialResults.Add(new AEMTestResult("Azure Enhanced Monitoring Extension for SAP Installation check", false));
                    this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                }
                else
                {
                    rootResult.PartialResults.Add(new AEMTestResult("Azure Enhanced Monitoring Extension for SAP Installation check", true));
                    this._Helper.WriteHost("OK ", ConsoleColor.Green);
                }
                //#################################################
                //#################################################

                var accounts = new List <string>();
                //var osdisk = selectedVM.StorageProfile.OsDisk;

                var dataDisks     = selectedVM.StorageProfile.DataDisks;
                var accountName   = this._Helper.GetStorageAccountFromUri(osdisk.Vhd.Uri);
                var osaccountName = accountName;
                accounts.Add(accountName);
                foreach (var disk in dataDisks)
                {
                    accountName = this._Helper.GetStorageAccountFromUri(disk.Vhd.Uri);
                    if (!accounts.Contains(accountName))
                    {
                        accounts.Add(accountName);
                    }
                }

                //#################################################
                //# Check storage metrics
                //#################################################
                this._Helper.WriteHost("Storage Metrics check...");
                var metricsResult = new AEMTestResult("Storage Metrics check");
                rootResult.PartialResults.Add(metricsResult);
                if (!this.SkipStorageCheck.IsPresent)
                {
                    foreach (var account in accounts)
                    {
                        var accountResult = new AEMTestResult("Storage Metrics check for {0}", account);
                        metricsResult.PartialResults.Add(accountResult);

                        this._Helper.WriteHost("\tStorage Metrics check for {0}...", account);
                        var storage = this._Helper.GetStorageAccountFromCache(account);

                        if (!this._Helper.IsPremiumStorageAccount(storage))
                        {
                            this._Helper.WriteHost("\t\tStorage Metrics configuration check for {0}...", false, account);
                            var currentConfig = this._Helper.GetStorageAnalytics(account);

                            bool storageConfigOk = false;
                            if (!this._Helper.CheckStorageAnalytics(account, currentConfig))
                            {
                                accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics configuration check for {0}", false, account));
                                this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                            }
                            else
                            {
                                accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics configuration check for {0}", true, account));
                                this._Helper.WriteHost("OK ", ConsoleColor.Green);
                                storageConfigOk = true;
                            }

                            this._Helper.WriteHost("\t\tStorage Metrics data check for {0}...", false, account);
                            var filterMinute = Microsoft.WindowsAzure.Storage.Table.TableQuery.
                                               GenerateFilterConditionForDate("Timestamp", "gt", DateTime.Now.AddMinutes(AEMExtensionConstants.ContentAgeInMinutes * -1));

                            if (storageConfigOk && this._Helper.CheckTableAndContent(account, "$MetricsMinutePrimaryTransactionsBlob", filterMinute, ".", false, this.WaitTimeInMinutes))

                            {
                                this._Helper.WriteHost("OK ", ConsoleColor.Green);
                                accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics data check for {0}", true, account));
                            }
                            else
                            {
                                accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics data check for {0}", false, account));
                                this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                            }
                        }
                        else
                        {
                            accountResult.PartialResults.Add(new AEMTestResult("Storage Metrics not available for Premium Storage account {0}", true, account));
                            this._Helper.WriteHost("\t\tStorage Metrics not available for Premium Storage account {0}...", false, account);
                            this._Helper.WriteHost("OK ", ConsoleColor.Green);
                        }
                    }
                }
                else
                {
                    metricsResult.Result = true;
                    this._Helper.WriteHost("Skipped ", ConsoleColor.Yellow);
                }
                //#################################################
                //#################################################


                //#################################################
                //# Check Azure Enhanced Monitoring Extension for SAP Configuration
                //#################################################
                this._Helper.WriteHost("Azure Enhanced Monitoring Extension for SAP public configuration check...", false);
                var aemConfigResult = new AEMTestResult("Azure Enhanced Monitoring Extension for SAP public configuration check");
                rootResult.PartialResults.Add(aemConfigResult);

                JObject sapmonPublicConfig = null;
                if (monExtension != null)
                {
                    this._Helper.WriteHost(""); //New Line

                    sapmonPublicConfig = JsonConvert.DeserializeObject(monPublicConfig) as JObject;

                    var storage            = this._Helper.GetStorageAccountFromCache(osaccountName);
                    var osaccountIsPremium = this._Helper.IsPremiumStorageAccount(osaccountName);

                    var vmSize = selectedVM.HardwareProfile.VmSize;
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Size", "vmsize", sapmonPublicConfig, vmSize, aemConfigResult);
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Memory", "vm.memory.isovercommitted", sapmonPublicConfig, 0, aemConfigResult);
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM CPU", "vm.cpu.isovercommitted", sapmonPublicConfig, 0, aemConfigResult);
                    this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: Script Version", "script.version", sapmonPublicConfig, aemConfigResult);

                    var vmSLA = this._Helper.GetVMSLA(selectedVM);
                    if (vmSLA.HasSLA)
                    {
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM SLA IOPS", "vm.sla.iops", sapmonPublicConfig, vmSLA.IOPS, aemConfigResult);
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM SLA Throughput", "vm.sla.throughput", sapmonPublicConfig, vmSLA.TP, aemConfigResult);
                    }

                    int wadEnabled;
                    if (this._Helper.GetMonPropertyValue("wad.isenabled", sapmonPublicConfig, out wadEnabled))
                    {
                        if (wadEnabled == 1)
                        {
                            this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: WAD name", "wad.name", sapmonPublicConfig, aemConfigResult);
                            this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: WAD URI", "wad.uri", sapmonPublicConfig, aemConfigResult);
                        }
                        else
                        {
                            this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: WAD name", "wad.name", sapmonPublicConfig, aemConfigResult, false);
                            this._Helper.MonitoringPropertyExists("Azure Enhanced Monitoring Extension for SAP public configuration check: WAD URI", "wad.uri", sapmonPublicConfig, aemConfigResult, false);
                        }
                    }
                    else
                    {
                        string message = "Azure Enhanced Monitoring Extension for SAP public configuration check:";
                        aemConfigResult.PartialResults.Add(new AEMTestResult(message, false));
                        this._Helper.WriteHost(message + "...", false);
                        this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                    }

                    if (!osaccountIsPremium)
                    {
                        var endpoint  = this._Helper.GetAzureSAPTableEndpoint(storage);
                        var minuteUri = endpoint + "$MetricsMinutePrimaryTransactionsBlob";

                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS disk URI Key", "osdisk.connminute", sapmonPublicConfig, osaccountName + ".minute", aemConfigResult);
                        //# TODO: check uri config
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS disk URI Value", osaccountName + ".minute.uri", sapmonPublicConfig, minuteUri, aemConfigResult);
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS disk URI Name", osaccountName + ".minute.name", sapmonPublicConfig, osaccountName, aemConfigResult);
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk Type", "osdisk.type", sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_STANDARD, aemConfigResult);
                    }
                    else
                    {
                        var sla = this._Helper.GetDiskSLA(osdisk);

                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk Type", "osdisk.type", sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_PREMIUM, aemConfigResult);
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk SLA IOPS", "osdisk.sla.throughput", sapmonPublicConfig, sla.TP, aemConfigResult);
                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS Disk SLA Throughput", "osdisk.sla.iops", sapmonPublicConfig, sla.IOPS, aemConfigResult);
                    }
                    this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM OS disk name", "osdisk.name", sapmonPublicConfig, this._Helper.GetDiskName(osdisk.Vhd.Uri), aemConfigResult);


                    var diskNumber = 1;
                    foreach (var disk in dataDisks)
                    {
                        accountName          = this._Helper.GetStorageAccountFromUri(disk.Vhd.Uri);
                        storage              = this._Helper.GetStorageAccountFromCache(accountName);
                        var accountIsPremium = this._Helper.IsPremiumStorageAccount(storage);

                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " LUN", "disk.lun." + diskNumber, sapmonPublicConfig, disk.Lun, aemConfigResult);
                        if (!accountIsPremium)
                        {
                            var endpoint  = this._Helper.GetAzureSAPTableEndpoint(storage);
                            var minuteUri = endpoint + "$MetricsMinutePrimaryTransactionsBlob";

                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " URI Key", "disk.connminute." + diskNumber, sapmonPublicConfig, accountName + ".minute", aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " URI Value", accountName + ".minute.uri", sapmonPublicConfig, minuteUri, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " URI Name", accountName + ".minute.name", sapmonPublicConfig, accountName, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " Type", "disk.type." + diskNumber, sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_STANDARD, aemConfigResult);
                        }
                        else
                        {
                            var sla = this._Helper.GetDiskSLA(disk);

                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " Type", "disk.type." + diskNumber, sapmonPublicConfig, AEMExtensionConstants.DISK_TYPE_PREMIUM, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " SLA IOPS", "disk.sla.throughput." + diskNumber, sapmonPublicConfig, sla.TP, aemConfigResult);
                            this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " SLA Throughput", "disk.sla.iops." + diskNumber, sapmonPublicConfig, sla.IOPS, aemConfigResult);
                        }

                        this._Helper.CheckMonitoringProperty("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disk " + diskNumber + " name", "disk.name." + diskNumber, sapmonPublicConfig, this._Helper.GetDiskName(disk.Vhd.Uri), aemConfigResult);

                        diskNumber += 1;
                    }
                    if (dataDisks.Count == 0)
                    {
                        aemConfigResult.PartialResults.Add(new AEMTestResult("Azure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disks", true));
                        this._Helper.WriteHost("\tAzure Enhanced Monitoring Extension for SAP public configuration check: VM Data Disks ", false);
                        this._Helper.WriteHost("OK ", ConsoleColor.Green);
                    }
                }
                else
                {
                    aemConfigResult.Result = false;
                    this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                }
                //#################################################
                //#################################################


                //#################################################
                //# Check WAD Configuration
                //#################################################
                int iswadEnabled;
                if (this._Helper.GetMonPropertyValue("wad.isenabled", sapmonPublicConfig, out iswadEnabled) && iswadEnabled == 1)
                {
                    var wadConfigResult = new AEMTestResult("IaaSDiagnostics check");
                    rootResult.PartialResults.Add(wadConfigResult);

                    string wadPublicConfig = null;
                    var wadExtension       = this._Helper.GetExtension(selectedVM, AEMExtensionConstants.WADExtensionType[this.OSType], AEMExtensionConstants.WADExtensionPublisher[this.OSType]);
                    if (wadExtension != null)
                    {
                        wadPublicConfig = wadExtension.Settings.ToString();
                    }

                    this._Helper.WriteHost("IaaSDiagnostics check...", false);
                    if (wadExtension != null)
                    {
                        this._Helper.WriteHost(""); //New Line
                        this._Helper.WriteHost("\tIaaSDiagnostics configuration check...", false);

                        var currentJSONConfig = JsonConvert.DeserializeObject(wadPublicConfig) as Newtonsoft.Json.Linq.JObject;
                        var base64            = currentJSONConfig["xmlCfg"] as Newtonsoft.Json.Linq.JValue;
                        System.Xml.XmlDocument currentConfig = new System.Xml.XmlDocument();
                        currentConfig.LoadXml(Encoding.UTF8.GetString(System.Convert.FromBase64String(base64.Value.ToString())));


                        if (!this._Helper.CheckWADConfiguration(currentConfig))
                        {
                            wadConfigResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics configuration check", false));
                            this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                        }
                        else
                        {
                            wadConfigResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics configuration check", true));
                            this._Helper.WriteHost("OK ", ConsoleColor.Green);
                        }

                        this._Helper.WriteHost("\tIaaSDiagnostics performance counters check...");
                        var wadPerfCountersResult = new AEMTestResult("IaaSDiagnostics performance counters check");
                        wadConfigResult.PartialResults.Add(wadPerfCountersResult);

                        foreach (var perfCounter in AEMExtensionConstants.PerformanceCounters[this.OSType])
                        {
                            this._Helper.WriteHost("\t\tIaaSDiagnostics performance counters " + (perfCounter.counterSpecifier) + "check...", false);
                            var currentCounter = currentConfig.SelectSingleNode("/WadCfg/DiagnosticMonitorConfiguration/PerformanceCounters/PerformanceCounterConfiguration[@counterSpecifier = '" + perfCounter.counterSpecifier + "']");
                            if (currentCounter != null)
                            {
                                wadPerfCountersResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics performance counters " + (perfCounter.counterSpecifier) + "check...", true));
                                this._Helper.WriteHost("OK ", ConsoleColor.Green);
                            }
                            else
                            {
                                wadPerfCountersResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics performance counters " + (perfCounter.counterSpecifier) + "check...", false));
                                this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                            }
                        }

                        string wadstorage;
                        if (!this._Helper.GetMonPropertyValue <string>("wad.name", sapmonPublicConfig, out wadstorage))
                        {
                            wadstorage = null;
                        }

                        this._Helper.WriteHost("\tIaaSDiagnostics data check...", false);

                        var deploymentId = String.Empty;
                        var roleName     = String.Empty;

                        var extStatuses = this._Helper.GetExtension(selectedVM, selectedVMStatus, AEMExtensionConstants.AEMExtensionType[this.OSType], AEMExtensionConstants.AEMExtensionPublisher[this.OSType]);
                        InstanceViewStatus aemStatus = null;
                        if (extStatuses != null && extStatuses.Statuses != null)
                        {
                            aemStatus = extStatuses.Statuses.FirstOrDefault(stat => Regex.Match(stat.Message, "deploymentId=(\\S*) roleInstance=(\\S*)").Success);
                        }

                        if (aemStatus != null)
                        {
                            var match    = Regex.Match(aemStatus.Message, "deploymentId=(\\S*) roleInstance=(\\S*)");
                            deploymentId = match.Groups[1].Value;
                            roleName     = match.Groups[2].Value;
                        }
                        else
                        {
                            this._Helper.WriteWarning("DeploymentId and RoleInstanceName could not be parsed from extension status");
                        }


                        var ok = false;
                        if (!this.SkipStorageCheck.IsPresent && (!String.IsNullOrEmpty(deploymentId)) && (!String.IsNullOrEmpty(roleName)) && (!String.IsNullOrEmpty(wadstorage)))
                        {
                            if (this.OSType.Equals(AEMExtensionConstants.OSTypeLinux, StringComparison.InvariantCultureIgnoreCase))
                            {
                                ok = this._Helper.CheckDiagnosticsTable(wadstorage, deploymentId,
                                                                        selectedVM.OsProfile.ComputerName, ".", this.OSType, this.WaitTimeInMinutes);
                            }
                            else
                            {
                                string filterMinute = "Role eq '" + AEMExtensionConstants.ROLECONTENT + "' and DeploymentId eq '"
                                                      + deploymentId + "' and RoleInstance eq '" + roleName + "' and PartitionKey gt '0"
                                                      + DateTime.UtcNow.AddMinutes(AEMExtensionConstants.ContentAgeInMinutes * -1).Ticks + "'";
                                ok = this._Helper.CheckTableAndContent(wadstorage, AEMExtensionConstants.WadTableName,
                                                                       filterMinute, ".", false, this.WaitTimeInMinutes);
                            }
                        }
                        if (ok && !this.SkipStorageCheck.IsPresent)
                        {
                            wadConfigResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics data check", true));
                            this._Helper.WriteHost("OK ", ConsoleColor.Green);
                        }
                        else if (!this.SkipStorageCheck.IsPresent)
                        {
                            wadConfigResult.PartialResults.Add(new AEMTestResult("IaaSDiagnostics data check", false));
                            this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                        }
                        else
                        {
                            this._Helper.WriteHost("Skipped ", ConsoleColor.Yellow);
                        }
                    }
                    else
                    {
                        wadConfigResult.Result = false;
                        this._Helper.WriteHost("NOT OK ", ConsoleColor.Red);
                    }
                }
                //#################################################
                //#################################################

                if (!rootResult.Result)
                {
                    this._Helper.WriteHost("The script found some configuration issues. Please run the Set-AzureRmVMExtension commandlet to update the configuration of the virtual machine!");
                }

                this._Helper.WriteVerbose("TestAzureRmVMAEMExtension Done (" + rootResult.Result + ")");

                var result = Mapper.Map <AEMTestResult>(rootResult);
                WriteObject(result);
            });
        }
Ejemplo n.º 15
0
 internal ProximityPlacementGroupData(ResourceIdentifier id, string name, ResourceType type, SystemData systemData, IDictionary <string, string> tags, AzureLocation location, ProximityPlacementGroupType?proximityPlacementGroupType, IReadOnlyList <SubResourceWithColocationStatus> virtualMachines, IReadOnlyList <SubResourceWithColocationStatus> virtualMachineScaleSets, IReadOnlyList <SubResourceWithColocationStatus> availabilitySets, InstanceViewStatus colocationStatus) : base(id, name, type, systemData, tags, location)
 {
     ProximityPlacementGroupType = proximityPlacementGroupType;
     VirtualMachines             = virtualMachines;
     VirtualMachineScaleSets     = virtualMachineScaleSets;
     AvailabilitySets            = availabilitySets;
     ColocationStatus            = colocationStatus;
 }
Ejemplo n.º 16
0
        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));
        }
Ejemplo n.º 17
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);
                }
            }
        }
Ejemplo n.º 18
0
 private void ValidateInstanceViewStatus(InstanceViewStatus instanceViewStatus)
 {
     Assert.NotNull(instanceViewStatus.DisplayStatus);
     Assert.NotNull(instanceViewStatus.Code);
     Assert.NotNull(instanceViewStatus.Level);
 }
Ejemplo n.º 19
0
 internal BootDiagnosticsInstanceView(string consoleScreenshotBlobUri, string serialConsoleLogBlobUri, InstanceViewStatus status)
 {
     ConsoleScreenshotBlobUri = consoleScreenshotBlobUri;
     SerialConsoleLogBlobUri  = serialConsoleLogBlobUri;
     Status = status;
 }
 internal VirtualMachineExtensionHandlerInstanceView(string type, string typeHandlerVersion, InstanceViewStatus status)
 {
     Type = type;
     TypeHandlerVersion = typeHandlerVersion;
     Status             = status;
 }
Ejemplo n.º 21
0
 internal SubResourceWithColocationStatus(string id, InstanceViewStatus colocationStatus) : base(id)
 {
     ColocationStatus = colocationStatus;
 }
Ejemplo n.º 22
0
        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);
                }
            }
        }