# Copyright Contributors to the Open Cluster Management project

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  labels:
    operators.coreos.com/advanced-cluster-management.open-cluster-management: ""
  name: multiclusterhubs.operator.open-cluster-management.io
spec:
  conversion:
    strategy: None
  group: operator.open-cluster-management.io
  names:
    kind: MultiClusterHub
    listKind: MultiClusterHubList
    plural: multiclusterhubs
    shortNames:
    - mch
    singular: multiclusterhub
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: The overall status of the multiclusterhub
      jsonPath: .status.phase
      name: Status
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1
    schema:
      openAPIV3Schema:
        description: MultiClusterHub defines the configuration for an instance of the MultiCluster Hub
        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: MultiClusterHubSpec defines the desired state of MultiClusterHub
            properties:
              availabilityConfig:
                description: 'Specifies deployment replication for improved availability. Options are: Basic and High (default)'
                type: string
              customCAConfigmap:
                description: Provide the customized OpenShift default ingress CA certificate to RHACM
                type: string
              disableHubSelfManagement:
                description: Disable automatic import of the hub cluster as a managed cluster
                type: boolean
              disableUpdateClusterImageSets:
                description: Disable automatic update of ClusterImageSets
                type: boolean
              hive:
                description: (Deprecated) Overrides for the default HiveConfig spec
                properties:
                  additionalCertificateAuthorities:
                    description: (Deprecated) AdditionalCertificateAuthorities is a list of references to secrets in the 'hive' namespace that contain an additional Certificate Authority to use when communicating with target clusters. These certificate authorities will be used in addition to any self-signed CA generated by each cluster on installation.
                    items:
                      description: LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.
                      properties:
                        name:
                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
                          type: string
                      type: object
                    type: array
                  backup:
                    description: (Deprecated) Backup specifies configuration for backup integration. If absent, backup integration will be disabled.
                    properties:
                      minBackupPeriodSeconds:
                        description: (Deprecated) MinBackupPeriodSeconds specifies that a minimum of MinBackupPeriodSeconds will occur in between each backup. This is used to rate limit backups. This potentially batches together multiple changes into 1 backup. No backups will be lost as changes that happen during this interval are queued up and will result in a backup happening once the interval has been completed.
                        type: integer
                      velero:
                        description: (Deprecated) Velero specifies configuration for the Velero backup integration.
                        properties:
                          enabled:
                            description: (Deprecated) Enabled dictates if Velero backup integration is enabled. If not specified, the default is disabled.
                            type: boolean
                        type: object
                    type: object
                  externalDNS:
                    description: (Deprecated) ExternalDNS specifies configuration for external-dns if it is to be deployed by Hive. If absent, external-dns will not be deployed.
                    properties:
                      aws:
                        description: (Deprecated) AWS contains AWS-specific settings for external DNS
                        properties:
                          credentials:
                            description: (Deprecated) Credentials references a secret that will be used to authenticate with AWS Route53. It will need permission to manage entries in each of the managed domains for this cluster. Secret should have AWS keys named 'aws_access_key_id' and 'aws_secret_access_key'.
                            properties:
                              name:
                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
                                type: string
                            type: object
                        type: object
                      gcp:
                        description: (Deprecated) GCP contains GCP-specific settings for external DNS
                        properties:
                          credentials:
                            description: (Deprecated) Credentials references a secret that will be used to authenticate with GCP DNS. It will need permission to manage entries in each of the managed domains for this cluster. Secret should have a key names 'osServiceAccount.json'. The credentials must specify the project to use.
                            properties:
                              name:
                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
                                type: string
                            type: object
                        type: object
                    type: object
                  failedProvisionConfig:
                    description: (Deprecated) FailedProvisionConfig is used to configure settings related to handling provision failures.
                    properties:
                      skipGatherLogs:
                        description: (Deprecated) SkipGatherLogs disables functionality that attempts to gather full logs from the cluster if an installation fails for any reason. The logs will be stored in a persistent volume for up to 7 days.
                        type: boolean
                    type: object
                  globalPullSecret:
                    description: (Deprecated) GlobalPullSecret is used to specify a pull secret that will be used globally by all of the cluster deployments. For each cluster deployment, the contents of GlobalPullSecret will be merged with the specific pull secret for a cluster deployment(if specified), with precedence given to the contents of the pull secret for the cluster deployment.
                    properties:
                      name:
                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
                        type: string
                    type: object
                  maintenanceMode:
                    description: (Deprecated) MaintenanceMode can be set to true to disable the hive controllers in situations where we need to ensure nothing is running that will add or act upon finalizers on Hive types. This should rarely be needed. Sets replicas to 0 for the hive-controllers deployment to accomplish this.
                    type: boolean
                required:
                - failedProvisionConfig
                type: object
              imagePullSecret:
                description: Override pull secret for accessing MultiClusterHub operand and endpoint images
                type: string
              ingress:
                description: Configuration options for ingress management
                properties:
                  sslCiphers:
                    description: List of SSL ciphers enabled for management ingress. Defaults to full list of supported ciphers
                    items:
                      type: string
                    type: array
                type: object
              nodeSelector:
                additionalProperties:
                  type: string
                description: Set the nodeselectors
                type: object
              overrides:
                description: Developer Overrides
                properties:
                  imagePullPolicy:
                    description: Pull policy of the MultiCluster hub images
                    type: string
                type: object
              separateCertificateManagement:
                description: Install cert-manager into its own namespace
                type: boolean
            type: object
          status:
            description: MultiClusterHubStatus defines the observed state of MultiClusterHub
            properties:
              components:
                additionalProperties:
                  description: StatusCondition contains condition information.
                  properties:
                    lastTransitionTime:
                      description: LastTransitionTime is the last time the condition changed from one status to another.
                      format: date-time
                      type: string
                    message:
                      description: Message is a human-readable message indicating details about the last status change.
                      type: string
                    reason:
                      description: Reason is a (brief) reason for the condition's last status change.
                      type: string
                    status:
                      description: Status is the status of the condition. One of True, False, Unknown.
                      type: string
                    type:
                      description: Type is the type of the cluster condition.
                      type: string
                  type: object
                description: Components []ComponentCondition `json:"manifests,omitempty"`
                type: object
              conditions:
                description: Conditions contains the different condition statuses for the MultiClusterHub
                items:
                  description: StatusCondition contains condition information.
                  properties:
                    lastTransitionTime:
                      description: LastTransitionTime is the last time the condition changed from one status to another.
                      format: date-time
                      type: string
                    lastUpdateTime:
                      description: The last time this condition was updated.
                      format: date-time
                      type: string
                    message:
                      description: Message is a human-readable message indicating details about the last status change.
                      type: string
                    reason:
                      description: Reason is a (brief) reason for the condition's last status change.
                      type: string
                    status:
                      description: Status is the status of the condition. One of True, False, Unknown.
                      type: string
                    type:
                      description: Type is the type of the cluster condition.
                      type: string
                  type: object
                type: array
              currentVersion:
                description: CurrentVersion indicates the current version
                type: string
              desiredVersion:
                description: DesiredVersion indicates the desired version
                type: string
              phase:
                description: Represents the running phase of the MultiClusterHub
                type: string
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
