Ejemplo n.º 1
0
        /// <summary>
        /// Validates the instance.
        /// </summary>
        /// <param name="context">The validation context.</param>
        public void Validate(TrafficValidationContext context)
        {
            Timeouts              = Timeouts ?? new TrafficTimeouts();
            Resolvers             = Resolvers ?? new List <TrafficResolver>();
            BridgeTargetAddresses = BridgeTargetAddresses ?? new List <IPAddress>();

            if (!Resolvers.Exists(r => r.Name == "docker"))
            {
                Resolvers.Add(
                    new TrafficResolver()
                {
                    Name        = "docker",
                    NameServers = new List <TrafficNameserver>()
                    {
                        new TrafficNameserver()
                        {
                            Name     = "docker0",
                            Endpoint = HiveConst.DockerDnsEndpoint
                        }
                    }
                });
            }

            if (!NetHelper.IsValidPort(ProxyPorts.PortRange.FirstPort) ||
                !NetHelper.IsValidPort(ProxyPorts.PortRange.LastPort) ||
                ProxyPorts.PortRange.LastPort <= ProxyPorts.PortRange.FirstPort + 1)
            {
                context.Error($"Load balancer port block [{ProxyPorts.PortRange.FirstPort}-{ProxyPorts.PortRange.LastPort}] range is not valid.");
            }

            if (MaxConnections <= 0)
            {
                context.Error($"Load balancer settings [{nameof(MaxConnections)}={MaxConnections}] is not positive.");
            }

            Timeouts.Validate(context);

            if (!Resolvers.Exists(r => r.Name == "docker"))
            {
                context.Error($"Load balancer settings [{nameof(Resolvers)}] must include a [docker] definition.");
            }

            foreach (var resolver in Resolvers)
            {
                resolver.Validate(context);
            }

            if (BridgeTargetCount < 0)
            {
                context.Error($"Load balancer settings [{nameof(BridgeTargetCount)}={BridgeTargetCount}] cannot be negative.");
            }

            if (BridgeTargetCount == 0 && BridgeTargetAddresses.Count == 0)
            {
                context.Error($"Load balancer settings no bridge targets are specified.");
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Validates the instance.
        /// </summary>
        /// <param name="context">The validation context.</param>
        public virtual void Validate(TrafficValidationContext context)
        {
            Timeouts = Timeouts ?? new TrafficTimeouts();

            if (string.IsNullOrEmpty(Name))
            {
                context.Error($"Load balancer rule name is required.");
            }

            if (!HiveDefinition.NameRegex.IsMatch(Name))
            {
                context.Error($"Load balancer rule name [{nameof(Name)}={Name}] is not valid.");
            }

            if (context.ValidateResolvers)
            {
                if (!string.IsNullOrWhiteSpace(Resolver) &&
                    context.Settings != null &&
                    context.Settings.Resolvers.Count(r => string.Equals(Resolver, r.Name, StringComparison.OrdinalIgnoreCase)) == 0)
                {
                    context.Error($"Load balancer resolver [{nameof(Resolver)}={Resolver}] does not exist.");
                }
            }

            Resolver     = Resolver ?? defaultResolverName;
            CheckHeaders = CheckHeaders ?? new List <TrafficCheckHeader>();

            foreach (var checkHeader in CheckHeaders)
            {
                checkHeader.Validate(context, this);
            }

            if (UseHttpCheckMode)
            {
                if (string.IsNullOrEmpty(CheckUri) || !Uri.TryCreate(CheckUri, UriKind.RelativeOrAbsolute, out var uri))
                {
                    context.Error($"Rule [{nameof(Name)}] has invalid [{nameof(CheckUri)}={CheckUri}].");
                }
            }

            if (CheckSeconds < 0.0)
            {
                CheckSeconds = 5.0;
            }

            Timeouts.Validate(context);
        }