public static SdkFrontDoor ToSdkFrontDoor(this PSFrontDoor psFrontDoor) { return(new SdkFrontDoor( name: psFrontDoor.Name, location: "global", tags: psFrontDoor.Tags.ToDictionaryTags(), friendlyName: psFrontDoor.FriendlyName, routingRules: psFrontDoor.RoutingRules?.Select(x => x.ToSdkRoutingRule()).ToList(), loadBalancingSettings: psFrontDoor.LoadBalancingSettings?.Select(x => x.ToSdkLoadBalancingSetting()).ToList(), healthProbeSettings: psFrontDoor.HealthProbeSettings?.Select(x => x.ToSdkHealthProbeSetting()).ToList(), backendPools: psFrontDoor.BackendPools?.Select(x => x.ToSdkBackendPool()).ToList(), frontendEndpoints: psFrontDoor.FrontendEndpoints?.Select(x => x.ToSdkFrontendEndpoints()).ToList(), enabledState: psFrontDoor.EnabledState.ToString() )); }
public static void ValidateFrontDoor(this PSFrontDoor frontDoor, string resourceGroup, string subId) { //Create Resource ID for existing subresources. HashSet <string> routingRuleIds = new HashSet <string>(); foreach (var routingRule in frontDoor.RoutingRules) { string id = string.Format("/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Network/frontDoors/{2}/RoutingRules/{3}", subId, resourceGroup, frontDoor.Name, routingRule.Name).ToLower(); if (routingRuleIds.FirstOrDefault(x => x.Equals(id)) != null) { throw new PSArgumentException(string.Format( "Routingrule name need to be identical. {0}", routingRule.Name )); } routingRuleIds.Add(id); } HashSet <string> healthProbeSettingIds = new HashSet <string>(); foreach (var hpSetting in frontDoor.HealthProbeSettings) { string id = string.Format("/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Network/frontDoors/{2}/HealthProbeSettings/{3}", subId, resourceGroup, frontDoor.Name, hpSetting.Name).ToLower(); if (healthProbeSettingIds.FirstOrDefault(x => x.Equals(id)) != null) { throw new PSArgumentException(string.Format( "HealthProbeSettings name need to be identical. {0}", hpSetting.Name )); } healthProbeSettingIds.Add(id); } HashSet <string> loadBalancingSettingIds = new HashSet <string>(); foreach (var lbSetting in frontDoor.LoadBalancingSettings) { string id = string.Format("/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Network/frontDoors/{2}/LoadBalancingSettings/{3}", subId, resourceGroup, frontDoor.Name, lbSetting.Name).ToLower(); if (loadBalancingSettingIds.FirstOrDefault(x => x.Equals(id)) != null) { throw new PSArgumentException(string.Format( "LoadBalancingSettings name need to be identical. {0}", lbSetting.Name )); } loadBalancingSettingIds.Add(id); } HashSet <string> frontendEndpointIds = new HashSet <string>(); foreach (var frontendEndpoint in frontDoor.FrontendEndpoints) { string id = string.Format("/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Network/frontDoors/{2}/FrontendEndpoints/{3}", subId, resourceGroup, frontDoor.Name, frontendEndpoint.Name).ToLower(); if (frontendEndpointIds.FirstOrDefault(x => x.Equals(id)) != null) { throw new PSArgumentException(string.Format( "FrontendEndpoint name need to be identical. {0}", frontendEndpoint.Name )); } frontendEndpointIds.Add(id.ToLower()); } HashSet <string> backendPoolIds = new HashSet <string>(); foreach (var backendPool in frontDoor.BackendPools) { string id = string.Format("/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Network/frontDoors/{2}/BackendPools/{3}", subId, resourceGroup, frontDoor.Name, backendPool.Name).ToLower(); if (backendPoolIds.FirstOrDefault(x => x.Equals(id)) != null) { throw new PSArgumentException(string.Format( "BackendPool name need to be identical. {0}", backendPool.Name )); } backendPoolIds.Add(id.ToLower()); } // Validate reference in each resources foreach (var routingRule in frontDoor.RoutingRules) { foreach (var id in routingRule.FrontendEndpointIds) { if (frontendEndpointIds.FirstOrDefault(x => x.Equals(id.ToLower())) == null) { throw new PSArgumentException(string.Format( "Invalid FrontendEndpointId {0} in {1}. Target doesn't exist", id, routingRule.Name )); } } if (routingRule.RouteConfiguration is PSForwardingConfiguration) { var forwardingConfiguration = routingRule.RouteConfiguration as PSForwardingConfiguration; if (backendPoolIds.FirstOrDefault(x => x.Equals(forwardingConfiguration.BackendPoolId.ToLower())) == null) { throw new PSArgumentException(string.Format( "Invalid BackendPollId {0} in {1}. Target doesn't exist", forwardingConfiguration.BackendPoolId, routingRule.Name )); } } } foreach (var backendPool in frontDoor.BackendPools) { if (healthProbeSettingIds.FirstOrDefault(x => x.Equals(backendPool.HealthProbeSettingRef.ToLower())) == null) { throw new PSArgumentException(string.Format( "Invalid HealthProbeSetting {0} in {1}. Target doesn't exist", backendPool.HealthProbeSettingRef, backendPool.Name )); } if (loadBalancingSettingIds.FirstOrDefault(x => x.Equals(backendPool.LoadBalancingSettingRef.ToLower())) == null) { throw new PSArgumentException(string.Format( "Invalid HealthProbeSetting {0} in {1}. Target doesn't exist", backendPool.LoadBalancingSettingRef, backendPool.Name )); } } }