# autogenerated module
from typing import List, Optional

from ._schema import dataclass, field, DictMixin

from . import core_v1
from . import meta_v1


@dataclass
class Endpoint(DictMixin):
    """Endpoint represents a single logical "backend" implementing a service.

      **parameters**

      * **addresses** ``List[str]`` - addresses of this endpoint. The contents of this field are interpreted
        according to the corresponding EndpointSlice addressType field. This allows
        for cases like dual-stack (IPv4 and IPv6) networking. Consumers (e.g.
        kube-proxy) must handle different types of addresses in the context of their
        own capabilities. This must contain at least one address but no more than 100.
      * **conditions** ``Optional[EndpointConditions]`` - conditions contains information about the current status of the endpoint.
      * **hostname** ``Optional[str]`` - hostname of this endpoint. This field may be used by consumers of endpoints to
        distinguish endpoints from each other (e.g. in DNS names). Multiple endpoints
        which use the same hostname should be considered fungible (e.g. multiple A
        values in DNS). Must pass DNS Label (RFC 1123) validation.
      * **targetRef** ``Optional[core_v1.ObjectReference]`` - targetRef is a reference to a Kubernetes object that represents this endpoint.
      * **topology** ``Optional[dict]`` - topology contains arbitrary topology information associated with the endpoint.
        These key/value pairs must conform with the label format.
        https://kubernetes.io/docs/concepts/overview/working-with-objects/labels
        Topology may include a maximum of 16 key/value pairs. This includes, but is
        not limited to the following well known keys: * kubernetes.io/hostname: the
        value indicates the hostname of the node
          where the endpoint is located. This should match the corresponding
          node label.
        * topology.kubernetes.io/zone: the value indicates the zone where the
          endpoint is located. This should match the corresponding node label.
        * topology.kubernetes.io/region: the value indicates the region where the
          endpoint is located. This should match the corresponding node label.
    """
    addresses: 'List[str]'
    conditions: 'Optional[EndpointConditions]' = None
    hostname: 'Optional[str]' = None
    targetRef: 'Optional[core_v1.ObjectReference]' = None
    topology: 'Optional[dict]' = None


@dataclass
class EndpointConditions(DictMixin):
    """EndpointConditions represents the current condition of an endpoint.

      **parameters**

      * **ready** ``Optional[bool]`` - ready indicates that this endpoint is prepared to receive traffic, according
        to whatever system is managing the endpoint. A nil value indicates an unknown
        state. In most cases consumers should interpret this unknown state as ready.
    """
    ready: 'Optional[bool]' = None


@dataclass
class EndpointPort(DictMixin):
    """EndpointPort represents a Port used by an EndpointSlice

      **parameters**

      * **name** ``Optional[str]`` - The name of this port. All ports in an EndpointSlice must have a unique name.
        If the EndpointSlice is dervied from a Kubernetes service, this corresponds to
        the Service.ports[].name. Name must either be an empty string or pass
        IANA_SVC_NAME validation: * must be no more than 15 characters long * may
        contain only [-a-z0-9] * must contain at least one letter [a-z] * it must not
        start or end with a hyphen, nor contain adjacent hyphens Default is empty
        string.
      * **port** ``Optional[int]`` - The port number of the endpoint. If this is not specified, ports are not
        restricted and must be interpreted in the context of the specific consumer.
      * **protocol** ``Optional[str]`` - The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.
    """
    name: 'Optional[str]' = None
    port: 'Optional[int]' = None
    protocol: 'Optional[str]' = None


@dataclass
class EndpointSlice(DictMixin):
    """EndpointSlice represents a subset of the endpoints that implement a service.
      For a given service there may be multiple EndpointSlice objects, selected by
      labels, which must be joined to produce the full set of endpoints.

      **parameters**

      * **endpoints** ``List[Endpoint]`` - endpoints is a list of unique endpoints in this slice. Each slice may include
        a maximum of 1000 endpoints.
      * **addressType** ``Optional[str]`` - addressType specifies the type of address carried by this EndpointSlice. All
        addresses in this slice must be the same type. Default is IP
      * **apiVersion** ``Optional[str]`` - APIVersion defines the versioned schema of this representation of an object.
        Servers should convert recognized schemas to the latest internal value, and
        may reject unrecognized values. More info:
        https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
      * **kind** ``Optional[str]`` - Kind is a string value representing the REST resource this object represents.
        Servers may infer this from the endpoint the client submits requests to.
        Cannot be updated. In CamelCase. More info:
        https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
      * **metadata** ``Optional[meta_v1.ObjectMeta]`` - Standard object's metadata.
      * **ports** ``Optional[List[EndpointPort]]`` - ports specifies the list of network ports exposed by each endpoint in this
        slice. Each port must have a unique name. When ports is empty, it indicates
        that there are no defined ports. When a port is defined with a nil port value,
        it indicates "all ports". Each slice may include a maximum of 100 ports.
    """
    endpoints: 'List[Endpoint]'
    addressType: 'Optional[str]' = None
    apiVersion: 'Optional[str]' = None
    kind: 'Optional[str]' = None
    metadata: 'Optional[meta_v1.ObjectMeta]' = None
    ports: 'Optional[List[EndpointPort]]' = None


@dataclass
class EndpointSliceList(DictMixin):
    """EndpointSliceList represents a list of endpoint slices

      **parameters**

      * **items** ``List[EndpointSlice]`` - List of endpoint slices
      * **apiVersion** ``Optional[str]`` - APIVersion defines the versioned schema of this representation of an object.
        Servers should convert recognized schemas to the latest internal value, and
        may reject unrecognized values. More info:
        https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
      * **kind** ``Optional[str]`` - Kind is a string value representing the REST resource this object represents.
        Servers may infer this from the endpoint the client submits requests to.
        Cannot be updated. In CamelCase. More info:
        https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
      * **metadata** ``Optional[meta_v1.ListMeta]`` - Standard list metadata.
    """
    items: 'List[EndpointSlice]'
    apiVersion: 'Optional[str]' = None
    kind: 'Optional[str]' = None
    metadata: 'Optional[meta_v1.ListMeta]' = None


