apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: submarinerconfigs.submarineraddon.open-cluster-management.io
spec:
  group: submarineraddon.open-cluster-management.io
  names:
    kind: SubmarinerConfig
    listKind: SubmarinerConfigList
    plural: submarinerconfigs
    singular: submarinerconfig
  scope: Namespaced
  subresources:
    status: {}
  preserveUnknownFields: false
  validation:
    openAPIV3Schema:
      description: SubmarinerConfig represents the configuration for Submariner, the
        submariner-addon will use it to configure the Submariner.
      type: object
      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: Spec defines the configuration of the Submariner
          type: object
          properties:
            IPSecIKEPort:
              description: IPSecIKEPort represents IPsec IKE port (default 500).
              type: integer
            IPSecNATTPort:
              description: IPSecNATTPort represents IPsec NAT-T port (default 4500).
              type: integer
            cableDriver:
              description: CableDriver represents the submariner cable driver implementation.
                Available options are libreswan (default) strongswan, and wireguard.
              type: string
            credentialsSecret:
              description: CredentialsSecret is a reference to the secret with a certain
                cloud platform credentials, the supported platform includes AWS, GCP,
                Azure, ROKS and OSD. The submariner-addon will use these credentials
                to prepare Submariner cluster environment. If the submariner cluster
                environment requires submariner-addon preparation, this field should
                be specified.
              type: object
              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
            imagePullSpecs:
              description: ImagePullSpecs represents the desired images of submariner
                components installed on the managed cluster. If not specified, the
                default submariner images that was defined by submariner operator
                will be used.
              type: object
              properties:
                lighthouseAgentImagePullSpec:
                  description: LighthouseAgentImagePullSpec represents the desired
                    image of the lighthouse agent.
                  type: string
                lighthouseCoreDNSImagePullSpec:
                  description: LighthouseCoreDNSImagePullSpec represents the desired
                    image of lighthouse coredns.
                  type: string
                submarinerImagePullSpec:
                  description: SubmarinerImagePullSpec represents the desired image
                    of submariner.
                  type: string
                submarinerRouteAgentImagePullSpec:
                  description: SubmarinerRouteAgentImagePullSpec represents the desired
                    image of the submariner route agent.
                  type: string
            subscriptionConfig:
              description: SubscriptionConfig represents a Submariner subscription.
                SubscriptionConfig can be used to customize the Submariner subscription.
              type: object
              properties:
                channel:
                  description: Channel represents the channel of a submariner subscription.
                    The default value is alpha
                  type: string
                source:
                  description: Source represents the catalog source of a submariner
                    subscription. The default value is redhat-operators
                  type: string
                sourceNamespace:
                  description: SourceNamespace represents the catalog source namespace
                    of a submariner subscription. The default value is openshift-marketplace
                  type: string
                startingCSV:
                  description: StartingCSV represents the startingCSV of a submariner
                    subscription. The default value is submariner.v0.8
                  type: string
        status:
          description: Status represents the current status of submariner configuration
          type: object
          properties:
            conditions:
              description: Conditions contain the different condition statuses for
                this configuration.
              type: array
              items:
                description: "Condition contains details for one aspect of the current
                  state of this API Resource. --- This struct is intended for direct
                  use as an array at the field path .status.conditions.  For example,
                  type FooStatus struct{     // Represents the observations of a foo's
                  current state.     // Known .status.conditions.type are: \"Available\",
                  \"Progressing\", and \"Degraded\"     // +patchMergeKey=type     //
                  +patchStrategy=merge     // +listType=map     // +listMapKey=type
                  \    Conditions []metav1.Condition `json:\"conditions,omitempty\"
                  patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`
                  \n     // other fields }"
                type: object
                required:
                - lastTransitionTime
                - message
                - reason
                - status
                - type
                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.
                    type: string
                    format: date-time
                  message:
                    description: message is a human readable message indicating details
                      about the transition. This may be an empty string.
                    type: string
                    maxLength: 32768
                  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.
                    type: integer
                    format: int64
                    minimum: 0
                  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.
                    type: string
                    maxLength: 1024
                    minLength: 1
                    pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                  status:
                    description: status of the condition, one of True, False, Unknown.
                    type: string
                    enum:
                    - "True"
                    - "False"
                    - Unknown
                  type:
                    description: type of condition in CamelCase or in foo.example.com/CamelCase.
                      --- Many .condition.type values are consistent across resources
                      like Available, but because arbitrary conditions can be useful
                      (see .node.status.conditions), the ability to deconflict is
                      important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
                    type: string
                    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])$
            managedClusterInfo:
              description: ManagedClusterInfo represents the information of a managed
                cluster.
              type: object
              properties:
                clusterName:
                  description: ClusterName represents the name of the managed cluster.
                  type: string
                infraId:
                  description: InfraId represents the infrastructure id of the managed
                    cluster.
                  type: string
                platform:
                  description: Platform represents the cloud provider of the managed
                    cluster.
                  type: string
                region:
                  description: Region represents the cloud region of the managed cluster.
                  type: string
                vendor:
                  description: Vendor represents the kubernetes vendor of the managed
                    cluster.
                  type: string
  version: v1alpha1
  versions:
  - name: v1alpha1
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
