Exemple #1
0
 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
                                                      ));
                }
            }
        }