---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
    gateway.networking.k8s.io/bundle-version: v1.2.1
    gateway.networking.k8s.io/channel: standard
  creationTimestamp: null
  name: grpcroutes.gateway.networking.k8s.io
spec:
  group: gateway.networking.k8s.io
  names:
    categories:
      - gateway-api
    kind: GRPCRoute
    listKind: GRPCRouteList
    plural: grpcroutes
    singular: grpcroute
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .spec.hostnames
          name: Hostnames
          type: string
        - jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
      name: v1
      schema:
        openAPIV3Schema:
          properties:
            apiVersion:
              type: string
            kind:
              type: string
            metadata:
              type: object
            spec:
              properties:
                hostnames:
                  items:
                    maxLength: 253
                    minLength: 1
                    pattern: ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                    type: string
                  maxItems: 16
                  type: array
                parentRefs:
                  items:
                    properties:
                      group:
                        default: gateway.networking.k8s.io
                        maxLength: 253
                        pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                        type: string
                      kind:
                        default: Gateway
                        maxLength: 63
                        minLength: 1
                        pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
                        type: string
                      name:
                        maxLength: 253
                        minLength: 1
                        type: string
                      namespace:
                        maxLength: 63
                        minLength: 1
                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
                        type: string
                      port:
                        format: int32
                        maximum: 65535
                        minimum: 1
                        type: integer
                      sectionName:
                        maxLength: 253
                        minLength: 1
                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                        type: string
                    required:
                      - name
                    type: object
                  maxItems: 32
                  type: array
                  x-kubernetes-validations:
                    - message: sectionName must be specified when parentRefs includes 2 or more references to the same parent
                      rule: 'self.all(p1, self.all(p2, p1.group == p2.group && p1.kind == p2.kind && p1.name == p2.name && (((!has(p1.__namespace__) || p1.__namespace__ == '''') && (!has(p2.__namespace__) || p2.__namespace__ == '''')) || (has(p1.__namespace__) && has(p2.__namespace__) && p1.__namespace__ == p2.__namespace__ )) ? ((!has(p1.sectionName) || p1.sectionName == '''') == (!has(p2.sectionName) || p2.sectionName == '''')) : true))'
                    - message: sectionName must be unique when parentRefs includes 2 or more references to the same parent
                      rule: self.all(p1, self.exists_one(p2, p1.group == p2.group && p1.kind == p2.kind && p1.name == p2.name && (((!has(p1.__namespace__) || p1.__namespace__ == '') && (!has(p2.__namespace__) || p2.__namespace__ == '')) || (has(p1.__namespace__) && has(p2.__namespace__) && p1.__namespace__ == p2.__namespace__ )) && (((!has(p1.sectionName) || p1.sectionName == '') && (!has(p2.sectionName) || p2.sectionName == '')) || (has(p1.sectionName) && has(p2.sectionName) && p1.sectionName == p2.sectionName))))
                rules:
                  items:
                    properties:
                      backendRefs:
                        items:
                          properties:
                            filters:
                              items:
                                properties:
                                  extensionRef:
                                    properties:
                                      group:
                                        maxLength: 253
                                        pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                        type: string
                                      kind:
                                        maxLength: 63
                                        minLength: 1
                                        pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
                                        type: string
                                      name:
                                        maxLength: 253
                                        minLength: 1
                                        type: string
                                    required:
                                      - group
                                      - kind
                                      - name
                                    type: object
                                  requestHeaderModifier:
                                    properties:
                                      add:
                                        items:
                                          properties:
                                            name:
                                              maxLength: 256
                                              minLength: 1
                                              pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                              type: string
                                            value:
                                              maxLength: 4096
                                              minLength: 1
                                              type: string
                                          required:
                                            - name
                                            - value
                                          type: object
                                        maxItems: 16
                                        type: array
                                        x-kubernetes-list-map-keys:
                                          - name
                                        x-kubernetes-list-type: map
                                      remove:
                                        items:
                                          type: string
                                        maxItems: 16
                                        type: array
                                        x-kubernetes-list-type: set
                                      set:
                                        items:
                                          properties:
                                            name:
                                              maxLength: 256
                                              minLength: 1
                                              pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                              type: string
                                            value:
                                              maxLength: 4096
                                              minLength: 1
                                              type: string
                                          required:
                                            - name
                                            - value
                                          type: object
                                        maxItems: 16
                                        type: array
                                        x-kubernetes-list-map-keys:
                                          - name
                                        x-kubernetes-list-type: map
                                    type: object
                                  requestMirror:
                                    properties:
                                      backendRef:
                                        properties:
                                          group:
                                            default: ""
                                            maxLength: 253
                                            pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                            type: string
                                          kind:
                                            default: Service
                                            maxLength: 63
                                            minLength: 1
                                            pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
                                            type: string
                                          name:
                                            maxLength: 253
                                            minLength: 1
                                            type: string
                                          namespace:
                                            maxLength: 63
                                            minLength: 1
                                            pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
                                            type: string
                                          port:
                                            format: int32
                                            maximum: 65535
                                            minimum: 1
                                            type: integer
                                        required:
                                          - name
                                        type: object
                                        x-kubernetes-validations:
                                          - message: Must have port for Service reference
                                            rule: '(size(self.group) == 0 && self.kind == ''Service'') ? has(self.port) : true'
                                    required:
                                      - backendRef
                                    type: object
                                  responseHeaderModifier:
                                    properties:
                                      add:
                                        items:
                                          properties:
                                            name:
                                              maxLength: 256
                                              minLength: 1
                                              pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                              type: string
                                            value:
                                              maxLength: 4096
                                              minLength: 1
                                              type: string
                                          required:
                                            - name
                                            - value
                                          type: object
                                        maxItems: 16
                                        type: array
                                        x-kubernetes-list-map-keys:
                                          - name
                                        x-kubernetes-list-type: map
                                      remove:
                                        items:
                                          type: string
                                        maxItems: 16
                                        type: array
                                        x-kubernetes-list-type: set
                                      set:
                                        items:
                                          properties:
                                            name:
                                              maxLength: 256
                                              minLength: 1
                                              pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                              type: string
                                            value:
                                              maxLength: 4096
                                              minLength: 1
                                              type: string
                                          required:
                                            - name
                                            - value
                                          type: object
                                        maxItems: 16
                                        type: array
                                        x-kubernetes-list-map-keys:
                                          - name
                                        x-kubernetes-list-type: map
                                    type: object
                                  type:
                                    enum:
                                      - ResponseHeaderModifier
                                      - RequestHeaderModifier
                                      - RequestMirror
                                      - ExtensionRef
                                    type: string
                                required:
                                  - type
                                type: object
                                x-kubernetes-validations:
                                  - message: filter.requestHeaderModifier must be nil if the filter.type is not RequestHeaderModifier
                                    rule: '!(has(self.requestHeaderModifier) && self.type != ''RequestHeaderModifier'')'
                                  - message: filter.requestHeaderModifier must be specified for RequestHeaderModifier filter.type
                                    rule: '!(!has(self.requestHeaderModifier) && self.type == ''RequestHeaderModifier'')'
                                  - message: filter.responseHeaderModifier must be nil if the filter.type is not ResponseHeaderModifier
                                    rule: '!(has(self.responseHeaderModifier) && self.type != ''ResponseHeaderModifier'')'
                                  - message: filter.responseHeaderModifier must be specified for ResponseHeaderModifier filter.type
                                    rule: '!(!has(self.responseHeaderModifier) && self.type == ''ResponseHeaderModifier'')'
                                  - message: filter.requestMirror must be nil if the filter.type is not RequestMirror
                                    rule: '!(has(self.requestMirror) && self.type != ''RequestMirror'')'
                                  - message: filter.requestMirror must be specified for RequestMirror filter.type
                                    rule: '!(!has(self.requestMirror) && self.type == ''RequestMirror'')'
                                  - message: filter.extensionRef must be nil if the filter.type is not ExtensionRef
                                    rule: '!(has(self.extensionRef) && self.type != ''ExtensionRef'')'
                                  - message: filter.extensionRef must be specified for ExtensionRef filter.type
                                    rule: '!(!has(self.extensionRef) && self.type == ''ExtensionRef'')'
                              maxItems: 16
                              type: array
                              x-kubernetes-validations:
                                - message: RequestHeaderModifier filter cannot be repeated
                                  rule: self.filter(f, f.type == 'RequestHeaderModifier').size() <= 1
                                - message: ResponseHeaderModifier filter cannot be repeated
                                  rule: self.filter(f, f.type == 'ResponseHeaderModifier').size() <= 1
                            group:
                              default: ""
                              maxLength: 253
                              pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                              type: string
                            kind:
                              default: Service
                              maxLength: 63
                              minLength: 1
                              pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
                              type: string
                            name:
                              maxLength: 253
                              minLength: 1
                              type: string
                            namespace:
                              maxLength: 63
                              minLength: 1
                              pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
                              type: string
                            port:
                              format: int32
                              maximum: 65535
                              minimum: 1
                              type: integer
                            weight:
                              default: 1
                              format: int32
                              maximum: 1000000
                              minimum: 0
                              type: integer
                          required:
                            - name
                          type: object
                          x-kubernetes-validations:
                            - message: Must have port for Service reference
                              rule: '(size(self.group) == 0 && self.kind == ''Service'') ? has(self.port) : true'
                        maxItems: 16
                        type: array
                      filters:
                        items:
                          properties:
                            extensionRef:
                              properties:
                                group:
                                  maxLength: 253
                                  pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                  type: string
                                kind:
                                  maxLength: 63
                                  minLength: 1
                                  pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
                                  type: string
                                name:
                                  maxLength: 253
                                  minLength: 1
                                  type: string
                              required:
                                - group
                                - kind
                                - name
                              type: object
                            requestHeaderModifier:
                              properties:
                                add:
                                  items:
                                    properties:
                                      name:
                                        maxLength: 256
                                        minLength: 1
                                        pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                        type: string
                                      value:
                                        maxLength: 4096
                                        minLength: 1
                                        type: string
                                    required:
                                      - name
                                      - value
                                    type: object
                                  maxItems: 16
                                  type: array
                                  x-kubernetes-list-map-keys:
                                    - name
                                  x-kubernetes-list-type: map
                                remove:
                                  items:
                                    type: string
                                  maxItems: 16
                                  type: array
                                  x-kubernetes-list-type: set
                                set:
                                  items:
                                    properties:
                                      name:
                                        maxLength: 256
                                        minLength: 1
                                        pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                        type: string
                                      value:
                                        maxLength: 4096
                                        minLength: 1
                                        type: string
                                    required:
                                      - name
                                      - value
                                    type: object
                                  maxItems: 16
                                  type: array
                                  x-kubernetes-list-map-keys:
                                    - name
                                  x-kubernetes-list-type: map
                              type: object
                            requestMirror:
                              properties:
                                backendRef:
                                  properties:
                                    group:
                                      default: ""
                                      maxLength: 253
                                      pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                      type: string
                                    kind:
                                      default: Service
                                      maxLength: 63
                                      minLength: 1
                                      pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
                                      type: string
                                    name:
                                      maxLength: 253
                                      minLength: 1
                                      type: string
                                    namespace:
                                      maxLength: 63
                                      minLength: 1
                                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
                                      type: string
                                    port:
                                      format: int32
                                      maximum: 65535
                                      minimum: 1
                                      type: integer
                                  required:
                                    - name
                                  type: object
                                  x-kubernetes-validations:
                                    - message: Must have port for Service reference
                                      rule: '(size(self.group) == 0 && self.kind == ''Service'') ? has(self.port) : true'
                              required:
                                - backendRef
                              type: object
                            responseHeaderModifier:
                              properties:
                                add:
                                  items:
                                    properties:
                                      name:
                                        maxLength: 256
                                        minLength: 1
                                        pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                        type: string
                                      value:
                                        maxLength: 4096
                                        minLength: 1
                                        type: string
                                    required:
                                      - name
                                      - value
                                    type: object
                                  maxItems: 16
                                  type: array
                                  x-kubernetes-list-map-keys:
                                    - name
                                  x-kubernetes-list-type: map
                                remove:
                                  items:
                                    type: string
                                  maxItems: 16
                                  type: array
                                  x-kubernetes-list-type: set
                                set:
                                  items:
                                    properties:
                                      name:
                                        maxLength: 256
                                        minLength: 1
                                        pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                        type: string
                                      value:
                                        maxLength: 4096
                                        minLength: 1
                                        type: string
                                    required:
                                      - name
                                      - value
                                    type: object
                                  maxItems: 16
                                  type: array
                                  x-kubernetes-list-map-keys:
                                    - name
                                  x-kubernetes-list-type: map
                              type: object
                            type:
                              enum:
                                - ResponseHeaderModifier
                                - RequestHeaderModifier
                                - RequestMirror
                                - ExtensionRef
                              type: string
                          required:
                            - type
                          type: object
                          x-kubernetes-validations:
                            - message: filter.requestHeaderModifier must be nil if the filter.type is not RequestHeaderModifier
                              rule: '!(has(self.requestHeaderModifier) && self.type != ''RequestHeaderModifier'')'
                            - message: filter.requestHeaderModifier must be specified for RequestHeaderModifier filter.type
                              rule: '!(!has(self.requestHeaderModifier) && self.type == ''RequestHeaderModifier'')'
                            - message: filter.responseHeaderModifier must be nil if the filter.type is not ResponseHeaderModifier
                              rule: '!(has(self.responseHeaderModifier) && self.type != ''ResponseHeaderModifier'')'
                            - message: filter.responseHeaderModifier must be specified for ResponseHeaderModifier filter.type
                              rule: '!(!has(self.responseHeaderModifier) && self.type == ''ResponseHeaderModifier'')'
                            - message: filter.requestMirror must be nil if the filter.type is not RequestMirror
                              rule: '!(has(self.requestMirror) && self.type != ''RequestMirror'')'
                            - message: filter.requestMirror must be specified for RequestMirror filter.type
                              rule: '!(!has(self.requestMirror) && self.type == ''RequestMirror'')'
                            - message: filter.extensionRef must be nil if the filter.type is not ExtensionRef
                              rule: '!(has(self.extensionRef) && self.type != ''ExtensionRef'')'
                            - message: filter.extensionRef must be specified for ExtensionRef filter.type
                              rule: '!(!has(self.extensionRef) && self.type == ''ExtensionRef'')'
                        maxItems: 16
                        type: array
                        x-kubernetes-validations:
                          - message: RequestHeaderModifier filter cannot be repeated
                            rule: self.filter(f, f.type == 'RequestHeaderModifier').size() <= 1
                          - message: ResponseHeaderModifier filter cannot be repeated
                            rule: self.filter(f, f.type == 'ResponseHeaderModifier').size() <= 1
                      matches:
                        items:
                          properties:
                            headers:
                              items:
                                properties:
                                  name:
                                    maxLength: 256
                                    minLength: 1
                                    pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                                    type: string
                                  type:
                                    default: Exact
                                    enum:
                                      - Exact
                                      - RegularExpression
                                    type: string
                                  value:
                                    maxLength: 4096
                                    minLength: 1
                                    type: string
                                required:
                                  - name
                                  - value
                                type: object
                              maxItems: 16
                              type: array
                              x-kubernetes-list-map-keys:
                                - name
                              x-kubernetes-list-type: map
                            method:
                              properties:
                                method:
                                  maxLength: 1024
                                  type: string
                                service:
                                  maxLength: 1024
                                  type: string
                                type:
                                  default: Exact
                                  enum:
                                    - Exact
                                    - RegularExpression
                                  type: string
                              type: object
                              x-kubernetes-validations:
                                - message: One or both of 'service' or 'method' must be specified
                                  rule: 'has(self.type) ? has(self.service) || has(self.method) : true'
                                - message: service must only contain valid characters (matching ^(?i)\.?[a-z_][a-z_0-9]*(\.[a-z_][a-z_0-9]*)*$)
                                  rule: '(!has(self.type) || self.type == ''Exact'') && has(self.service) ? self.service.matches(r"""^(?i)\.?[a-z_][a-z_0-9]*(\.[a-z_][a-z_0-9]*)*$"""): true'
                                - message: method must only contain valid characters (matching ^[A-Za-z_][A-Za-z_0-9]*$)
                                  rule: '(!has(self.type) || self.type == ''Exact'') && has(self.method) ? self.method.matches(r"""^[A-Za-z_][A-Za-z_0-9]*$"""): true'
                          type: object
                        maxItems: 8
                        type: array
                    type: object
                  maxItems: 16
                  type: array
                  x-kubernetes-validations:
                    - message: While 16 rules and 64 matches per rule are allowed, the total number of matches across all rules in a route must be less than 128
                      rule: '(self.size() > 0 ? (has(self[0].matches) ? self[0].matches.size() : 0) : 0) + (self.size() > 1 ? (has(self[1].matches) ? self[1].matches.size() : 0) : 0) + (self.size() > 2 ? (has(self[2].matches) ? self[2].matches.size() : 0) : 0) + (self.size() > 3 ? (has(self[3].matches) ? self[3].matches.size() : 0) : 0) + (self.size() > 4 ? (has(self[4].matches) ? self[4].matches.size() : 0) : 0) + (self.size() > 5 ? (has(self[5].matches) ? self[5].matches.size() : 0) : 0) + (self.size() > 6 ? (has(self[6].matches) ? self[6].matches.size() : 0) : 0) + (self.size() > 7 ? (has(self[7].matches) ? self[7].matches.size() : 0) : 0) + (self.size() > 8 ? (has(self[8].matches) ? self[8].matches.size() : 0) : 0) + (self.size() > 9 ? (has(self[9].matches) ? self[9].matches.size() : 0) : 0) + (self.size() > 10 ? (has(self[10].matches) ? self[10].matches.size() : 0) : 0) + (self.size() > 11 ? (has(self[11].matches) ? self[11].matches.size() : 0) : 0) + (self.size() > 12 ? (has(self[12].matches) ? self[12].matches.size() : 0) : 0) + (self.size() > 13 ? (has(self[13].matches) ? self[13].matches.size() : 0) : 0) + (self.size() > 14 ? (has(self[14].matches) ? self[14].matches.size() : 0) : 0) + (self.size() > 15 ? (has(self[15].matches) ? self[15].matches.size() : 0) : 0) <= 128'
              type: object
            status:
              properties:
                parents:
                  items:
                    properties:
                      conditions:
                        items:
                          properties:
                            lastTransitionTime:
                              format: date-time
                              type: string
                            message:
                              maxLength: 32768
                              type: string
                            observedGeneration:
                              format: int64
                              minimum: 0
                              type: integer
                            reason:
                              maxLength: 1024
                              minLength: 1
                              pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                              type: string
                            status:
                              enum:
                                - "True"
                                - "False"
                                - Unknown
                              type: string
                            type:
                              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
                        maxItems: 8
                        minItems: 1
                        type: array
                        x-kubernetes-list-map-keys:
                          - type
                        x-kubernetes-list-type: map
                      controllerName:
                        maxLength: 253
                        minLength: 1
                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
                        type: string
                      parentRef:
                        properties:
                          group:
                            default: gateway.networking.k8s.io
                            maxLength: 253
                            pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                            type: string
                          kind:
                            default: Gateway
                            maxLength: 63
                            minLength: 1
                            pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
                            type: string
                          name:
                            maxLength: 253
                            minLength: 1
                            type: string
                          namespace:
                            maxLength: 63
                            minLength: 1
                            pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
                            type: string
                          port:
                            format: int32
                            maximum: 65535
                            minimum: 1
                            type: integer
                          sectionName:
                            maxLength: 253
                            minLength: 1
                            pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                            type: string
                        required:
                          - name
                        type: object
                    required:
                      - controllerName
                      - parentRef
                    type: object
                  maxItems: 32
                  type: array
              required:
                - parents
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: null
  storedVersions: null
