public void CreateAutoscalePolicies(ICloudAppConfig appConfig, string resourceUrl, string appName, string resGroupName) { Logger.Info("CreateAutoscalePolicies - Creating"); var autoscaleconfig = (ICloudAppConfigAutoScaling)appConfig; var emailForScaling = autoscaleconfig.AutoScaleNotificationMailAddress; var capacity = CreateScaleCapacity(); var rules = CreateRulesForAutoScaling(resourceUrl); var profiles = CreateAutoScaleProfile(capacity, rules); var notifications = CreateAutoscaleNotifications(emailForScaling); var autoscalesettingName = autoscaleconfig.AutoScaleSettingName; var asr = new AutoscaleSettingResource { Name = autoscalesettingName, AutoscaleSettingResourceName = autoscalesettingName, TargetResourceUri = resourceUrl, Enabled = true, Profiles = profiles, Notifications = notifications, Location = autoscaleconfig.AutoScaleResourceLocation }; using (var imc = new InsightsManagementClient(appConfig.Creds) { SubscriptionId = appConfig.SubscriptionId }) { imc.AutoscaleSettings.CreateOrUpdate(resGroupName, autoscalesettingName, asr); } Logger.Info("CreateAutoscalePolicies - Created"); }
private PSAutoscaleSetting CreateCompleteSpec(string location, string name, List <AutoscaleProfile> profiles = null) { if (profiles == null) { profiles = new List <AutoscaleProfile>() { this.CreateAutoscaleProfile() }; } var settingProperty = new AutoscaleSetting { Name = name, Enabled = true, Profiles = profiles, TargetResourceUri = Utilities.ResourceUri }; var setting = new AutoscaleSettingResource { Location = location, Name = name, Properties = new PSAutoscaleSettingProperty(settingProperty), Tags = new LazyDictionary <string, string>() }; return(new PSAutoscaleSetting(setting)); }
private static AutoscaleSettingResource CreateAutoscaleSetting(string location, string resourceUri, string metricName) { var capacity = new ScaleCapacity("1", "100", "1"); var fixedDate = new TimeWindow(DateTime.Parse("2014-04-15T21:06:11.7882792Z"), DateTime.Parse("2014-04-16T21:06:11.7882792Z")); var recurrence = new Recurrence(RecurrenceFrequency.Week, new RecurrentSchedule("UTC-11", new List <string> { "Monday" }, new List <int> { 0 }, new List <int> { 10 })); var rules = new ScaleRule[] { new ScaleRule(new MetricTrigger( metricName, resourceUri, TimeSpan.FromMinutes(1), MetricStatisticType.Average, TimeSpan.FromHours(1), TimeAggregationType.Maximum, ComparisonOperationType.EqualsValue, threshold: 80.0), new ScaleAction(ScaleDirection.Increase, ScaleType.ChangeCount, "10", cooldown: TimeSpan.FromMinutes(20)) ) }; AutoscaleSettingResource setting = new AutoscaleSettingResource(null, "setting1", null, "", new Dictionary <string, string>(), new AutoscaleProfile[] { //There may have one issue //new AutoscaleProfile("Profile1",capacity,rules,fixedDate,recurrence), new AutoscaleProfile("Profile2", capacity, rules, fixedDate, recurrence) }, new List <AutoscaleNotification>(), true, "setting1", resourceUri); return(setting); }
public AddAzureRmAutoscaleSettingTests(Xunit.Abstractions.ITestOutputHelper output) { ServiceManagemenet.Common.Models.XunitTracingInterceptor.AddToContext(new ServiceManagemenet.Common.Models.XunitTracingInterceptor(output)); TestExecutionHelpers.SetUpSessionAndProfile(); insightsAutoscaleOperationsMock = new Mock <IAutoscaleSettingsOperations>(); insightsManagementClientMock = new Mock <MonitorManagementClient>(); commandRuntimeMock = new Mock <ICommandRuntime>(); cmdlet = new AddAzureRmAutoscaleSettingCommand() { CommandRuntime = commandRuntimeMock.Object, MonitorManagementClient = insightsManagementClientMock.Object }; response = new AzureOperationResponse <AutoscaleSettingResource>() { Body = new AutoscaleSettingResource() }; insightsAutoscaleOperationsMock.Setup(f => f.CreateOrUpdateWithHttpMessagesAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <AutoscaleSettingResource>(), It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult <Microsoft.Rest.Azure.AzureOperationResponse <AutoscaleSettingResource> >(response)) .Callback((string resourceGrp, string settingNm, AutoscaleSettingResource createOrUpdateParams, Dictionary <string, List <string> > headers, CancellationToken t) => { resourceGroup = resourceGrp; settingName = settingNm; createOrUpdatePrms = createOrUpdateParams; }); insightsManagementClientMock.SetupGet(f => f.AutoscaleSettings).Returns(this.insightsAutoscaleOperationsMock.Object); // Setup Confirmation commandRuntimeMock.Setup(f => f.ShouldProcess(It.IsAny <string>())).Returns(true); commandRuntimeMock.Setup(f => f.ShouldProcess(It.IsAny <string>(), It.IsAny <string>())).Returns(true); commandRuntimeMock.Setup(f => f.ShouldProcess(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(true); commandRuntimeMock.Setup(f => f.ShouldContinue(It.IsAny <string>(), It.IsAny <string>())).Returns(true); }
public async Task Get() { var settingName = Recording.GenerateAssetName("testAutoscaleSetting-"); var setting = await CreateAutoscaleSettingAsync(settingName); AutoscaleSettingResource setting2 = await setting.GetAsync(); ResourceDataHelper.AssertAutoscaleSetting(setting.Data, setting2.Data); }
/// <summary> /// Initializes a new instance of the PSAutoscaleSetting class. /// </summary> /// <param name="autoscaleSettingSpec">The autoscale setting spec</param> public PSAutoscaleSetting(AutoscaleSettingResource autoscaleSettingSpec) : base(id: autoscaleSettingSpec.Id, location: autoscaleSettingSpec.Location, autoscaleSettingResourceName: autoscaleSettingSpec.Name, profiles: autoscaleSettingSpec.Profiles, type: autoscaleSettingSpec.Type, tags: autoscaleSettingSpec.Tags) { this.Name = autoscaleSettingSpec.Name; this.TargetResourceUri = autoscaleSettingSpec.TargetResourceUri; this.Enabled = autoscaleSettingSpec.Enabled; this.Notifications = autoscaleSettingSpec.Notifications; this.Tags = new PSDictionaryElement(autoscaleSettingSpec.Tags); this.Profiles = new PSAutoscaleProfilesList(autoscaleSettingSpec.Profiles); }
/// <summary> /// Initializes a new instance of the PSAutoscaleSetting class. /// </summary> /// <param name="autoscaleSettingSpec">The autoscale setting spec</param> public PSAutoscaleSetting(AutoscaleSettingResource autoscaleSettingSpec) { // Keep the original values (types) in the base class base.Properties = autoscaleSettingSpec.Properties; base.Tags = autoscaleSettingSpec.Tags; this.Id = autoscaleSettingSpec.Id; this.Location = autoscaleSettingSpec.Location; this.Name = autoscaleSettingSpec.Name; this.Properties = new PSAutoscaleSettingProperty(autoscaleSettingSpec.Properties); this.Tags = new PSDictionaryElement(autoscaleSettingSpec.Tags); }
/// <summary> /// Initializes a new instance of the PSAutoscaleSetting class. /// </summary> /// <param name="autoscaleSettingSpec">The autoscale setting spec</param> public PSAutoscaleSetting(AutoscaleSettingResource autoscaleSettingSpec) : base( location: autoscaleSettingSpec.Location, profiles: autoscaleSettingSpec.Profiles, id: autoscaleSettingSpec.Id, name: autoscaleSettingSpec.Name, type: autoscaleSettingSpec.Type, tags: autoscaleSettingSpec.Tags, notifications: autoscaleSettingSpec.Notifications, enabled: autoscaleSettingSpec.Enabled, targetResourceUri: autoscaleSettingSpec.TargetResourceUri) { }
public async Task Get() { var collection = await GetAutoscaleSettingsCollectionAsync(); var actionGroupName = Recording.GenerateAssetName("testAutoscaleSettings-"); var input = ResourceDataHelper.GetBasicAutoscaleSettingData("eastus"); var lro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, actionGroupName, input); AutoscaleSettingResource autoscaleSetting1 = lro.Value; AutoscaleSettingResource autoscaleSetting2 = await collection.GetAsync(actionGroupName); ResourceDataHelper.AssertAutoscaleSetting(autoscaleSetting1.Data, autoscaleSetting2.Data); }
/// <summary> /// Execute the cmdlet /// </summary> protected override void ProcessRecordInternal() { AutoscaleSettingResource parameters = this.CreateAutoscaleSettingResource(); // The result of this operation is operation (AutoscaleSettingResource) is being discarded for backwards compatibility var result = this.MonitorManagementClient.AutoscaleSettings.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName: this.ResourceGroup, autoscaleSettingName: this.Name, parameters: parameters).Result; var response = new PSAddAutoscaleSettingOperationResponse() { RequestId = result.RequestId, StatusCode = result.Response != null ? result.Response.StatusCode : HttpStatusCode.OK, SettingSpec = result.Body }; WriteObject(response); }
public GetAzureRmAutoscaleSettingTests(Xunit.Abstractions.ITestOutputHelper output) { ServiceManagement.Common.Models.XunitTracingInterceptor.AddToContext(new ServiceManagement.Common.Models.XunitTracingInterceptor(output)); TestExecutionHelpers.SetUpSessionAndProfile(); insightsAutoscaleOperationsMock = new Mock <IAutoscaleSettingsOperations>(); insightsManagementClientMock = new Mock <MonitorManagementClient>() { CallBase = true }; commandRuntimeMock = new Mock <ICommandRuntime>(); cmdlet = new GetAzureRmAutoscaleSettingCommand() { CommandRuntime = commandRuntimeMock.Object, MonitorManagementClient = insightsManagementClientMock.Object }; var responseObject = new AutoscaleSettingResource(id: "", location: "", profiles: null, autoscaleSettingResourceName: "", name: "") { Tags = null, }; responseSimple = new Microsoft.Rest.Azure.AzureOperationResponse <AutoscaleSettingResource>() { Body = responseObject }; responsePage = new AzureOperationResponse <IPage <AutoscaleSettingResource> >() { Body = JsonConvert.DeserializeObject <Microsoft.Azure.Management.Monitor.Models.Page <AutoscaleSettingResource> >(JsonConvert.SerializeObject(responseObject)) }; insightsAutoscaleOperationsMock.Setup(f => f.GetWithHttpMessagesAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult <Microsoft.Rest.Azure.AzureOperationResponse <AutoscaleSettingResource> >(responseSimple)) .Callback((string resourceGrp, string settingNm, Dictionary <string, List <string> > headers, CancellationToken t) => { resourceGroup = resourceGrp; settingName = settingNm; }); insightsAutoscaleOperationsMock.Setup(f => f.ListByResourceGroupWithHttpMessagesAsync(It.IsAny <string>(), It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult <Microsoft.Rest.Azure.AzureOperationResponse <IPage <AutoscaleSettingResource> > >(responsePage)) .Callback((string resourceGrp, Dictionary <string, List <string> > headers, CancellationToken t) => { resourceGroup = resourceGrp; }); insightsManagementClientMock.SetupGet(f => f.AutoscaleSettings).Returns(this.insightsAutoscaleOperationsMock.Object); }
public static void AreEqual(AutoscaleSettingResource exp, AutoscaleSettingResource act) { if (exp != null) { Assert.Equal(exp.Enabled, act.Enabled); Assert.Equal(exp.Name, act.Name); Assert.Equal(exp.TargetResourceUri, act.TargetResourceUri); for (int i = 0; i < exp.Profiles.Count; i++) { var expectedProfile = exp.Profiles[i]; var actualProfile = act.Profiles[i]; AreEqual(expectedProfile, actualProfile); } } }
private static void Check(AutoscaleSettingResource act) { if (act != null) { Assert.False(string.IsNullOrWhiteSpace(act.Name)); Assert.Equal(act.Name, act.AutoscaleSettingResourceName); Assert.False(string.IsNullOrWhiteSpace(act.Id)); Assert.False(string.IsNullOrWhiteSpace(act.Location)); Assert.False(string.IsNullOrWhiteSpace(act.TargetResourceUri)); Assert.False(string.IsNullOrWhiteSpace(act.Type)); } else { // Guarantee failure, act should not be null Assert.NotNull(act); } }
/// <summary> /// Execute the cmdlet /// </summary> protected override void ProcessRecordInternal() { if (string.IsNullOrWhiteSpace(this.Name)) { // Retrieve all the Autoscale settings for a resource group IPage <AutoscaleSettingResource> result = this.InsightsManagementClient.AutoscaleSettings.ListByResourceGroupAsync(resourceGroupName: this.ResourceGroup).Result; var records = result.Select(e => this.DetailedOutput.IsPresent ? new PSAutoscaleSetting(e) : e); WriteObject(sendToPipeline: records, enumerateCollection: true); } else { // Retrieve a single Autoscale setting determined by the resource group and the rule name AutoscaleSettingResource result = this.InsightsManagementClient.AutoscaleSettings.GetAsync(resourceGroupName: this.ResourceGroup, autoscaleSettingName: this.Name).Result; WriteObject(sendToPipeline: this.DetailedOutput.IsPresent ? new PSAutoscaleSetting(result) : result); } }
public void CreateOrUpdateSettingTest() { AutoscaleSettingResource expResponse = CreateAutoscaleSetting(location: "East US", resourceUri: ResourceUri, metricName: "CpuPercentage"); var handler = new RecordedDelegatingHandler(); var insightsClient = GetInsightsManagementClient(handler); var serializedObject = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(expResponse, insightsClient.SerializationSettings); var expectedResponse = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(serializedObject) }; handler = new RecordedDelegatingHandler(expectedResponse); insightsClient = GetInsightsManagementClient(handler); var actualResponse = insightsClient.AutoscaleSettings.CreateOrUpdate(resourceGroupName: "resourceGroup1", autoscaleSettingName: "setting1", parameters: expResponse); AreEqual(expResponse, actualResponse); }
public void Autoscale_GetSetting() { var expResponse = CreateAutoscaleSetting(ResourceUri, "CpuPercentage", string.Empty); var handler = new RecordedDelegatingHandler(); var insightsClient = GetInsightsManagementClient(handler); var serializedObject = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(expResponse, insightsClient.SerializationSettings); var expectedResponse = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(serializedObject) }; handler = new RecordedDelegatingHandler(expectedResponse); insightsClient = GetInsightsManagementClient(handler); AutoscaleSettingResource actualResponse = insightsClient.AutoscaleSettings.Get(resourceGroupName: "resourceGroup1", autoscaleSettingName: "setting1"); AreEqual(expResponse, actualResponse); }
/// <summary> /// Execute the cmdlet /// </summary> protected override void ProcessRecordInternal() { WriteWarning("Output change: The AutoscaleSettingResourceName field will be deprecated in the release 5.0.0 - November 2017 - since it always equals the Name field."); if (string.IsNullOrWhiteSpace(this.Name)) { // Retrieve all the Autoscale settings for a resource group IPage <AutoscaleSettingResource> result = this.MonitorManagementClient.AutoscaleSettings.ListByResourceGroupAsync(resourceGroupName: this.ResourceGroup).Result; var records = result.Select(e => this.DetailedOutput.IsPresent ? new PSAutoscaleSetting(e) : e); WriteObject(sendToPipeline: records, enumerateCollection: true); } else { // Retrieve a single Autoscale setting determined by the resource group and the rule name AutoscaleSettingResource result = this.MonitorManagementClient.AutoscaleSettings.GetAsync(resourceGroupName: this.ResourceGroup, autoscaleSettingName: this.Name).Result; WriteObject(sendToPipeline: this.DetailedOutput.IsPresent ? new PSAutoscaleSetting(result) : result); } }
/// <summary> /// Execute the cmdlet /// </summary> protected override void ProcessRecordInternal() { if (ShouldProcess( target: string.Format("Create/update an autoscale setting: {0} from resource group: {1}", this.Name, this.ResourceGroupName), action: "Create/update an autoscale setting")) { AutoscaleSettingResource parameters = this.CreateAutoscaleSettingResource(); // The result of this operation is operation (AutoscaleSettingResource) is being discarded for backwards compatibility var result = this.MonitorManagementClient.AutoscaleSettings.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName: this.ResourceGroupName, autoscaleSettingName: this.Name, parameters: parameters).Result; var response = new PSAddAutoscaleSettingOperationResponse() { RequestId = result.RequestId, StatusCode = result.Response != null ? result.Response.StatusCode : HttpStatusCode.OK, SettingSpec = TransitionHelpers.ConvertNamespace(result.Body) }; WriteObject(response); } }
/// <summary> /// Execute the cmdlet /// </summary> protected override void ProcessRecordInternal() { WriteWarning("This output of this cmdlet will change in the next release to return the newly created object."); AutoscaleSettingResource parameters = this.CreateAutoscaleSettingResource(); // The result of this operation is operation (AutoscaleSettingResource) is being discarded for backwards compatibility var result = this.InsightsManagementClient.AutoscaleSettings.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName: this.ResourceGroup, autoscaleSettingName: this.Name, parameters: parameters).Result; // Keep this response for backwards compatibility. // Note: Create operations return the newly created object in the new specification, i.e. need to use result.Body var response = new List <AzureOperationResponse> { new AzureOperationResponse() { RequestId = result.RequestId, StatusCode = HttpStatusCode.OK } }; WriteObject(response); }
/// <summary> /// Execute the cmdlet /// </summary> protected override void ProcessRecordInternal() { this.WriteIdentifiedWarning( cmdletName: "Get-AzureRmAutoscaleSetting", topic: "Parameter deprecation", message: "The DetailedOutput parameter will be deprecated in a future breaking change release."); if (string.IsNullOrWhiteSpace(this.Name)) { // Retrieve all the Autoscale settings for a resource group IPage <AutoscaleSettingResource> result = this.MonitorManagementClient.AutoscaleSettings.ListByResourceGroupAsync(resourceGroupName: this.ResourceGroupName).Result; var records = result.Select(e => this.DetailedOutput.IsPresent ? new PSAutoscaleSetting(e) : new PSAutoscaleSettingNoDetails(e)); WriteObject(sendToPipeline: records, enumerateCollection: true); } else { // Retrieve a single Autoscale setting determined by the resource group and the rule name AutoscaleSettingResource result = this.MonitorManagementClient.AutoscaleSettings.GetAsync(resourceGroupName: this.ResourceGroupName, autoscaleSettingName: this.Name).Result; WriteObject(sendToPipeline: this.DetailedOutput.IsPresent ? new PSAutoscaleSetting(result) : new PSAutoscaleSettingNoDetails(result)); } }
public void UpdateSettingTest() { AutoscaleSettingResource resource = CreateAutoscaleSetting(location: "East US", resourceUri: ResourceUri, metricName: "CpuPercentage"); resource.Tags = new Dictionary <string, string> { { "key2", "val2" } }; resource.Enabled = false; var handler = new RecordedDelegatingHandler(); var monitorManagementClient = GetMonitorManagementClient(handler); var serializedObject = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(resource, monitorManagementClient.SerializationSettings); serializedObject = serializedObject.Replace("{", "{\"name\":\"" + resource.Name + "\",\"id\":\"" + resource.Id + "\","); var expectedResponse = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(serializedObject) }; handler = new RecordedDelegatingHandler(expectedResponse); monitorManagementClient = GetMonitorManagementClient(handler); AutoscaleSettingResourcePatch pathResource = new AutoscaleSettingResourcePatch( name: resource.Name, tags: new Dictionary <string, string> { { "key2", "val2" } }, notifications: resource.Notifications, enabled: false, profiles: resource.Profiles, targetResourceUri: resource.TargetResourceUri ); var actualResponse = monitorManagementClient.AutoscaleSettings.Update(resourceGroupName: "resourceGroup1", autoscaleSettingName: "setting1", autoscaleSettingResource: pathResource); Utilities.AreEqual(resource, actualResponse); }
private PSAutoscaleSetting CreateCompleteSpec(string location, string name, List <AutoscaleProfile> profiles = null) { if (profiles == null) { profiles = new List <AutoscaleProfile>() { this.CreateAutoscaleProfile() }; } var setting = new AutoscaleSettingResource( location: location, profiles: profiles, name: name) { Enabled = true, TargetResourceUri = Utilities.ResourceUri, Tags = new Dictionary <string, string>() }; return(new PSAutoscaleSetting(setting)); }
/// <summary> /// Execute the cmdlet /// </summary> protected override void ProcessRecordInternal() { this.WriteIdentifiedWarning( cmdletName: "Add-AzureRmAutoscaleSetting", topic: "Parameter name change", message: "The parameter plural names for the parameters will be deprecated in a future breaking change release in favor of he singular versions of the same names."); if (ShouldProcess( target: string.Format("Create/update an autoscale setting: {0} from resource group: {1}", this.Name, this.ResourceGroupName), action: "Create/update an autoscale setting")) { AutoscaleSettingResource parameters = this.CreateAutoscaleSettingResource(); // The result of this operation is operation (AutoscaleSettingResource) is being discarded for backwards compatibility var result = this.MonitorManagementClient.AutoscaleSettings.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName: this.ResourceGroupName, autoscaleSettingName: this.Name, parameters: parameters).Result; var response = new PSAddAutoscaleSettingOperationResponse() { RequestId = result.RequestId, StatusCode = result.Response != null ? result.Response.StatusCode : HttpStatusCode.OK, SettingSpec = result.Body }; WriteObject(response); } }
/// <summary> /// Initializes a new instance of the PSAutoscaleSetting class. /// </summary> /// <param name="autoscaleSettingSpec">The autoscale setting spec</param> public PSAutoscaleSettingNoDetails(AutoscaleSettingResource autoscaleSettingSpec) : base(autoscaleSettingSpec) { }
public async Task Autoscale_GetSetting() { var expResponse = CreateAutoscaleSetting(ResourceUri, "CpuPercentage", string.Empty); var mockResponse = new MockResponse((int)HttpStatusCode.OK); var content = @"{ 'properties': { 'profiles': [ { 'name': 'Profile2', 'capacity': { 'minimum': '1', 'maximum': '100', 'default': '1' }, 'rules': [ { 'metricTrigger': { 'metricName': '', 'metricNamespace': null, 'metricResourceUri': 'CpuPercentage', 'timeGrain': 'PT1M', 'statistic': 'Average', 'timeWindow': 'PT1H', 'timeAggregation': 'Maximum', 'operator': 'Equals', 'threshold': 80.0, 'dimensions': [] }, 'scaleAction': { 'direction': 'Increase', 'type': 'ChangeCount', 'value': '10', 'cooldown': 'PT20M' } } ], 'fixedDate': { 'timeZone': null, 'start': '2014-04-15T21:06:11.7882792+00:00', 'end': '2014-04-16T21:06:11.7882792+00:00' }, 'recurrence': { 'frequency': 'Week', 'schedule': { 'timeZone': 'UTC-11', 'days': [ 'Monday' ], 'hours': [ 0 ], 'minutes': [ 10 ] } } } ], 'notifications': [], 'enabled': true, 'targetResourceUri': 'CpuPercentage' }, 'id': null, 'name': 'setting1', 'type': null, 'location': '', 'tags': {} } ".Replace("'", "\""); mockResponse.SetContent(content); var mockTransport = new MockTransport(mockResponse); var insightsClient = GetInsightsManagementClient(mockTransport); AutoscaleSettingResource actualResponse = (await insightsClient.AutoscaleSettings.GetAsync(resourceGroupName: "resourceGroup1", autoscaleSettingName: "setting1")).Value; AreEqual(expResponse, actualResponse); }
public async Task CreateOrUpdateSettingTest() { AutoscaleSettingResource expResponse = CreateAutoscaleSetting(location: "East US", resourceUri: ResourceUri, metricName: "CpuPercentage"); var mockResponse = new MockResponse((int)HttpStatusCode.OK); var content = @"{ 'properties': { 'profiles': [ { 'name': 'Profile2', 'capacity': { 'minimum': '1', 'maximum': '100', 'default': '1' }, 'rules': [ { 'metricTrigger': { 'metricName': 'CpuPercentage', 'metricNamespace': null, 'metricResourceUri': '/subscriptions/4d7e91d4-e930-4bb5-a93d-163aa358e0dc/resourceGroups/Default-Web-westus/providers/microsoft.web/serverFarms/DefaultServerFarm', 'timeGrain': 'PT1M', 'statistic': 'Average', 'timeWindow': 'PT1H', 'timeAggregation': 'Maximum', 'operator': 'Equals', 'threshold': 80.0, 'dimensions': [] }, 'scaleAction': { 'direction': 'Increase', 'type': 'ChangeCount', 'value': '10', 'cooldown': 'PT20M' } } ], 'fixedDate': { 'timeZone': null, 'start': '2014-04-15T21:06:11.7882792+00:00', 'end': '2014-04-16T21:06:11.7882792+00:00' }, 'recurrence': { 'frequency': 'Week', 'schedule': { 'timeZone': 'UTC-11', 'days': [ 'Monday' ], 'hours': [ 0 ], 'minutes': [ 10 ] } } } ], 'notifications': [], 'enabled': true, 'targetResourceUri': '/subscriptions/4d7e91d4-e930-4bb5-a93d-163aa358e0dc/resourceGroups/Default-Web-westus/providers/microsoft.web/serverFarms/DefaultServerFarm' }, 'id': null, 'name': 'setting1', 'type': null, 'location': '', 'tags': {} }".Replace("'", "\""); mockResponse.SetContent(content); var mockTransport = new MockTransport(mockResponse); var insightsClient = GetInsightsManagementClient(mockTransport); var actualResponse = (await insightsClient.AutoscaleSettings.CreateOrUpdateAsync(resourceGroupName: "resourceGroup1", autoscaleSettingName: "setting1", parameters: expResponse)).Value; AreEqual(expResponse, actualResponse); }
public void MetricBasedFixedAndRecurrent() { using (MockContext context = MockContext.Start(this.GetType())) { // NOTE: checking the existence of the resource group here is not that useful since the scale set must also exist var insightsClient = GetMonitorManagementClient(context, handler); this.VerifyExistenceOrCreateResourceGroup(resourceGroupName: ResourceGroup, location: Location); AutoscaleSettingResource body = CreateAutoscaleSetting( location: Location, resourceUri: string.Format( provider: CultureInfo.InvariantCulture, format: ResourceUri, args: insightsClient.SubscriptionId), metricName: "Percentage CPU"); AutoscaleSettingResource actualResponse = insightsClient.AutoscaleSettings.CreateOrUpdate( resourceGroupName: ResourceGroup, autoscaleSettingName: SettingName, parameters: body); if (!this.IsRecording) { Check(actualResponse); } // Retrieve the setting created above AutoscaleSettingResource recoveredSetting = insightsClient.AutoscaleSettings.Get( resourceGroupName: ResourceGroup, autoscaleSettingName: SettingName); if (!this.IsRecording) { Check(recoveredSetting); // Compare the two of them Utilities.AreEqual(actualResponse, recoveredSetting); } var newTags = new Dictionary <string, string> { { "key2", "val2" } }; // Update the setting created above // TODO: File bug since the request fails due to 'invalid location' AutoscaleSettingResourcePatch pathResource = new AutoscaleSettingResourcePatch( name: recoveredSetting.Name, tags: newTags, notifications: recoveredSetting.Notifications, enabled: !recoveredSetting.Enabled, profiles: recoveredSetting.Profiles, targetResourceUri: recoveredSetting.TargetResourceUri ); AutoscaleSettingResource updatedSetting = null; Assert.Throws <ErrorResponseException>( () => updatedSetting = insightsClient.AutoscaleSettings.Update( resourceGroupName: ResourceGroup, autoscaleSettingName: SettingName, autoscaleSettingResource: pathResource)); if (!this.IsRecording && updatedSetting != null) { Check(updatedSetting); // Check the changes from above Assert.NotEqual(recoveredSetting.Tags, updatedSetting.Tags); Assert.True(recoveredSetting.Enabled = !updatedSetting.Enabled); Assert.Equal(recoveredSetting.Name, updatedSetting.Name); Assert.Equal(recoveredSetting.Location, updatedSetting.Location); Assert.Equal(recoveredSetting.Id, updatedSetting.Id); } // Retrieve again the setting created above AutoscaleSettingResource recoveredUpdatedSetting = insightsClient.AutoscaleSettings.Get( resourceGroupName: ResourceGroup, autoscaleSettingName: SettingName); if (!this.IsRecording && updatedSetting != null) { Check(recoveredUpdatedSetting); // Compare the two of them Assert.NotEqual(recoveredSetting.Tags, recoveredUpdatedSetting.Tags); Assert.True(recoveredSetting.Enabled = !recoveredUpdatedSetting.Enabled); Assert.Equal(recoveredSetting.Name, recoveredUpdatedSetting.Name); Assert.Equal(recoveredSetting.Location, recoveredUpdatedSetting.Location); Assert.Equal(recoveredSetting.Id, recoveredUpdatedSetting.Id); } // Remove the setting created above insightsClient.AutoscaleSettings.Delete( resourceGroupName: ResourceGroup, autoscaleSettingName: SettingName); // Retrieve again the setting created above (must fail) Assert.Throws <ErrorResponseException>( () => insightsClient.AutoscaleSettings.Get( resourceGroupName: ResourceGroup, autoscaleSettingName: SettingName)); } }
private AutoscaleSettingResource CreateAutoscale( string location, string resourceUri, string metricName, string vmssASMin, string vmssASMax) { var capacity = new ScaleCapacity() { DefaultProperty = "1", Maximum = vmssASMax, Minimum = vmssASMin }; var recurrence = new Recurrence() { Frequency = RecurrenceFrequency.Week, Schedule = new RecurrentSchedule() { Days = new List <string> { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }, Hours = new List <int?> { 0 }, Minutes = new List <int?> { 10 }, TimeZone = "UTC-11" } }; var rules = new ScaleRule[] { new ScaleRule() { MetricTrigger = new MetricTrigger { MetricName = metricName, MetricResourceUri = resourceUri, Statistic = MetricStatisticType.Average, Threshold = 80.0, OperatorProperty = ComparisonOperationType.GreaterThan, TimeAggregation = TimeAggregationType.Maximum, TimeGrain = TimeSpan.FromMinutes(1), TimeWindow = TimeSpan.FromHours(1) }, ScaleAction = new ScaleAction { Cooldown = TimeSpan.FromMinutes(20), Direction = ScaleDirection.Increase, Value = "10" } }, new ScaleRule() { MetricTrigger = new MetricTrigger { MetricName = metricName, MetricResourceUri = resourceUri, Statistic = MetricStatisticType.Average, Threshold = 30.0, OperatorProperty = ComparisonOperationType.LessThan, TimeAggregation = TimeAggregationType.Maximum, TimeGrain = TimeSpan.FromMinutes(1), TimeWindow = TimeSpan.FromHours(1) }, ScaleAction = new ScaleAction { Cooldown = TimeSpan.FromMinutes(20), Direction = ScaleDirection.Decrease, Value = "2" } } }; AutoscaleSettingResource setting = new AutoscaleSettingResource { Name = TestUtilities.GenerateName("autoscale"), AutoscaleSettingResourceName = "setting1", TargetResourceUri = resourceUri, Enabled = true, Profiles = new AutoscaleProfile[] { new AutoscaleProfile() { Name = TestUtilities.GenerateName("profile"), Capacity = capacity, FixedDate = null, Recurrence = recurrence, Rules = rules } }, Location = location, Tags = null, Notifications = null }; return(setting); }
private static AutoscaleSettingResource CreateAutoscaleSetting(string location, string resourceUri, string metricName) { var capacity = new ScaleCapacity() { DefaultProperty = "1", Maximum = "10", Minimum = "1" }; var fixedDate = new TimeWindow() { End = DateTime.Parse("2014-04-16T21:06:11.7882792Z"), Start = DateTime.Parse("2014-04-15T21:06:11.7882792Z"), TimeZone = TimeZoneInfo.Utc.Id.ToString() }; var recurrence = new Recurrence() { Frequency = RecurrenceFrequency.Week, Schedule = new RecurrentSchedule() { Days = new List <string> { "Monday" }, Hours = new List <int?> { 0 }, Minutes = new List <int?> { 10 }, TimeZone = "UTC-11" } }; var rules = new ScaleRule[] { new ScaleRule() { MetricTrigger = new MetricTrigger { MetricName = metricName, MetricResourceUri = resourceUri, Statistic = MetricStatisticType.Average, Threshold = 80.0, TimeAggregation = TimeAggregationType.Maximum, TimeGrain = TimeSpan.FromMinutes(1), TimeWindow = TimeSpan.FromHours(1) }, ScaleAction = new ScaleAction { Cooldown = TimeSpan.FromMinutes(20), Direction = ScaleDirection.Increase, Value = "1", Type = ScaleType.ChangeCount } } }; var profiles = new AutoscaleProfile[] { new AutoscaleProfile() { Name = "Profile1", Capacity = capacity, FixedDate = fixedDate, Recurrence = null, Rules = rules }, new AutoscaleProfile() { Name = "Profile2", Capacity = capacity, FixedDate = null, Recurrence = recurrence, Rules = rules } }; AutoscaleSettingResource setting = new AutoscaleSettingResource(location: Location, profiles: profiles, name: SettingName) { AutoscaleSettingResourceName = SettingName, TargetResourceUri = resourceUri, Enabled = true, Tags = null, Notifications = null }; return(setting); }
private void TestVMScaleSetAppGwWithASTests( MockContext context, string priority, string evictionPolicy = null, string vmssSkuTier = "Standard", string vmssASMin = "1", string vmssASMax = "100", string vmssSize = VirtualMachineSizeTypes.StandardA1, bool hasManagedDisks = false, bool hasSPG = true, int vmssSkuCapacity = 2, int AppGWMin = 2, int AppGWMax = 10 ) { string originalTestLocation = Environment.GetEnvironmentVariable("AZURE_VM_TEST_LOCATION"); // Create resource group var rgName = TestUtilities.GenerateName(TestPrefix); var vmssName = TestUtilities.GenerateName("vmss"); string storageAccountName = TestUtilities.GenerateName(TestPrefix); VirtualMachineScaleSet inputVMScaleSet; bool passed = false; try { Environment.SetEnvironmentVariable("AZURE_VM_TEST_LOCATION", "centralus"); EnsureClientsInitialized(context); ImageReference imageRef = GetPlatformVMImage(useWindowsImage: true); var storageAccountOutput = CreateStorageAccount(rgName, storageAccountName); m_CrpClient.VirtualMachineScaleSets.Delete(rgName, "VMScaleSetDoesNotExist"); // AppGW Configuration var vnetResponse = CreateVNETWithSubnets(rgName, 2); var gatewaySubnet = vnetResponse.Subnets[0]; var vmssSubnet = vnetResponse.Subnets[1]; ApplicationGateway appgw = CreateApplicationGateway(rgName, gatewaySubnet); appgw.AutoscaleConfiguration = new ApplicationGatewayAutoscaleConfiguration(AppGWMin, AppGWMax); Microsoft.Azure.Management.Compute.Models.SubResource backendAddressPool = new Microsoft.Azure.Management.Compute.Models.SubResource() { Id = appgw.BackendAddressPools[0].Id }; var getResponse = CreateVMScaleSet_NoAsyncTracking( rgName, vmssName, storageAccountOutput, imageRef, out inputVMScaleSet, null, (vmScaleSet) => { vmScaleSet.Overprovision = true; vmScaleSet.VirtualMachineProfile.Priority = priority; vmScaleSet.VirtualMachineProfile.EvictionPolicy = evictionPolicy; vmScaleSet.VirtualMachineProfile.NetworkProfile .NetworkInterfaceConfigurations[0].IpConfigurations[0] .ApplicationGatewayBackendAddressPools.Add(backendAddressPool); vmScaleSet.Sku.Name = vmssSize; vmScaleSet.Sku.Tier = vmssSkuTier; vmScaleSet.Sku.Capacity = vmssSkuCapacity; }, machineSizeType: vmssSize, createWithManagedDisks: hasManagedDisks, singlePlacementGroup: hasSPG, subnet: vmssSubnet); AutoscaleSettingResource resource = CreateAutoscale(rgName, vmssName, "VMSS", vmssASMin, vmssASMax); var getGwResponse = m_NrpClient.ApplicationGateways.Get(rgName, appgw.Name); Assert.True(2 == getGwResponse.BackendAddressPools[0].BackendIPConfigurations.Count); ValidateVMScaleSet(inputVMScaleSet, getResponse, hasManagedDisks); var getInstanceViewResponse = m_CrpClient.VirtualMachineScaleSets.GetInstanceView(rgName, vmssName); Assert.NotNull(getInstanceViewResponse); ValidateVMScaleSetInstanceView(inputVMScaleSet, getInstanceViewResponse); var listResponse = m_CrpClient.VirtualMachineScaleSets.List(rgName); ValidateVMScaleSet( inputVMScaleSet, listResponse.FirstOrDefault(x => x.Name == vmssName), hasManagedDisks); var listSkusResponse = m_CrpClient.VirtualMachineScaleSets.ListSkus(rgName, vmssName); Assert.NotNull(listSkusResponse); Assert.NotNull(resource); Assert.False(listSkusResponse.Count() == 0); Assert.Same(inputVMScaleSet.VirtualMachineProfile.Priority.ToString(), priority); m_CrpClient.VirtualMachineScaleSets.Delete(rgName, vmssName); passed = true; } finally { Environment.SetEnvironmentVariable("AZURE_VM_TEST_LOCATION", originalTestLocation); //Cleanup the created resources. But don't wait since it takes too long, and it's not the purpose //of the test to cover deletion. CSM does persistent retrying over all RG resources. m_ResourcesClient.ResourceGroups.Delete(rgName); } Assert.True(passed); }