Exemple #1
0
        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);
        }
Exemple #6
0
 /// <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)
 {
 }
Exemple #9
0
        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);
        }
Exemple #11
0
        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);
                }
            }
        }
Exemple #13
0
 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);
            }
        }
Exemple #19
0
        /// <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);
        }
Exemple #20
0
        /// <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);
        }
Exemple #27
0
        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);
        }
Exemple #29
0
        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);
        }