---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.16.0
  name: multiclusterservices.networking.fleet.azure.com
spec:
  group: networking.fleet.azure.com
  names:
    categories:
    - fleet-networking
    kind: MultiClusterService
    listKind: MultiClusterServiceList
    plural: multiclusterservices
    shortNames:
    - mcs
    singular: multiclusterservice
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .spec.serviceImport.name
      name: Service-Import
      type: string
    - jsonPath: .status.loadBalancer.ingress[0].ip
      name: External-IP
      type: string
    - jsonPath: .status.conditions[?(@.type=='Valid')].status
      name: Is-Valid
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1alpha1
    schema:
      openAPIV3Schema:
        description: MultiClusterService is the Schema for creating north-south L4
          load balancer to consume services across clusters.
        properties:
          apiVersion:
            description: |-
              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
            type: string
          kind:
            description: |-
              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
            type: string
          metadata:
            type: object
          spec:
            description: MultiClusterServiceSpec defines the desired state of MultiClusterService.
            properties:
              serviceImport:
                description: ServiceImport is the reference to the Service with the
                  same name exported in the member clusters.
                properties:
                  name:
                    description: Name is the name of the referent.
                    maxLength: 63
                    pattern: ^([a-z]([-a-z0-9]*[a-z0-9])?)$
                    type: string
                required:
                - name
                type: object
            type: object
          status:
            description: MultiClusterServiceStatus represents the current status of
              a multi-cluster service.
            properties:
              conditions:
                description: Current service state
                items:
                  description: Condition contains details for one aspect of the current
                    state of this API Resource.
                  properties:
                    lastTransitionTime:
                      description: |-
                        lastTransitionTime is the last time the condition transitioned from one status to another.
                        This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: |-
                        message is a human readable message indicating details about the transition.
                        This may be an empty string.
                      maxLength: 32768
                      type: string
                    observedGeneration:
                      description: |-
                        observedGeneration represents the .metadata.generation that the condition was set based upon.
                        For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
                        with respect to the current state of the instance.
                      format: int64
                      minimum: 0
                      type: integer
                    reason:
                      description: |-
                        reason contains a programmatic identifier indicating the reason for the condition's last transition.
                        Producers of specific condition types may define expected values and meanings for this field,
                        and whether the values are considered a guaranteed API.
                        The value should be a CamelCase string.
                        This field may not be empty.
                      maxLength: 1024
                      minLength: 1
                      pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      enum:
                      - "True"
                      - "False"
                      - Unknown
                      type: string
                    type:
                      description: type of condition in CamelCase or in foo.example.com/CamelCase.
                      maxLength: 316
                      pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                      type: string
                  required:
                  - lastTransitionTime
                  - message
                  - reason
                  - status
                  - type
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - type
                x-kubernetes-list-type: map
              loadBalancer:
                description: |-
                  LoadBalancerStatus represents the status of a load-balancer.
                  if one is present.
                properties:
                  ingress:
                    description: |-
                      Ingress is a list containing ingress points for the load-balancer.
                      Traffic intended for the service should be sent to these ingress points.
                    items:
                      description: |-
                        LoadBalancerIngress represents the status of a load-balancer ingress point:
                        traffic intended for the service should be sent to an ingress point.
                      properties:
                        hostname:
                          description: |-
                            Hostname is set for load-balancer ingress points that are DNS based
                            (typically AWS load-balancers)
                          type: string
                        ip:
                          description: |-
                            IP is set for load-balancer ingress points that are IP based
                            (typically GCE or OpenStack load-balancers)
                          type: string
                        ipMode:
                          description: |-
                            IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified.
                            Setting this to "VIP" indicates that traffic is delivered to the node with
                            the destination set to the load-balancer's IP and port.
                            Setting this to "Proxy" indicates that traffic is delivered to the node or pod with
                            the destination set to the node's IP and node port or the pod's IP and port.
                            Service implementations may use this information to adjust traffic routing.
                          type: string
                        ports:
                          description: |-
                            Ports is a list of records of service ports
                            If used, every port defined in the service should have an entry in it
                          items:
                            properties:
                              error:
                                description: |-
                                  Error is to record the problem with the service port
                                  The format of the error shall comply with the following rules:
                                  - built-in error values shall be specified in this file and those shall use
                                    CamelCase names
                                  - cloud provider specific error values must have names that comply with the
                                    format foo.example.com/CamelCase.
                                maxLength: 316
                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                                type: string
                              port:
                                description: Port is the port number of the service
                                  port of which status is recorded here
                                format: int32
                                type: integer
                              protocol:
                                default: TCP
                                description: |-
                                  Protocol is the protocol of the service port of which status is recorded here
                                  The supported values are: "TCP", "UDP", "SCTP"
                                type: string
                            required:
                            - error
                            - port
                            - protocol
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                      type: object
                    type: array
                    x-kubernetes-list-type: atomic
                type: object
            type: object
        required:
        - spec
        type: object
        x-kubernetes-validations:
        - message: metadata.name max length is 63
          rule: size(self.metadata.name) < 64
    served: true
    storage: true
    subresources:
      status: {}
