apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: backups.postgresql.dev4devs.com
spec:
  group: postgresql.dev4devs.com
  names:
    kind: Backup
    listKind: BackupList
    plural: backups
    singular: backup
  scope: Namespaced
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        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: BackupSpec defines the desired state of Backup
            properties:
              awsAccessKeyId:
                description: 'Key ID of AWS S3 storage. Default Value: nil Required
                  to create the Secret with the data to allow send the backup files
                  to AWS S3 storage.'
                type: string
              awsS3BucketName:
                description: 'Name of AWS S3 storage. Default Value: nil Required
                  to create the Secret with the AWS data to allow send the backup
                  files to AWS S3 storage.'
                type: string
              awsSecretAccessKey:
                description: 'Secret/Token of AWS S3 storage. Default Value: nil Required
                  to create the Secret with the data to allow send the backup files
                  to AWS S3 storage.'
                type: string
              awsSecretName:
                description: 'Name of the secret with the AWS data credentials pre-existing
                  in the cluster Default Value: nil See here the template: https://github.com/integr8ly/backup-container-image/blob/master/templates/openshift/sample-config/s3-secret.yaml'
                type: string
              awsSecretNamespace:
                description: 'Namespace of the secret with the AWS data credentials
                  pre-existing in the cluster Default Value: nil NOTE: If the namespace
                  be not informed then the operator will try to find it in the same
                  namespace where it is applied'
                type: string
              databaseCRName:
                description: 'Name of the Database CR applied which this backup will
                  work with Default Value: "database"'
                type: string
              databaseVersion:
                description: 'Database version. (E.g 9.6). Default Value: <9.6> IMPORTANT:
                  Just the first 2 digits should be used.'
                type: string
              encryptKeySecretName:
                description: 'Name of the secret with the Encrypt data pre-existing
                  in the cluster Default Value: nil See here the template: https://github.com/integr8ly/backup-container-image/blob/master/templates/openshift/sample-config/gpg-secret.yaml'
                type: string
              encryptKeySecretNamespace:
                description: 'Namespace of the secret with the Encrypt data pre-existing
                  in the cluster Default Value: nil NOTE: If the namespace be not
                  informed then the operator will try to find it in the same namespace
                  where it is applied'
                type: string
              gpgEmail:
                description: 'GPG email to create the EncryptionKeySecret with this
                  data Default Value: nil See here how to create this key : https://help.github.com/en/articles/generating-a-new-gpg-key'
                type: string
              gpgPublicKey:
                description: 'GPG public key to create the EncryptionKeySecret with
                  this data Default Value: nil See here how to create this key : https://help.github.com/en/articles/generating-a-new-gpg-key'
                type: string
              gpgTrustModel:
                description: 'GPG trust model to create the EncryptionKeySecret with
                  this data. the default value is true when it is empty. Default Value:
                  nil See here how to create this key : https://help.github.com/en/articles/generating-a-new-gpg-key'
                type: string
              image:
                description: 'Image:tag used to do the backup. Default Value: <quay.io/integreatly/backup-container:1.0.8>
                  More Info: https://github.com/integr8ly/backup-container-image'
                type: string
              productName:
                description: 'Used to create the directory where the files will be
                  stored Default Value: <postgresql>'
                type: string
              schedule:
                description: 'Schedule period for the CronJob. Default Value: <0 0
                  * * *> daily at 00:00'
                type: string
            type: object
          status:
            description: BackupStatus defines the observed state of Backup
            properties:
              awsCredentialsSecretNamespace:
                description: Namespace  of the secret object with the Aws data to
                  allow send the backup files to the AWS storage
                type: string
              awsSecretName:
                description: Name  of the secret object with the Aws data to allow
                  send the backup files to the AWS storage
                type: string
              backupStatus:
                description: Will be as "OK when all objects are created successfully
                type: string
              cronJobName:
                description: Name of the CronJob object created and managed by it
                  to schedule the backup job
                type: string
              cronJobStatus:
                description: Status of the CronJob object
                properties:
                  active:
                    description: A list of pointers to currently running jobs.
                    items:
                      description: 'ObjectReference contains enough information to
                        let you inspect or modify the referred object. --- New uses
                        of this type are discouraged because of difficulty describing
                        its usage when embedded in APIs.  1. Ignored fields.  It includes
                        many fields which are not generally honored.  For instance,
                        ResourceVersion and FieldPath are both very rarely valid in
                        actual usage.  2. Invalid usage help.  It is impossible to
                        add specific help for individual usage.  In most embedded
                        usages, there are particular     restrictions like, "must
                        refer only to types A and B" or "UID not honored" or "name
                        must be restricted".     Those cannot be well described when
                        embedded.  3. Inconsistent validation.  Because the usages
                        are different, the validation rules are different by usage,
                        which makes it hard for users to predict what will happen.  4.
                        The fields are both imprecise and overly precise.  Kind is
                        not a precise mapping to a URL. This can produce ambiguity     during
                        interpretation and require a REST mapping.  In most cases,
                        the dependency is on the group,resource tuple     and the
                        version of the actual struct is irrelevant.  5. We cannot
                        easily change it.  Because this type is embedded in many locations,
                        updates to this type     will affect numerous schemas.  Don''t
                        make new APIs embed an underspecified API type they do not
                        control. Instead of using this type, create a locally provided
                        and used type that is well-focused on your reference. For
                        example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
                        .'
                      properties:
                        apiVersion:
                          description: API version of the referent.
                          type: string
                        fieldPath:
                          description: 'If referring to a piece of an object instead
                            of an entire object, this string should contain a valid
                            JSON/Go field access statement, such as desiredState.manifest.containers[2].
                            For example, if the object reference is to a container
                            within a pod, this would take on a value like: "spec.containers{name}"
                            (where "name" refers to the name of the container that
                            triggered the event) or if no container name is specified
                            "spec.containers[2]" (container with index 2 in this pod).
                            This syntax is chosen only to have some well-defined way
                            of referencing a part of an object. TODO: this design
                            is not final and this field is subject to change in the
                            future.'
                          type: string
                        kind:
                          description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                          type: string
                        name:
                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                          type: string
                        namespace:
                          description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                          type: string
                        resourceVersion:
                          description: 'Specific resourceVersion to which this reference
                            is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                          type: string
                        uid:
                          description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                          type: string
                      type: object
                    type: array
                  lastScheduleTime:
                    description: Information when was the last time the job was successfully
                      scheduled.
                    format: date-time
                    type: string
                type: object
              dbSecretName:
                description: Name of the secret object created with the database data
                  to allow the backup image connect to the database
                type: string
              encryptKeySecretName:
                description: Name  of the secret object with the Encryption GPG Key
                type: string
              encryptKeySecretNamespace:
                description: Namespace of the secret object with the Encryption GPG
                  Key
                type: string
              hasEncryptKey:
                description: Boolean value which has true when it has an EncryptionKey
                  to be used to send the backup files
                type: boolean
              isDatabasePodFound:
                description: Boolean value which has true when the Database Pod was
                  found in order to create the secret with the database data to allow
                  the backup image connect into it.
                type: boolean
              isDatabaseServiceFound:
                description: Boolean value which has true when the Service Database
                  Pod was found in order to create the secret with the database data
                  to allow the backup image connect into it.
                type: boolean
            required:
            - awsCredentialsSecretNamespace
            - awsSecretName
            - backupStatus
            - cronJobName
            - cronJobStatus
            - dbSecretName
            - encryptKeySecretName
            - encryptKeySecretNamespace
            - hasEncryptKey
            - isDatabasePodFound
            - isDatabaseServiceFound
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
