// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>

namespace k8s.Models
{
    using Newtonsoft.Json;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;

    /// <summary>
    /// EndpointSubset is a group of addresses with a common set of ports. The
    /// expanded set of endpoints is the Cartesian product of Addresses x
    /// Ports. For example, given:
    /// {
    /// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
    /// Ports:     [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
    /// }
    /// The resulting set of endpoints can be viewed as:
    /// a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],
    /// b: [ 10.10.1.1:309, 10.10.2.2:309 ]
    /// </summary>
    public partial class V1EndpointSubset
    {
        /// <summary>
        /// Initializes a new instance of the V1EndpointSubset class.
        /// </summary>
        public V1EndpointSubset()
        {
            CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the V1EndpointSubset class.
        /// </summary>
        /// <param name="addresses">IP addresses which offer the related ports
        /// that are marked as ready. These endpoints should be considered safe
        /// for load balancers and clients to utilize.</param>
        /// <param name="notReadyAddresses">IP addresses which offer the
        /// related ports but are not currently marked as ready because they
        /// have not yet finished starting, have recently failed a readiness
        /// check, or have recently failed a liveness check.</param>
        /// <param name="ports">Port numbers available on the related IP
        /// addresses.</param>
        public V1EndpointSubset(IList<V1EndpointAddress> addresses = default(IList<V1EndpointAddress>), IList<V1EndpointAddress> notReadyAddresses = default(IList<V1EndpointAddress>), IList<Corev1EndpointPort> ports = default(IList<Corev1EndpointPort>))
        {
            Addresses = addresses;
            NotReadyAddresses = notReadyAddresses;
            Ports = ports;
            CustomInit();
        }

        /// <summary>
        /// An initialization method that performs custom operations like setting defaults
        /// </summary>
        partial void CustomInit();

        /// <summary>
        /// Gets or sets IP addresses which offer the related ports that are
        /// marked as ready. These endpoints should be considered safe for load
        /// balancers and clients to utilize.
        /// </summary>
        [JsonProperty(PropertyName = "addresses")]
        public IList<V1EndpointAddress> Addresses { get; set; }

        /// <summary>
        /// Gets or sets IP addresses which offer the related ports but are not
        /// currently marked as ready because they have not yet finished
        /// starting, have recently failed a readiness check, or have recently
        /// failed a liveness check.
        /// </summary>
        [JsonProperty(PropertyName = "notReadyAddresses")]
        public IList<V1EndpointAddress> NotReadyAddresses { get; set; }

        /// <summary>
        /// Gets or sets port numbers available on the related IP addresses.
        /// </summary>
        [JsonProperty(PropertyName = "ports")]
        public IList<Corev1EndpointPort> Ports { get; set; }

    }
}
