public PathRule(string name, string path, BackendHttpSetting backendHttpSetting, BackendPool backendPool) { Name = name; Path = path; BackendHttpSetting = backendHttpSetting; BackendPool = backendPool; }
public override void ExecuteCmdlet() { var existingProfile = FrontDoorManagementClient.FrontDoors.ListByResourceGroup(ResourceGroupName) .Where(p => p.Name.ToLower() == Name.ToLower()); if (existingProfile.Count() != 0) { throw new PSArgumentException(string.Format(Resources.Error_CreateExistingFrontDoor, Name, ResourceGroupName)); } var updateParameters = new Management.FrontDoor.Models.FrontDoorModel( id: null, name: Name, type: null, location: "global", tags: Tag.ToDictionaryTags(), friendlyName: Name, routingRules: RoutingRule?.Select(x => x.ToSdkRoutingRule()).ToList(), loadBalancingSettings: LoadBalancingSetting?.Select(x => x.ToSdkLoadBalancingSetting()).ToList(), healthProbeSettings: HealthProbeSetting?.Select(x => x.ToSdkHealthProbeSetting()).ToList(), backendPools: BackendPool?.Select(x => x.ToSdkBackendPool()).ToList(), frontendEndpoints: FrontendEndpoint?.Select(x => x.ToSdkFrontendEndpoints()).ToList(), enabledState: !this.IsParameterBound(c => c.EnabledState)? "Enabled" : EnabledState.ToString(), backendPoolsSettings: new Management.FrontDoor.Models.BackendPoolsSettings( DisableCertificateNameCheck ? PSEnforceCertificateNameCheck.Disabled.ToString() : PSEnforceCertificateNameCheck.Enabled.ToString()) ); updateParameters.ToPSFrontDoor().ValidateFrontDoor(ResourceGroupName, this.DefaultContext.Subscription.Id); if (ShouldProcess(Resources.FrontDoorTarget, string.Format(Resources.CreateFrontDoor, Name))) { try { var frontDoor = FrontDoorManagementClient.FrontDoors.CreateOrUpdate( ResourceGroupName, Name, updateParameters ); WriteObject(frontDoor.ToPSFrontDoor()); } catch (Microsoft.Azure.Management.FrontDoor.Models.ErrorResponseException e) { throw new PSArgumentException(string.Format(Resources.Error_ErrorResponseFromServer, e.Response.Content)); } } }
public IDefineRouting WithProbe(string path = "/", int interval = 30, int timeout = 30, int unhealthyThreshold = 3, string matchStatusCodes = "200-399", string probeName = null) { _applicationGateway.Listeners.Add(_listener); var probe = new Probe(probeName ?? _appService.Name, _backendHttpSetting.Protocol, path, interval, timeout, unhealthyThreshold, matchStatusCodes); if (!_applicationGateway.Probes.Contains(probe)) { _applicationGateway.Probes.Add(probe); } else { probe = _applicationGateway.Probes.Single(p => Equals(p, probe)); } _backendHttpSetting.Probe = probe; if (!_applicationGateway.BackendHttpSettings.Contains(_backendHttpSetting)) { _applicationGateway.BackendHttpSettings.Add(_backendHttpSetting); } else { _backendHttpSetting = _applicationGateway.BackendHttpSettings.Single(p => Equals(p, _backendHttpSetting)); } var backendPool = new BackendPool { Name = _backendPoolName, Addresses = { new BackendPoolAddress(_appService) } }; if (!_applicationGateway.BackendPools.Contains(backendPool)) { _applicationGateway.BackendPools.Add(backendPool); } else { backendPool = _applicationGateway.BackendPools.Single(p => Equals(p, backendPool)); } _applicationGateway.Rules.Add(new BasicForwardRule(_ruleName, _listener, _backendHttpSetting, backendPool)); return(_defineRouting); }
private BackendPool AddProbeAndBackendPool(string path, int interval, int timeout, int unhealthyThreshold, string matchStatusCodes, string probeName) { var probe = new Probe(probeName ?? _appService.Name, _backendHttpSetting.Protocol, path, interval, timeout, unhealthyThreshold, matchStatusCodes); if (!_applicationGateway.Probes.Contains(probe)) { _applicationGateway.Probes.Add(probe); } else { probe = _applicationGateway.Probes.Single(p => Equals(p, probe)); } _backendHttpSetting.Probe = probe; if (!_applicationGateway.BackendHttpSettings.Contains(_backendHttpSetting)) { _applicationGateway.BackendHttpSettings.Add(_backendHttpSetting); } else { _backendHttpSetting = _applicationGateway.BackendHttpSettings.Single(p => Equals(p, _backendHttpSetting)); } var backendPool = new BackendPool { Name = _backendPoolName, Addresses = { new BackendPoolAddress(_appService) } }; if (!_applicationGateway.BackendPools.Contains(backendPool)) { _applicationGateway.BackendPools.Add(backendPool); } else { backendPool = _applicationGateway.BackendPools.Single(p => Equals(p, backendPool)); } return(backendPool); }
public void FrontDoorCRUDTest() { var handler1 = new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK }; var handler2 = new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK }; using (MockContext context = MockContext.Start(this.GetType())) { // Create clients var frontDoorMgmtClient = FrontDoorTestUtilities.GetFrontDoorManagementClient(context, handler1); var resourcesClient = FrontDoorTestUtilities.GetResourceManagementClient(context, handler2); // Get subscription id string subid = frontDoorMgmtClient.SubscriptionId; // Create resource group var resourceGroupName = FrontDoorTestUtilities.CreateResourceGroup(resourcesClient); // Create two different frontDoor string frontDoorName = TestUtilities.GenerateName("frontDoor"); ForwardingConfiguration forwardingConfiguration = new ForwardingConfiguration( forwardingProtocol: "MatchRequest", backendPool: new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/backendPools/backendPool1")); RoutingRule routingrule1 = new RoutingRule( name: "routingrule1", frontendEndpoints: new List <refID> { new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/frontendEndpoints/frontendEndpoint1") }, acceptedProtocols: new List <string> { "Https" }, patternsToMatch: new List <string> { "/*" }, routeConfiguration: forwardingConfiguration, enabledState: "Enabled" ); HealthProbeSettingsModel healthProbeSettings1 = new HealthProbeSettingsModel( name: "healthProbeSettings1", path: "/", protocol: "Http", intervalInSeconds: 120, healthProbeMethod: "Get", enabledState: "Enabled" ); LoadBalancingSettingsModel loadBalancingSettings1 = new LoadBalancingSettingsModel( name: "loadBalancingSettings1", additionalLatencyMilliseconds: 0, sampleSize: 4, successfulSamplesRequired: 2 ); Backend backend1 = new Backend( address: "contoso1.azurewebsites.net", httpPort: 80, httpsPort: 443, enabledState: "Enabled", weight: 1, priority: 2 ); BackendPool backendPool1 = new BackendPool( name: "backendPool1", backends: new List <Backend> { backend1 }, loadBalancingSettings: new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/loadBalancingSettings/loadBalancingSettings1"), healthProbeSettings: new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/healthProbeSettings/healthProbeSettings1") ); BackendPoolsSettings backendPoolsSettings1 = new BackendPoolsSettings( sendRecvTimeoutSeconds: 123 ); FrontendEndpoint frontendEndpoint1 = new FrontendEndpoint( name: "frontendEndpoint1", hostName: frontDoorName + ".azurefd.net", sessionAffinityEnabledState: "Disabled", sessionAffinityTtlSeconds: 0 ); FrontDoorModel createParameters = new FrontDoorModel { Location = "global", FriendlyName = frontDoorName, Tags = new Dictionary <string, string> { { "key1", "value1" }, { "key2", "value2" } }, RoutingRules = new List <RoutingRule> { routingrule1 }, LoadBalancingSettings = new List <LoadBalancingSettingsModel> { loadBalancingSettings1 }, HealthProbeSettings = new List <HealthProbeSettingsModel> { healthProbeSettings1 }, FrontendEndpoints = new List <FrontendEndpoint> { frontendEndpoint1 }, BackendPools = new List <BackendPool> { backendPool1 }, BackendPoolsSettings = backendPoolsSettings1 }; var createdFrontDoor = frontDoorMgmtClient.FrontDoors.CreateOrUpdate(resourceGroupName, frontDoorName, createParameters); // validate that correct frontdoor is created VerifyFrontDoor(createdFrontDoor, createParameters); // Retrieve frontdoor var retrievedFrontDoor = frontDoorMgmtClient.FrontDoors.Get(resourceGroupName, frontDoorName); // validate that correct frontdoor is retrieved VerifyFrontDoor(retrievedFrontDoor, createParameters); // update FrontDoor retrievedFrontDoor.Tags = new Dictionary <string, string> { { "key3", "value3" }, { "key4", "value4" } }; var updatedFrontDoor = frontDoorMgmtClient.FrontDoors.CreateOrUpdate(resourceGroupName, frontDoorName, retrievedFrontDoor); // validate that frontDoor is correctly updated VerifyFrontDoor(updatedFrontDoor, retrievedFrontDoor); // Delete frontDoor frontDoorMgmtClient.FrontDoors.Delete(resourceGroupName, frontDoorName); // Verify that frontDoor is deleted Assert.ThrowsAny <ErrorResponseException>(() => { frontDoorMgmtClient.FrontDoors.Get(resourceGroupName, frontDoorName); }); FrontDoorTestUtilities.DeleteResourceGroup(resourcesClient, resourceGroupName); } }
public void FrontDoorCRUDTestWithRulesEngine() { var handler1 = new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK }; var handler2 = new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK }; using (MockContext context = MockContext.Start(this.GetType())) { // Create clients var frontDoorMgmtClient = FrontDoorTestUtilities.GetFrontDoorManagementClient(context, handler1); var resourcesClient = FrontDoorTestUtilities.GetResourceManagementClient(context, handler2); // Get subscription id string subid = frontDoorMgmtClient.SubscriptionId; // Create resource group var resourceGroupName = FrontDoorTestUtilities.CreateResourceGroup(resourcesClient); // Create two different frontDoor string frontDoorName = TestUtilities.GenerateName("frontDoor"); ForwardingConfiguration forwardingConfiguration = new ForwardingConfiguration( forwardingProtocol: "MatchRequest", backendPool: new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/backendPools/backendPool1")); RoutingRule routingrule1 = new RoutingRule( name: "routingrule1", frontendEndpoints: new List <refID> { new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/frontendEndpoints/frontendEndpoint1") }, acceptedProtocols: new List <string> { "Https" }, patternsToMatch: new List <string> { "/*" }, routeConfiguration: forwardingConfiguration, enabledState: "Enabled" ); HealthProbeSettingsModel healthProbeSettings1 = new HealthProbeSettingsModel( name: "healthProbeSettings1", path: "/", protocol: "Http", intervalInSeconds: 120, healthProbeMethod: "Get", enabledState: "Enabled" ); LoadBalancingSettingsModel loadBalancingSettings1 = new LoadBalancingSettingsModel( name: "loadBalancingSettings1", additionalLatencyMilliseconds: 0, sampleSize: 4, successfulSamplesRequired: 2 ); Backend backend1 = new Backend( address: "contoso1.azurewebsites.net", httpPort: 80, httpsPort: 443, enabledState: "Enabled", weight: 1, priority: 2 ); BackendPool backendPool1 = new BackendPool( name: "backendPool1", backends: new List <Backend> { backend1 }, loadBalancingSettings: new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/loadBalancingSettings/loadBalancingSettings1"), healthProbeSettings: new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/healthProbeSettings/healthProbeSettings1") ); BackendPoolsSettings backendPoolsSettings1 = new BackendPoolsSettings( sendRecvTimeoutSeconds: 123 ); FrontendEndpoint frontendEndpoint1 = new FrontendEndpoint( name: "frontendEndpoint1", hostName: frontDoorName + ".azurefd.net", sessionAffinityEnabledState: "Disabled", sessionAffinityTtlSeconds: 0 ); FrontDoorModel createParameters = new FrontDoorModel { Location = "global", FriendlyName = frontDoorName, Tags = new Dictionary <string, string> { { "key1", "value1" }, { "key2", "value2" } }, RoutingRules = new List <RoutingRule> { routingrule1 }, LoadBalancingSettings = new List <LoadBalancingSettingsModel> { loadBalancingSettings1 }, HealthProbeSettings = new List <HealthProbeSettingsModel> { healthProbeSettings1 }, FrontendEndpoints = new List <FrontendEndpoint> { frontendEndpoint1 }, BackendPools = new List <BackendPool> { backendPool1 }, BackendPoolsSettings = backendPoolsSettings1 }; var createdFrontDoor = frontDoorMgmtClient.FrontDoors.CreateOrUpdate(resourceGroupName, frontDoorName, createParameters); // validate that correct frontdoor is created VerifyFrontDoor(createdFrontDoor, createParameters); // Create rules engine for front door RulesEngineAction rulesEngineAction1 = new RulesEngineAction( requestHeaderActions: new List <HeaderAction> { }, responseHeaderActions: new List <HeaderAction> { }, routeConfigurationOverride: new ForwardingConfiguration( customForwardingPath: null, forwardingProtocol: "HttpsOnly", cacheConfiguration: new CacheConfiguration(queryParameterStripDirective: "StripNone", dynamicCompression: "Disabled"), backendPool: new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/backendPools/backendPool1") ) ); RulesEngineMatchCondition rulesEngineMatchCondition1 = new RulesEngineMatchCondition( rulesEngineMatchVariable: "RequestHeader", selector: "Rules-engine-action", rulesEngineOperator: "Equal", rulesEngineMatchValue: new List <string> { "Route-override-forwarding" }, negateCondition: false, transforms: new List <string> { } ); RulesEngineRule rule1 = new RulesEngineRule( priority: 1, name: "Rules1", matchProcessingBehavior: "Stop", action: rulesEngineAction1, matchConditions: new List <RulesEngineMatchCondition> { rulesEngineMatchCondition1 } ); RulesEngine rulesEngine1 = new RulesEngine( rules: new List <RulesEngineRule> { rule1 }, name: "RulesEngine1" ); var rulesEngineParameters = new List <RulesEngine> { rulesEngine1 }; var createdRulesEngine = frontDoorMgmtClient.RulesEngines.CreateOrUpdate(resourceGroupName, frontDoorName, rulesEngine1.Name, rulesEngineParameters[0]); // Validate correct rules engine created VerifyRulesEngine(createdRulesEngine, rulesEngineParameters[0]); // Retrieve rules engines for front door var retrievedRulesEngines = frontDoorMgmtClient.RulesEngines.ListByFrontDoor(resourceGroupName, frontDoorName).ToList <RulesEngine>(); // Validate correct rules engines retrieved from front door VerifyRulesEngines(retrievedRulesEngines, rulesEngineParameters); // Retrieve frontdoor and validate rules engine present var retrievedFrontDoor = frontDoorMgmtClient.FrontDoors.Get(resourceGroupName, frontDoorName); VerifyFrontDoor(retrievedFrontDoor, createParameters); VerifyRulesEngines(retrievedFrontDoor.RulesEngines, rulesEngineParameters); // Link rules engine to routing rule // why did sdk not autogenerate into subresource? retrievedFrontDoor.RoutingRules[0].RulesEngine = new refID("/subscriptions/" + subid + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/frontDoors/" + frontDoorName + "/rulesEngines/" + rulesEngine1.Name); var updatedFrontDoor = frontDoorMgmtClient.FrontDoors.CreateOrUpdate(resourceGroupName, frontDoorName, retrievedFrontDoor); // Validate rules engine has been linked. VerifyFrontDoor(updatedFrontDoor, retrievedFrontDoor); // Unlink rules engine and delete rules engine. frontDoorMgmtClient.FrontDoors.CreateOrUpdate(resourceGroupName, frontDoorName, createParameters); frontDoorMgmtClient.RulesEngines.Delete(resourceGroupName, frontDoorName, rulesEngine1.Name); // Verify rules engine deleted retrievedRulesEngines = frontDoorMgmtClient.RulesEngines.ListByFrontDoor(resourceGroupName, frontDoorName).ToList <RulesEngine>(); Assert.Empty(retrievedRulesEngines); // Delete frontDoor frontDoorMgmtClient.FrontDoors.Delete(resourceGroupName, frontDoorName); // Verify that frontDoor is deleted Assert.ThrowsAny <ErrorResponseException>(() => { frontDoorMgmtClient.FrontDoors.Get(resourceGroupName, frontDoorName); }); FrontDoorTestUtilities.DeleteResourceGroup(resourcesClient, resourceGroupName); } }
/// <summary> /// Creates a new Backend Pool with the specified Pool name within the /// specified Front Door. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// Name of the Resource group within the Azure subscription. /// </param> /// <param name='frontDoorName'> /// Name of the Front Door which is globally unique. /// </param> /// <param name='backendPoolName'> /// Name of the Backend Pool which is unique within the Front Door. /// </param> /// <param name='backendPoolParameters'> /// Backend Pool properties needed to create a new Pool. /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async Task <BackendPool> BeginCreateOrUpdateAsync(this IBackendPoolsOperations operations, string resourceGroupName, string frontDoorName, string backendPoolName, BackendPool backendPoolParameters, CancellationToken cancellationToken = default(CancellationToken)) { using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, frontDoorName, backendPoolName, backendPoolParameters, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }
/// <summary> /// Creates a new Backend Pool with the specified Pool name within the /// specified Front Door. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// Name of the Resource group within the Azure subscription. /// </param> /// <param name='frontDoorName'> /// Name of the Front Door which is globally unique. /// </param> /// <param name='backendPoolName'> /// Name of the Backend Pool which is unique within the Front Door. /// </param> /// <param name='backendPoolParameters'> /// Backend Pool properties needed to create a new Pool. /// </param> public static BackendPool BeginCreateOrUpdate(this IBackendPoolsOperations operations, string resourceGroupName, string frontDoorName, string backendPoolName, BackendPool backendPoolParameters) { return(operations.BeginCreateOrUpdateAsync(resourceGroupName, frontDoorName, backendPoolName, backendPoolParameters).GetAwaiter().GetResult()); }
public override void ExecuteCmdlet() { if (ParameterSetName == ObjectParameterSet) { ResourceIdentifier identifier = new ResourceIdentifier(InputObject.Id); ResourceGroupName = identifier.ResourceGroupName; Name = InputObject.Name; } else if (ParameterSetName == ResourceIdParameterSet) { ResourceIdentifier identifier = new ResourceIdentifier(ResourceId); ResourceGroupName = identifier.ResourceGroupName; Name = InputObject.Name; } var existingFrontDoor = FrontDoorManagementClient.FrontDoors.ListByResourceGroup(ResourceGroupName) .FirstOrDefault(fd => fd.Name.ToLower() == Name.ToLower()); if (existingFrontDoor == null) { throw new PSArgumentException(string.Format( Resources.Error_FrontDoorNotFound, Name, ResourceGroupName)); } PSFrontDoor updateParameters; if (ParameterSetName == ObjectParameterSet) { updateParameters = InputObject; } else { updateParameters = existingFrontDoor.ToPSFrontDoor(); } // update each field based on optional input. if (this.IsParameterBound(c => c.RoutingRule)) { updateParameters.RoutingRules = RoutingRule.ToList(); } if (this.IsParameterBound(c => c.FrontendEndpoint)) { updateParameters.FrontendEndpoints = FrontendEndpoint.ToList(); } if (this.IsParameterBound(c => c.HealthProbeSetting)) { updateParameters.HealthProbeSettings = HealthProbeSetting.ToList(); } if (this.IsParameterBound(c => c.LoadBalancingSetting)) { updateParameters.LoadBalancingSettings = LoadBalancingSetting.ToList(); } if (this.IsParameterBound(c => c.BackendPool)) { updateParameters.BackendPools = BackendPool.ToList(); } if (this.IsParameterBound(c => c.Tag)) { updateParameters.Tags = Tag; } if (this.IsParameterBound(c => c.EnabledState)) { updateParameters.EnabledState = EnabledState; } if (this.IsParameterBound(c => c.DisableCertificateNameCheck)) { updateParameters.EnforceCertificateNameCheck = DisableCertificateNameCheck ? PSEnforceCertificateNameCheck.Disabled : PSEnforceCertificateNameCheck.Enabled; } updateParameters.ValidateFrontDoor(ResourceGroupName, this.DefaultContext.Subscription.Id); if (ShouldProcess(Resources.FrontDoorTarget, string.Format(Resources.FrontDoorChangeWarning, Name))) { try { var frontDoor = FrontDoorManagementClient.FrontDoors.CreateOrUpdate( ResourceGroupName, Name, updateParameters.ToSdkFrontDoor() ); WriteObject(frontDoor.ToPSFrontDoor()); } catch (Microsoft.Azure.Management.FrontDoor.Models.ErrorResponseException e) { throw new PSArgumentException(string.Format( Resources.Error_ErrorResponseFromServer, e.Response.Content)); } } }
public UrlPathMap WithRule(string name, string path, BackendHttpSetting backendHttpSetting, BackendPool backendPool) { _rules.Add(new PathRule(name, path, backendHttpSetting, backendPool)); return(this); }
public UrlPathMap(string name, BackendHttpSetting defaultBackendHttpSetting, BackendPool defaultBackendPool) { Name = name; DefaultBackendHttpSetting = defaultBackendHttpSetting; DefaultBackendPool = defaultBackendPool; }
public BasicForwardRule(string name, Listener listener, BackendHttpSetting backendHttpSetting, BackendPool backendPool) : base(name, listener) { BackendHttpSetting = backendHttpSetting; BackendPool = backendPool; }