apiVersion: operators.coreos.com/v1alpha1
kind: InstallPlan
metadata:
  creationTimestamp: "2020-10-05T08:15:43Z"
  generateName: install-
  generation: 1
  name: install-vw8m9
  namespace: openshift-operators
  ownerReferences:
  - apiVersion: operators.coreos.com/v1alpha1
    blockOwnerDeletion: false
    controller: false
    kind: Subscription
    name: cloud-native-postgresql
    uid: ed9e6d8d-2a78-40e3-961b-d3e81819101b
  - apiVersion: operators.coreos.com/v1alpha1
    blockOwnerDeletion: false
    controller: false
    kind: Subscription
    name: lib-bucket-provisioner
    uid: c4cb594d-1624-4a97-b109-ea4dc846af97
  - apiVersion: operators.coreos.com/v1alpha1
    blockOwnerDeletion: false
    controller: false
    kind: Subscription
    name: ocs-operator-stable-4.5-redhat-operators-openshift-marketplace
    uid: c8cf3919-6321-43ce-a5d5-081fae64cefb
  resourceVersion: "870703"
  selfLink: /apis/operators.coreos.com/v1alpha1/namespaces/openshift-operators/installplans/install-vw8m9
  uid: 092259e9-e8ec-415d-b77a-7966fa6c50a5
spec:
  approval: Automatic
  approved: true
  clusterServiceVersionNames:
  - cloud-native-postgresql.v0.3.0
status:
  catalogSources:
  - certified-operators
  conditions:
  - lastTransitionTime: "2020-10-05T08:15:43Z"
    lastUpdateTime: "2020-10-05T08:15:43Z"
    status: "True"
    type: Installed
  phase: Complete
  plan:
  - resolving: cloud-native-postgresql.v0.3.0
    resource:
      group: operators.coreos.com
      kind: ClusterServiceVersion
      manifest: |
        {"kind":"ClusterServiceVersion","apiVersion":"operators.coreos.com/v1alpha1","metadata":{"name":"cloud-native-postgresql.v0.3.0","namespace":"openshift-operators","creationTimestamp":null,"annotations":{"alm-examples":"[\n  {\n    \"apiVersion\": \"postgresql.k8s.2ndq.io/v1alpha1\",\n    \"kind\": \"Backup\",\n    \"metadata\": {\n      \"name\": \"backup-sample\"\n    },\n    \"spec\": {\n      \"cluster\": {\n        \"name\": \"cluster-sample\"\n      }\n    }\n  },\n  {\n    \"apiVersion\": \"postgresql.k8s.2ndq.io/v1alpha1\",\n    \"kind\": \"Cluster\",\n    \"metadata\": {\n      \"name\": \"cluster-sample\"\n    },\n    \"spec\": {\n      \"applicationConfiguration\": {\n        \"database\": \"app\",\n        \"owner\": \"app\"\n      },\n      \"instances\": 3,\n      \"primaryUpdateStrategy\": \"unsupervised\",\n      \"storage\": {\n        \"size\": \"1Gi\",\n        \"storageClass\": \"standard\"\n      }\n    }\n  },\n  {\n    \"apiVersion\": \"postgresql.k8s.2ndq.io/v1alpha1\",\n    \"kind\": \"ScheduledBackup\",\n    \"metadata\": {\n      \"name\": \"scheduledbackup-sample\"\n    },\n    \"spec\": {\n      \"cluster\": {\n        \"name\": \"cluster-sample\"\n      },\n      \"schedule\": \"0 0 0 * * *\"\n    }\n  }\n]","capabilities":"Basic Install","categories":"Database","certified":"true","containerImage":"quay.io/2ndquadrant/cloud-native-postgresql:v0.3.0","createdAt":"2020-09-01T11:43:00Z","description":"Cloud Native PostgreSQL (aka PostgreSQL Operator)","operators.operatorframework.io/builder":"operator-sdk-v0.19.4","operators.operatorframework.io/project_layout":"","support":"2ndQuadrant Ltd"}},"spec":{"install":{"strategy":"deployment","spec":{"deployments":[{"name":"postgresql-operator-controller-manager","spec":{"replicas":1,"selector":{"matchLabels":{"control-plane":"controller-manager"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"control-plane":"controller-manager"}},"spec":{"containers":[{"name":"manager","image":"quay.io/2ndquadrant/cloud-native-postgresql:v0.3.0","command":["/manager"],"args":["--enable-leader-election"],"env":[{"name":"OPERATOR_IMAGE_NAME","value":"quay.io/2ndquadrant/cloud-native-postgresql:v0.3.0"},{"name":"OPERATOR_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"WATCH_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.annotations['olm.targetNamespaces']"}}}],"resources":{}}],"terminationGracePeriodSeconds":10,"serviceAccountName":"postgresql-operator-manager","imagePullSecrets":[{"name":"postgresql-operator-pull-secret"}]}},"strategy":{}}}],"clusterPermissions":[{"serviceAccountName":"postgresql-operator-manager","rules":[{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":[""],"resources":["configmaps"]},{"verbs":["get","patch","update"],"apiGroups":[""],"resources":["configmaps/status"]},{"verbs":["create"],"apiGroups":[""],"resources":["events"]},{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["create","delete","get","list","watch"],"apiGroups":[""],"resources":["persistentvolumeclaims"]},{"verbs":["create","delete","get","list","patch","watch"],"apiGroups":[""],"resources":["pods"]},{"verbs":["create","delete","get","list","patch","watch"],"apiGroups":[""],"resources":["pods/exec"]},{"verbs":["get"],"apiGroups":[""],"resources":["pods/status"]},{"verbs":["create","get","list","watch"],"apiGroups":[""],"resources":["secrets"]},{"verbs":["create","patch","update"],"apiGroups":[""],"resources":["serviceaccounts"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":[""],"resources":["services"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["policy"],"resources":["poddisruptionbudgets"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["backups"]},{"verbs":["get","patch","update"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["backups/status"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["clusters"]},{"verbs":["update"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["clusters/finalizers"]},{"verbs":["get","patch","update","watch"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["clusters/status"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["scheduledbackups"]},{"verbs":["get","patch","update"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["scheduledbackups/status"]},{"verbs":["create","patch","update"],"apiGroups":["rbac.authorization.k8s.io"],"resources":["rolebindings"]},{"verbs":["create","patch","update"],"apiGroups":["rbac.authorization.k8s.io"],"resources":["roles"]},{"verbs":["use"],"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"],"resourceNames":["nonroot"]}]}]}},"version":"0.3.0","maturity":"beta","customresourcedefinitions":{"owned":[{"name":"backups.postgresql.k8s.2ndq.io","version":"v1alpha1","kind":"Backup","displayName":"Backups","description":"PostgreSQL backup manager","specDescriptors":[{"path":"cluster.name","displayName":"Cluster Name","description":"The PostgreSQL cluster to backup","x-descriptors":["urn:alm:descriptor:io.kubernetes:Cluster"]}]},{"name":"clusters.postgresql.k8s.2ndq.io","version":"v1alpha1","kind":"Cluster","displayName":"Cluster","description":"PostgreSQL cluster manager","specDescriptors":[{"path":"instances","displayName":"Instances","description":"Number of instances required in the cluster","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:podCount"]},{"path":"startDelay","displayName":"Maximum Start Delay","description":"The time in seconds that is allowed for a PostgreSQL instance to successfully start up (default 30)","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:advanced"]},{"path":"stopDelay","displayName":"Maximum Stop Delay","description":"The time in seconds that is allowed for a PostgreSQL instance node to gracefully shutdown (default 30)","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:advanced"]},{"path":"imagePullSecret","displayName":"Image Pull Secret","description":"Secret for pulling the image. If empty no secret will be used","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:advanced","urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"imageName","displayName":"Image Name","description":"Name of the container image","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:advanced"]},{"path":"primaryUpdateStrategy","displayName":"Primary Update Strategy","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:advanced","urn:alm:descriptor:com.tectonic.ui:select:supervised","urn:alm:descriptor:com.tectonic.ui:select:unsupervised"]},{"path":"description","displayName":"Description","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:advanced"]},{"path":"storage.storageClass","displayName":"Storage Class","description":"StorageClass to use for database data (PGDATA). Applied after evaluating the PVC template, if available.","x-descriptors":["urn:alm:descriptor:io.kubernetes:StorageClass"]},{"path":"storage.pvcTemplate","displayName":"PVC template","description":"Template to be used to generate the Persistent Volume Claim","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:advanced"]},{"path":"backup.endpointURL","displayName":"Object Storage Endpoint","description":"S3-compatible object storage Endpoint. If empty S3 default it's used","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:text","urn:alm:descriptor:com.tectonic.ui:advanced"]},{"path":"backup.s3Credentials.accessKeyId","displayName":"Access Key ID","description":"Access Key ID","x-descriptors":["urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"backup.s3Credentials.secretAccessKey","displayName":"Secret Access Key","description":"Secret Access Key","x-descriptors":["urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"postgresql.pg_hba[0]","displayName":"pg_hba rule"},{"path":"postgresql.parameters[0]","displayName":"PostgreSQL configuration parameter"},{"path":"backup.s3Credentials.secretAccessKey.name","x-descriptors":["urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"backup.s3Credentials.accessKeyId.name","x-descriptors":["urn:alm:descriptor:io.kubernetes:Secret"]}]},{"name":"scheduledbackups.postgresql.k8s.2ndq.io","version":"v1alpha1","kind":"ScheduledBackup","displayName":"Scheduled Backups","description":"PostgreSQL backups schedule","specDescriptors":[{"path":"cluster.name","displayName":"Cluster name","description":"The PostgreSQL cluster to backup","x-descriptors":["urn:alm:descriptor:io.kubernetes:Cluster"]},{"path":"schedule","displayName":"Schedule","description":"The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron."},{"path":"suspend","displayName":"Schedule is suspended","description":"If this is true, the schedule is suspended, defaults to False","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:booleanSwitch","urn:alm:descriptor:com.tectonic.ui:advanced"]}]}]},"apiservicedefinitions":{},"displayName":"Cloud Native PostgreSQL","description":"Cloud Native PostgreSQL (aka PostgreSQL Operator) is a stack designed by 2ndQuadrant to manage PostgreSQL workloads on Kubernetes, particularly optimised for Private Cloud environments with Local Persistent Volumes (PV). Cloud Native PostgreSQL defines a new Kubernetes resource called Cluster that represents a PostgreSQL cluster made up of a single primary and an optional number of replicas that co-exist in a chosen Kubernetes namespace.\n#Main features\n* Self-Healing capability, through:\n* failover of the primary instance, by promoting the most aligned replica\n* automated recreation of a replica\n* Rolling updates for PostgreSQL minor versions and operator upgrades\n* Support for Local Persistent Volumes with PVC templates and storage classes\n* Reuse of Persistent Volumes storage in Pods\n* Scale up/down capabilities\n* Planned switchover of the primary instance, by promoting a selected replica\n* Definition of an arbitrary number of instances (minimum 1 - one primary server)\n* Definition of the read-write service, to connect your applications to the only primary server of the cluster\n* Definition of the read-only service, to connect your applications to any of the instances for read workloads\n* Standard output logging of PostgreSQL error messages\n\nCloud Native PostgreSQL is compatible with PostgreSQL 10 or higher.\n\nCloud Native PostgreSQL is distributed under 2ndQuadrant End User License Agreement. ","keywords":["postgresql","database","sql","cloud","native"],"maintainers":[{"name":"2ndQuadrant Ltd","email":"info@2ndquadrant.com"}],"provider":{"name":"2ndQuadrant"},"links":[{"name":"Cloud Native Postgresql","url":"https://www.2ndquadrant.com"}],"icon":[{"base64data":"[encoded data, 14028 characters]","mediatype":"image/svg+xml"}],"installModes":[{"type":"OwnNamespace","supported":true},{"type":"SingleNamespace","supported":true},{"type":"MultiNamespace","supported":true},{"type":"AllNamespaces","supported":true}]},"status":{}}
      name: cloud-native-postgresql.v0.3.0
      sourceName: certified-operators
      sourceNamespace: openshift-marketplace
      version: v1alpha1
    status: Created
  - resolving: cloud-native-postgresql.v0.3.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"annotations":{"controller-gen.kubebuilder.io/version":"v0.3.0"},"creationTimestamp":null,"name":"backups.postgresql.k8s.2ndq.io"},"spec":{"group":"postgresql.k8s.2ndq.io","names":{"kind":"Backup","listKind":"BackupList","plural":"backups","singular":"backup"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"description":"Backup is the Schema for the backups API","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":{"cluster":{"description":"The cluster to backup","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"},"status":{"description":"BackupStatus defines the observed state of Backup","properties":{"commandError":{"description":"The backup command output","type":"string"},"commandOutput":{"description":"The backup command output","type":"string"},"error":{"description":"The detected error","type":"string"},"phase":{"description":"The last backup status","type":"string"},"startedAt":{"description":"When the backup was started","format":"date-time","type":"string"},"stoppedAt":{"description":"When the backup was terminated","format":"date-time","type":"string"}},"type":"object"}},"type":"object"}},"version":"v1alpha1","versions":[{"name":"v1alpha1","served":true,"storage":true}]},"status":{"acceptedNames":{"kind":"","plural":""},"conditions":[],"storedVersions":[]}}
      name: backups.postgresql.k8s.2ndq.io
      sourceName: certified-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: cloud-native-postgresql.v0.3.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"annotations":{"controller-gen.kubebuilder.io/version":"v0.3.0"},"creationTimestamp":null,"name":"clusters.postgresql.k8s.2ndq.io"},"spec":{"group":"postgresql.k8s.2ndq.io","names":{"kind":"Cluster","listKind":"ClusterList","plural":"clusters","singular":"cluster"},"scope":"Namespaced","subresources":{"scale":{"specReplicasPath":".spec.instances","statusReplicasPath":".status.instances"},"status":{}},"validation":{"openAPIV3Schema":{"description":"Cluster is the Schema for the postgresqls API","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":"ClusterSpec defines the desired state of Cluster","properties":{"affinity":{"description":"Affinity/Anti-affinity rules for Pods","properties":{"enablePodAntiAffinity":{"description":"Should we enable anti affinity or not?","type":"boolean"},"topologyKey":{"description":"TopologyKey to use for anti-affinity configuration. See k8s documentation for more info on that","type":"string"}},"required":["enablePodAntiAffinity"],"type":"object"},"applicationConfiguration":{"description":"Configuration from the application point of view","properties":{"database":{"description":"Name of the database used by the application","minLength":1,"type":"string"},"owner":{"description":"Name of the owner of the database in the instance to be used by applications.","minLength":1,"type":"string"}},"required":["database","owner"],"type":"object"},"backup":{"description":"The configuration to be used for backups","properties":{"data":{"description":"The configuration to be used to backup the data files","properties":{"compression":{"description":"Whenever to compress files or not","type":"string"},"encryption":{"description":"Whenever to force the encryption of files (if the bucket is not already configured for that)","type":"string"},"immediateCheckpoint":{"description":"Whenever to force the initial checkpoint to be done as quickly as possible","type":"boolean"},"jobs":{"description":"The number of jobs to be used to upload the backup, defaults to 2","format":"int32","type":"integer"}},"type":"object"},"destinationPath":{"description":"The path where to store the backup (i.e. s3://bucket/path/to/folder) this path, with different destination folders, will be used for WALs and for data","minLength":1,"type":"string"},"endpointURL":{"description":"Endpoint to be used to upload data to the cloud, overriding the automatic endpoint discovery","type":"string"},"s3Credentials":{"description":"The credentials to use to upload data to S3","properties":{"accessKeyId":{"description":"The reference to the access key id","properties":{"key":{"description":"The key of the secret to select from.  Must be a valid secret key.","type":"string"},"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"},"optional":{"description":"Specify whether the Secret or its key must be defined","type":"boolean"}},"required":["key"],"type":"object"},"secretAccessKey":{"description":"The reference to the secret access key","properties":{"key":{"description":"The key of the secret to select from.  Must be a valid secret key.","type":"string"},"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"},"optional":{"description":"Specify whether the Secret or its key must be defined","type":"boolean"}},"required":["key"],"type":"object"}},"required":["accessKeyId","secretAccessKey"],"type":"object"},"serverName":{"description":"The server name on S3, the cluster name is used if this parameter is omitted","type":"string"},"wal":{"description":"The configuration for the backup of the WAL stream","properties":{"compression":{"description":"Whenever to compress files or not","type":"string"},"encryption":{"description":"Whenever to force the encryption of files (if the bucket is not already configured for that)","type":"string"}},"type":"object"}},"required":["destinationPath","s3Credentials"],"type":"object"},"description":{"description":"Description of this PostgreSQL cluster","type":"string"},"imageName":{"description":"Name of the container image","minLength":0,"type":"string"},"instances":{"description":"Number of instances required in the cluster","format":"int32","minimum":1,"type":"integer"},"licenseKey":{"description":"The license key of the cluster. When empty, the cluster operates in trial mode and after the expiry date (default 30 days) the operator will cease any reconciliation attempt. For details, please refer to the license agreement that comes with the operator.","type":"string"},"nodeMaintenanceWindow":{"description":"Define a maintenance window for the Kubernetes nodes","properties":{"inProgress":{"description":"Is there a node maintenance activity in progress?","type":"boolean"},"reusePVC":{"description":"Reuse the existing PVC (wait for the node to come up again) or not (recreate it elsewhere)","type":"boolean"}},"required":["inProgress"],"type":"object"},"postgresql":{"description":"Configuration of the PostgreSQL server","properties":{"parameters":{"additionalProperties":{"type":"string"},"description":"PostgreSQL configuration options (postgresql.conf)","type":"object"},"pg_hba":{"description":"PostgreSQL Host Based Authentication rules (lines to be appended to the pg_hba.conf file)","items":{"type":"string"},"type":"array"}},"type":"object"},"primaryUpdateStrategy":{"description":"Strategy to follow to upgrade the primary server during a rolling update procedure, after all replicas have been successfully updated: it can be automated (`unsupervised` - default) or manual (`supervised`)","type":"string"},"resources":{"description":"Resources requirements of every generated Pod","properties":{"limits":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"string"}],"pattern":"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$","x-kubernetes-int-or-string":true},"description":"Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/","type":"object"},"requests":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"string"}],"pattern":"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$","x-kubernetes-int-or-string":true},"description":"Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/","type":"object"}},"type":"object"},"startDelay":{"description":"The time in seconds that is allowed for a PostgreSQL instance to successfully start up (default 30)","format":"int32","type":"integer"},"stopDelay":{"description":"The time in seconds that is allowed for a PostgreSQL instance node to gracefully shutdown (default 30)","format":"int32","type":"integer"},"storage":{"description":"Configuration of the storage of the instances","properties":{"pvcTemplate":{"description":"Template to be used to generate the Persistent Volume Claim","properties":{"accessModes":{"description":"AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","items":{"type":"string"},"type":"array"},"dataSource":{"description":"This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.","properties":{"apiGroup":{"description":"APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.","type":"string"},"kind":{"description":"Kind is the type of resource being referenced","type":"string"},"name":{"description":"Name is the name of resource being referenced","type":"string"}},"required":["kind","name"],"type":"object"},"resources":{"description":"Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources","properties":{"limits":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"string"}],"pattern":"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$","x-kubernetes-int-or-string":true},"description":"Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/","type":"object"},"requests":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"string"}],"pattern":"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$","x-kubernetes-int-or-string":true},"description":"Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/","type":"object"}},"type":"object"},"selector":{"description":"A label query over volumes to consider for binding.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"storageClassName":{"description":"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1","type":"string"},"volumeMode":{"description":"volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.","type":"string"},"volumeName":{"description":"VolumeName is the binding reference to the PersistentVolume backing this claim.","type":"string"}},"type":"object"},"size":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"Size of the storage. Required if not already specified in the PVC template.","pattern":"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$","x-kubernetes-int-or-string":true},"storageClass":{"description":"StorageClass to use for database data (PGDATA). Applied after evaluating the PVC template, if available. If not specified, generated PVCs will be satisfied by the default storage class","type":"string"}},"required":["size"],"type":"object"}},"required":["applicationConfiguration","instances"],"type":"object"},"status":{"description":"ClusterStatus defines the observed state of Cluster","properties":{"currentPrimary":{"description":"Current primary instance","type":"string"},"danglingPVC":{"description":"List of all the PVCs created by this bdrGroup and still available which are not attached to a Pod","items":{"type":"string"},"type":"array"},"instances":{"description":"Total number of instances in the cluster","format":"int32","type":"integer"},"latestGeneratedNode":{"description":"ID of the latest generated node (used to avoid node name clashing)","format":"int32","type":"integer"},"licenseStatus":{"description":"Status of the license","properties":{"licenseExpiration":{"description":"The expiration timestamp of the license key, after which the operator will cease any reconciliation attempt on the cluster.","format":"date-time","type":"string"},"licenseStatus":{"description":"Current status the license key of the cluster","type":"string"},"repositoryAccess":{"description":"True if the license embeds a pull secret that can be used to access the repositories","type":"boolean"},"valid":{"description":"Whether the license key is valid or not","type":"boolean"}},"required":["repositoryAccess","valid"],"type":"object"},"readyInstances":{"description":"Total number of ready instances in the cluster","format":"int32","type":"integer"},"targetPrimary":{"description":"Target primary instance, this is different from the previous one during a switchover or a failover","type":"string"}},"type":"object"}},"type":"object"}},"version":"v1alpha1","versions":[{"name":"v1alpha1","served":true,"storage":true}]},"status":{"acceptedNames":{"kind":"","plural":""},"conditions":[],"storedVersions":[]}}
      name: clusters.postgresql.k8s.2ndq.io
      sourceName: certified-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: cloud-native-postgresql.v0.3.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"annotations":{"controller-gen.kubebuilder.io/version":"v0.3.0"},"creationTimestamp":null,"name":"scheduledbackups.postgresql.k8s.2ndq.io"},"spec":{"group":"postgresql.k8s.2ndq.io","names":{"kind":"ScheduledBackup","listKind":"ScheduledBackupList","plural":"scheduledbackups","singular":"scheduledbackup"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"description":"ScheduledBackup is the Schema for the scheduledbackups API","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":"ScheduledBackupSpec defines the desired state of ScheduledBackup","properties":{"cluster":{"description":"The cluster to backup","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"},"schedule":{"description":"The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.","type":"string"},"suspend":{"description":"If this backup is suspended of not","type":"boolean"}},"required":["schedule"],"type":"object"},"status":{"description":"ScheduledBackupStatus defines the observed state of ScheduledBackup","properties":{"lastCheckTime":{"description":"The latest time the schedule","format":"date-time","type":"string"},"lastScheduleTime":{"description":"Information when was the last time that backup was successfully scheduled.","format":"date-time","type":"string"}},"type":"object"}},"type":"object"}},"version":"v1alpha1","versions":[{"name":"v1alpha1","served":true,"storage":true}]},"status":{"acceptedNames":{"kind":"","plural":""},"conditions":[],"storedVersions":[]}}
      name: scheduledbackups.postgresql.k8s.2ndq.io
      sourceName: certified-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: cloud-native-postgresql.v0.3.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"postgresql-operator-manager","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"cloud-native-postgresql.v0.3.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: postgresql-operator-manager
      sourceName: certified-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: cloud-native-postgresql.v0.3.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"cloud-native-postgresql.v0.3.0-bpwgp","creationTimestamp":null,"labels":{"olm.owner":"cloud-native-postgresql.v0.3.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":[""],"resources":["configmaps"]},{"verbs":["get","patch","update"],"apiGroups":[""],"resources":["configmaps/status"]},{"verbs":["create"],"apiGroups":[""],"resources":["events"]},{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["create","delete","get","list","watch"],"apiGroups":[""],"resources":["persistentvolumeclaims"]},{"verbs":["create","delete","get","list","patch","watch"],"apiGroups":[""],"resources":["pods"]},{"verbs":["create","delete","get","list","patch","watch"],"apiGroups":[""],"resources":["pods/exec"]},{"verbs":["get"],"apiGroups":[""],"resources":["pods/status"]},{"verbs":["create","get","list","watch"],"apiGroups":[""],"resources":["secrets"]},{"verbs":["create","patch","update"],"apiGroups":[""],"resources":["serviceaccounts"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":[""],"resources":["services"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["policy"],"resources":["poddisruptionbudgets"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["backups"]},{"verbs":["get","patch","update"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["backups/status"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["clusters"]},{"verbs":["update"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["clusters/finalizers"]},{"verbs":["get","patch","update","watch"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["clusters/status"]},{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["scheduledbackups"]},{"verbs":["get","patch","update"],"apiGroups":["postgresql.k8s.2ndq.io"],"resources":["scheduledbackups/status"]},{"verbs":["create","patch","update"],"apiGroups":["rbac.authorization.k8s.io"],"resources":["rolebindings"]},{"verbs":["create","patch","update"],"apiGroups":["rbac.authorization.k8s.io"],"resources":["roles"]},{"verbs":["use"],"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"],"resourceNames":["nonroot"]}]}
      name: cloud-native-postgresql.v0.3.0-bpwgp
      sourceName: certified-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: cloud-native-postgresql.v0.3.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"cloud-native-postgresql.v0.3.0-bpwgp-postgresql-operator-mcmwrj","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"cloud-native-postgresql.v0.3.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"postgresql-operator-manager","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"cloud-native-postgresql.v0.3.0-bpwgp"}}
      name: cloud-native-postgresql.v0.3.0-bpwgp-postgresql-operator-mcmwrj
      sourceName: certified-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
