# Custom Resource Definition (CRD) for OSM's multicluster config specification.
#
# Copyright Open Service Mesh authors.
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#        http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: multiclusterservices.config.openservicemesh.io
spec:
  group: config.openservicemesh.io
  scope: Namespaced # osm-system is the required namespace
  names:
    kind: MultiClusterService
    shortNames:
      - mcs
    plural: multiclusterservices
    singular: multiclusterservice
  versions:
    - name: v1alpha1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              required:
                - serviceAccount
                - clusters
              properties:
                serviceAccount:
                  type: string
                clusters:
                  description: The clusters the service accounts are hosted on.
                  type: array
                  items:
                    type: object
                    required:
                      - address
                      - name
                    properties:
                      address:
                        description: a routable IP + port
                        type: string
                      name:
                        description: Name of the remote cluster
                        type: string
                      certificate:
                        description: mTLS certificates (optional)
                        type: string
