From 9a9cf8e4b786a37ee32119aef0eebda90822fda7 Mon Sep 17 00:00:00 2001 From: ValClarkson Date: Wed, 23 Mar 2022 17:57:24 -0400 Subject: [PATCH] Add PGO v4.7.5 Signed-off-by: ValClarkson --- operators/postgresql/4.7.5/Dockerfile | 13 + .../pgclusters.crunchydata.com.crd.yaml | 35 + .../pgpolicies.crunchydata.com.crd.yaml | 22 + .../pgreplicas.crunchydata.com.crd.yaml | 22 + .../pgtasks.crunchydata.com.crd.yaml | 22 + ...operator.v4.7.5.clusterserviceversion.yaml | 959 ++++++++++++++++++ .../4.7.5/metadata/annotations.yaml | 9 + 7 files changed, 1082 insertions(+) create mode 100644 operators/postgresql/4.7.5/Dockerfile create mode 100644 operators/postgresql/4.7.5/manifests/pgclusters.crunchydata.com.crd.yaml create mode 100644 operators/postgresql/4.7.5/manifests/pgpolicies.crunchydata.com.crd.yaml create mode 100644 operators/postgresql/4.7.5/manifests/pgreplicas.crunchydata.com.crd.yaml create mode 100644 operators/postgresql/4.7.5/manifests/pgtasks.crunchydata.com.crd.yaml create mode 100644 operators/postgresql/4.7.5/manifests/postgresoperator.v4.7.5.clusterserviceversion.yaml create mode 100644 operators/postgresql/4.7.5/metadata/annotations.yaml diff --git a/operators/postgresql/4.7.5/Dockerfile b/operators/postgresql/4.7.5/Dockerfile new file mode 100644 index 000000000000..7807a1c265cd --- /dev/null +++ b/operators/postgresql/4.7.5/Dockerfile @@ -0,0 +1,13 @@ +FROM scratch + +# Core bundle labels. +LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 +LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ +LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ +LABEL operators.operatorframework.io.bundle.package.v1=postgresql +LABEL operators.operatorframework.io.bundle.channels.v1=stable +LABEL operators.operatorframework.io.bundle.channel.default.v1=stable + +# Copy files to locations specified by labels. +COPY manifests/ /manifests/ +COPY metadata/ /metadata/ diff --git a/operators/postgresql/4.7.5/manifests/pgclusters.crunchydata.com.crd.yaml b/operators/postgresql/4.7.5/manifests/pgclusters.crunchydata.com.crd.yaml new file mode 100644 index 000000000000..cd4a541fa901 --- /dev/null +++ b/operators/postgresql/4.7.5/manifests/pgclusters.crunchydata.com.crd.yaml @@ -0,0 +1,35 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: pgclusters.crunchydata.com + labels: + vendor: crunchydata +spec: + group: crunchydata.com + names: + kind: Pgcluster + listKind: PgclusterList + plural: pgclusters + singular: pgcluster + scope: Namespaced + version: v1 + validation: + openAPIV3Schema: + properties: + spec: + properties: + clustername: {type: string} + ccpimage: {type: string} + ccpimagetag: {type: string} + database: {type: string} + exporterport: {type: string} + name: {type: string} + pgbadgerport: {type: string} + PrimaryStorage: {type: object} + port: {type: string} + status: {type: string} + userlabels: {type: object} + status: + properties: + state: {type: string} + message: {type: string} diff --git a/operators/postgresql/4.7.5/manifests/pgpolicies.crunchydata.com.crd.yaml b/operators/postgresql/4.7.5/manifests/pgpolicies.crunchydata.com.crd.yaml new file mode 100644 index 000000000000..95a3037a9ae1 --- /dev/null +++ b/operators/postgresql/4.7.5/manifests/pgpolicies.crunchydata.com.crd.yaml @@ -0,0 +1,22 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: pgpolicies.crunchydata.com + labels: + vendor: crunchydata +spec: + group: crunchydata.com + names: + kind: Pgpolicy + listKind: PgpolicyList + plural: pgpolicies + singular: pgpolicy + scope: Namespaced + version: v1 + validation: + openAPIV3Schema: + properties: + status: + properties: + message: {type: string} + state: {type: string} diff --git a/operators/postgresql/4.7.5/manifests/pgreplicas.crunchydata.com.crd.yaml b/operators/postgresql/4.7.5/manifests/pgreplicas.crunchydata.com.crd.yaml new file mode 100644 index 000000000000..b6bfa305b6b2 --- /dev/null +++ b/operators/postgresql/4.7.5/manifests/pgreplicas.crunchydata.com.crd.yaml @@ -0,0 +1,22 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: pgreplicas.crunchydata.com + labels: + vendor: crunchydata +spec: + group: crunchydata.com + names: + kind: Pgreplica + listKind: PgreplicaList + plural: pgreplicas + singular: pgreplica + scope: Namespaced + version: v1 + validation: + openAPIV3Schema: + properties: + status: + properties: + message: {type: string} + state: {type: string} diff --git a/operators/postgresql/4.7.5/manifests/pgtasks.crunchydata.com.crd.yaml b/operators/postgresql/4.7.5/manifests/pgtasks.crunchydata.com.crd.yaml new file mode 100644 index 000000000000..ba1e44fd5b93 --- /dev/null +++ b/operators/postgresql/4.7.5/manifests/pgtasks.crunchydata.com.crd.yaml @@ -0,0 +1,22 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: pgtasks.crunchydata.com + labels: + vendor: crunchydata +spec: + group: crunchydata.com + names: + kind: Pgtask + listKind: PgtaskList + plural: pgtasks + singular: pgtask + scope: Namespaced + version: v1 + validation: + openAPIV3Schema: + properties: + status: + properties: + message: {type: string} + state: {type: string} diff --git a/operators/postgresql/4.7.5/manifests/postgresoperator.v4.7.5.clusterserviceversion.yaml b/operators/postgresql/4.7.5/manifests/postgresoperator.v4.7.5.clusterserviceversion.yaml new file mode 100644 index 000000000000..a77796dbc0bf --- /dev/null +++ b/operators/postgresql/4.7.5/manifests/postgresoperator.v4.7.5.clusterserviceversion.yaml @@ -0,0 +1,959 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + name: 'postgresoperator.v4.7.5' + annotations: + operatorhub.io/ui-metadata-max-k8s-version: "1.21" + certified: 'false' + support: crunchydata.com + categories: Database + capabilities: Auto Pilot + description: Enterprise open source PostgreSQL-as-a-Service + createdAt: 2019-12-31 19:40Z + containerImage: 'registry.developers.crunchydata.com/crunchydata/postgres-operator:centos8-4.7.5' + repository: https://github.com/CrunchyData/postgres-operator + alm-examples: |- + [ + { + "apiVersion": "crunchydata.com/v1", + "kind": "Pgcluster", + "metadata": { + "annotations": { + "current-primary": "hippo" + }, + "name": "hippo", + "labels": { + "crunchy-pgha-scope": "hippo", + "deployment-name": "hippo", + "name": "hippo", + "namespace": "pgo", + "pg-cluster": "hippo", + "pgo-version": "4.7.5" + } + }, + "spec": { + "name": "hippo", + "namespace": "pgo", + "clustername": "hippo", + "ccpimage": "crunchy-postgres-ha", + "ccpimagetag": "centos8-13.6-4.7.5", + "BackrestStorage": { + "accessmode": "ReadWriteMany", + "matchLabels": "", + "name": "", + "size": "5Gi", + "storageclass": "", + "storagetype": "dynamic", + "supplementalgroups": "" + }, + "PrimaryStorage": { + "accessmode": "ReadWriteMany", + "matchLabels": "", + "name": "hippo", + "size": "5Gi", + "storageclass": "", + "storagetype": "dynamic", + "supplementalgroups": "" + }, + "ReplicaStorage": { + "accessmode": "ReadWriteMany", + "matchLabels": "", + "name": "", + "size": "5Gi", + "storageclass": "", + "storagetype": "dynamic", + "supplementalgroups": "" + }, + "database": "hippo", + "exporterport": "9187", + "pgbadgerport": "10000", + "podAntiAffinity": { + "default": "preferred" + }, + "port": "5432", + "user": "hippo", + "userlabels": { + "pgo-version": "4.7.5" + } + } + }, + { + "apiVersion": "crunchydata.com/v1", + "kind": "Pgreplica", + "metadata": { + "name": "example" + }, + "spec": {}, + "status": {} + }, + { + "apiVersion": "crunchydata.com/v1", + "kind": "Pgpolicy", + "metadata": { + "name": "example" + }, + "spec": {}, + "status": {} + }, + { + "apiVersion": "crunchydata.com/v1", + "kind": "Pgtask", + "metadata": { + "name": "example" + }, + "spec": {} + } + ] +spec: + displayName: Crunchy PostgreSQL for Kubernetes + provider: {name: Crunchy Data} + keywords: + - postgres + - postgresql + - database + - sql + - operator + - crunchy data + description: |- + Crunchy PostgreSQL for Kubernetes lets you run your own production-grade PostgreSQL-as-a-Service on Kubernetes! + + Powered by the Crunchy [PostgreSQL Operator](https://github.com/CrunchyData/postgres-operator), Crunchy PostgreSQL + for Kubernetes automates and simplifies deploying and managing open source PostgreSQL clusters on Kubernetes by + providing the essential features you need to keep your PostgreSQL clusters up and running, including: + + - **PostgreSQL Cluster Provisioning**: [Create, Scale, & Delete PostgreSQL clusters with ease][provisioning], + while fully customizing your Pods and PostgreSQL configuration! + - **High-Availability**: Safe, automated failover backed by a [distributed consensus based high-availability solution][high-availability]. + Uses [Pod Anti-Affinity][k8s-anti-affinity] to help resiliency; you can configure how aggressive this can be! + Failed primaries automatically heal, allowing for faster recovery time. You can even create regularly scheduled + backups as well and set your backup retention policy + - **Disaster Recovery**: Backups and restores leverage the open source [pgBackRest][] utility + and [includes support for full, incremental, and differential backups as well as efficient delta restores][disaster-recovery]. + Set how long you want your backups retained for. Works great with very large databases! + - **Monitoring**: Track the health of your PostgreSQL clusters using the open source [pgMonitor][] library. + - **Clone**: Create new clusters from your existing clusters or backups with a single [`pgo create cluster --restore-from`][pgo-create-cluster] command. + - **TLS**: Secure communication between your applications and data servers by [enabling TLS for your PostgreSQL servers][pgo-task-tls], including the ability to enforce that all of your connections to use TLS. + - **Connection Pooling**: Use [pgBouncer][] for connection pooling + - **Affinity and Tolerations**: Have your PostgreSQL clusters deployed to [Kubernetes Nodes][k8s-nodes] of your preference with [node affinity][high-availability-node-affinity], or designate which nodes Kubernetes can schedule PostgreSQL instances to with Kubernetes [tolerations][high-availability-tolerations]. + - **Full Customizability**: Crunchy PostgreSQL for Kubernetes makes it easy to get your own PostgreSQL-as-a-Service up and running on + and lets make further enhancements to customize your deployments, including: + - Selecting different storage classes for your primary, replica, and backup storage + - Select your own container resources class for each PostgreSQL cluster deployment; differentiate between resources applied for primary and replica clusters! + - Use your own container image repository, including support `imagePullSecrets` and private repositories + - Bring your own trusted certificate authority (CA) for use with the Operator API server + - Override your PostgreSQL configuration for each cluster + + and much more! + + [disaster-recovery]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/disaster-recovery/ + [high-availability]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/high-availability/ + [high-availability-node-affinity]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/high-availability/#node-affinity + [high-availability-tolerations]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/high-availability/#tolerations + [pgo-create-cluster]: https://access.crunchydata.com/documentation/postgres-operator/latest/pgo-client/reference/pgo_create_cluster/ + [pgo-task-tls]: https://access.crunchydata.com/documentation/postgres-operator/latest/tutorial/tls/ + [provisioning]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/provisioning/ + + [k8s-anti-affinity]: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity + [k8s-nodes]: https://kubernetes.io/docs/concepts/architecture/nodes/ + + [pgBackRest]: https://www.pgbackrest.org + [pgBouncer]: https://access.crunchydata.com/documentation/postgres-operator/latest/tutorial/pgbouncer/ + [pgMonitor]: https://github.com/CrunchyData/pgmonitor + + + ## Pre-Installation + + There are a few manual steps that the cluster administrator must perform prior to installing the PostgreSQL Operator. + At the very least, it must be provided with an initial configuration. + + First, select a namespace in which to install the PostgreSQL Operator. PostgreSQL clusters will also be deployed here. + If it does not exist, create it now. + + ``` + export PGO_OPERATOR_NAMESPACE=pgo + kubectl create namespace "$PGO_OPERATOR_NAMESPACE" + ``` + + ### Secrets (optional) + + If you plan to use AWS S3 to store backups, you can configure your environment to automatically provide your AWS S3 credentials to all newly created PostgreSQL clusters: + + ``` + kubectl -n "$PGO_OPERATOR_NAMESPACE" create secret generic pgo-backrest-repo-config \ + --from-literal=aws-s3-key="" \ + --from-literal=aws-s3-key-secret="" + kubectl -n "$PGO_OPERATOR_NAMESPACE" label secret pgo-backrest-repo-config vendor=crunchydata + ``` + + ### Certificates (optional) + + The PostgreSQL Operator has an API that uses TLS to communicate securely with clients. If one is not provided, the API will automatically generated one for you. + + If you have a certificate bundle validated by your organization, you can install it now. + + ``` + kubectl -n "$PGO_OPERATOR_NAMESPACE" create secret tls pgo.tls \ + --cert=/path/to/server.crt \ + --key=/path/to/server.key + ``` + + Once these resources are in place, the PostgreSQL Operator can be installed into the cluster. + + ## Installation + + You can now go ahead and install the PostgreSQL Operator from OperatorHub. + + ## Post-Installation + + ### Tutorial + + For a guide on how to perform many of the daily functions of the PostgreSQL Operator, we recommend that you read the [Postgres Operator tutorial][pgo-tutorial] + + [pgo-tutorial]: https://access.crunchydata.com/documentation/postgres-operator/latest/tutorial/create-cluster/ + + However, the below guide will show you how to create a Postgres cluster from a custom resource or from using the `pgo-client`. + + ### Create a PostgreSQL Cluster from a Custom Resource + + The fundamental workflow for interfacing with a PostgreSQL Operator Custom + Resource Definition is for creating a PostgreSQL cluster. There are several + that a PostgreSQL cluster requires to be deployed, including: + + - Secrets + - Information for setting up a pgBackRest repository + - PostgreSQL superuser bootstrap credentials + - PostgreSQL replication user bootstrap credentials + - PostgresQL standard user bootstrap credentials + + Additionally, if you want to add some of the other sidecars, you may need to + create additional secrets. + + The good news is that if you do not provide these objects, the PostgreSQL + Operator will create them for you to get your Postgres cluster up and running! + + The following goes through how to create a PostgreSQL cluster called + `hippo` by creating a new custom resource. + + ``` + # this variable is the name of the cluster being created + export pgo_cluster_name=hippo + # this variable is the namespace the cluster is being deployed into + export cluster_namespace=pgo + # this variable is set to the location of your image repository + export cluster_image_prefix=registry.developers.crunchydata.com/crunchydata + + cat <<-EOF > "${pgo_cluster_name}-pgcluster.yaml" + apiVersion: crunchydata.com/v1 + kind: Pgcluster + metadata: + annotations: + current-primary: ${pgo_cluster_name} + labels: + crunchy-pgha-scope: ${pgo_cluster_name} + deployment-name: ${pgo_cluster_name} + name: ${pgo_cluster_name} + pg-cluster: ${pgo_cluster_name} + pgo-version: 4.7.5 + pgouser: admin + name: ${pgo_cluster_name} + namespace: ${cluster_namespace} + spec: + BackrestStorage: + accessmode: ReadWriteMany + matchLabels: "" + name: "" + size: 1G + storageclass: "" + storagetype: create + supplementalgroups: "" + PrimaryStorage: + accessmode: ReadWriteMany + matchLabels: "" + name: ${pgo_cluster_name} + size: 1G + storageclass: "" + storagetype: create + supplementalgroups: "" + ReplicaStorage: + accessmode: ReadWriteMany + matchLabels: "" + name: "" + size: 1G + storageclass: "" + storagetype: create + supplementalgroups: "" + annotations: {} + ccpimage: crunchy-postgres-ha + ccpimageprefix: ${cluster_image_prefix} + ccpimagetag: centos8-13.6-4.7.5 + clustername: ${pgo_cluster_name} + database: ${pgo_cluster_name} + exporterport: "9187" + limits: {} + name: ${pgo_cluster_name} + pgDataSource: + restoreFrom: "" + restoreOpts: "" + pgbadgerport: "10000" + pgoimageprefix: ${cluster_image_prefix} + podAntiAffinity: + default: preferred + pgBackRest: preferred + pgBouncer: preferred + port: "5432" + tolerations: [] + user: hippo + userlabels: + pgo-version: 4.7.5 + EOF + + kubectl apply -f "${pgo_cluster_name}-pgcluster.yaml" + ``` + + And that's all! The PostgreSQL Operator will go ahead and create the cluster. + + If you have the PostgreSQL client `psql` installed on your host machine, you can + test connection to the PostgreSQL cluster using the following command: + + ``` + # namespace that the cluster is running in + export PGO_OPERATOR_NAMESPACE=pgo + # name of the cluster + export pgo_cluster_name=hippo + # name of the user whose password we want to get + export pgo_cluster_username=hippo + + # get the password of the user and set it to a recognized psql environmental variable + export PGPASSWORD=$(kubectl -n "${PGO_OPERATOR_NAMESPACE}" get secrets \ + "${pgo_cluster_name}-${pgo_cluster_username}-secret" -o "jsonpath={.data['password']}" | base64 -d) + + # set up a port-forward either in a new terminal, or in the same terminal in the background: + kubectl -n pgo port-forward svc/hippo 5432:5432 & + + psql -h localhost -U "${pgo_cluster_username}" "${pgo_cluster_name}" + ``` + + ### Create a PostgreSQL Cluster the `pgo` Client + + Once the PostgreSQL Operator is installed in your Kubernetes cluster, you will need to do a few things + to use the [PostgreSQL Operator Client][pgo-client]. + + [pgo-client]: https://access.crunchydata.com/documentation/postgres-operator/latest/pgo-client/ + + Install the first set of client credentials and download the `pgo` binary and client certificates. + + ``` + curl https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.7.5/deploy/install-bootstrap-creds.sh > install-bootstrap-creds.sh + curl https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.7.5/installers/kubectl/client-setup.sh > client-setup.sh + + chmod +x install-bootstrap-creds.sh client-setup.sh + + PGO_CMD=kubectl ./install-bootstrap-creds.sh + PGO_CMD=kubectl ./client-setup.sh + ``` + + The client needs to be able to reach the PostgreSQL Operator API from outside the Kubernetes cluster. + Create an external service or forward a port locally. + + ``` + kubectl -n "$PGO_OPERATOR_NAMESPACE" expose deployment postgres-operator --type=LoadBalancer + + export PGO_APISERVER_URL="https://$( + kubectl -n "$PGO_OPERATOR_NAMESPACE" get service postgres-operator \ + -o jsonpath="{.status.loadBalancer.ingress[*]['ip','hostname']}" + ):8443" + ``` + _or_ + ``` + kubectl -n "$PGO_OPERATOR_NAMESPACE" port-forward deployment/postgres-operator 8443 + + export PGO_APISERVER_URL="https://127.0.0.1:8443" + ``` + + Verify connectivity using the `pgo` command. + + ``` + pgo version + # pgo client version 4.7.5 + # pgo-apiserver version 4.7.5 + ``` + + You can then create a cluster with the `pgo` client as simply as this: + + ``` + pgo create cluster -n pgo hippo + ``` + + The cluster may take a few moments to provision. You can verify that the cluster is up and running by using the `pgo test` command: + + ``` + pgo test cluster -n pgo hippo + ``` + + If you have the PostgreSQL client `psql` installed on your host machine, you can + test connection to the PostgreSQL cluster using the following command: + + ``` + # namespace that the cluster is running in + export PGO_OPERATOR_NAMESPACE=pgo + # name of the cluster + export pgo_cluster_name=hippo + # name of the user whose password we want to get + export pgo_cluster_username=hippo + + # get the password of the user and set it to a recognized psql environmental variable + export PGPASSWORD=$(kubectl -n "${PGO_OPERATOR_NAMESPACE}" get secrets \ + "${pgo_cluster_name}-${pgo_cluster_username}-secret" -o "jsonpath={.data['password']}" | base64 -d) + + # set up a port-forward either in a new terminal, or in the same terminal in the background: + kubectl -n pgo port-forward svc/hippo 5432:5432 & + + psql -h localhost -U "${pgo_cluster_username}" "${pgo_cluster_name}" + ``` + version: '4.7.5' + links: + - name: Crunchy Data + url: https://www.crunchydata.com/ + - name: Documentation + url: 'https://access.crunchydata.com/documentation/postgres-operator/' + maintainers: + - name: Crunchy Data + email: info@crunchydata.com + minKubeVersion: 1.11.0 + maturity: stable + replaces: postgresoperator.v4.7.3 + labels: + alm-owner-enterprise-app: postgres-operator + alm-status-descriptors: 'postgres-operator.v4.7.5' + customresourcedefinitions: + owned: + - name: pgclusters.crunchydata.com + kind: Pgcluster + version: v1 + displayName: Postgres Primary Cluster Member + description: Represents a Postgres primary cluster member + resources: + - kind: Pgcluster + version: v1 + - kind: ConfigMap + version: v1 + - kind: Deployment + version: v1 + - kind: Job + version: v1 + - kind: Pod + version: v1 + - kind: ReplicaSet + version: v1 + - kind: Secret + version: v1 + - kind: Service + version: v1 + - kind: PersistentVolumeClaim + version: v1 + specDescriptors: + - path: ccpimage + displayName: PostgreSQL Image + description: The Crunchy PostgreSQL image to use. Possible values are + "crunchy-postgres-ha" and "crunchy-postgres-gis-ha" + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - path: ccpimagetag + displayName: PostgreSQL Image Tag + description: The tag of the PostgreSQL image to use. Example is "centos8-13.6-4.7.5" + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - path: clustername + displayName: PostgreSQL Cluster name + description: The name that is assigned to this specific PostgreSQL cluster + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - path: database + displayName: Initial PostgreSQL database name + description: The name of the initial database to be created inside of + the PostgreSQL cluster, e.g. "hippo" + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - path: exporterport + displayName: PostgreSQL Monitor Port + description: The port to use for the PostgreSQL metrics exporter used + for cluster monitoring, e.g. "9187" + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - path: name + displayName: PostgreSQL CRD name + description: The name of the CRD entry. Should match the PostgreSQL Cluster + name + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - path: pgbadgerport + displayName: pgBadger Port + description: The port to use for the pgBadger PostgreSQL query analysis + service, e.g. "10000" + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - path: port + displayName: PostgreSQL Port + description: The port to use for the PostgreSQL cluster, e.g. "5432" + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - path: PrimaryStorage + displayName: PostgreSQL Primary Storage + description: Attributes that help set the primary storage of a PostgreSQL + cluster + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:fieldGroup:PrimaryStorage + - path: PrimaryStorage.name + displayName: PostgreSQL Primary Storage Name + description: Contains the name of the PostgreSQL cluster to associate + with this storage. Should match the Cluster name + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:fieldGroup:PrimaryStorage + - urn:alm:descriptor:com.tectonic.ui:text + - path: PrimaryStorage.storageclass + displayName: PostgreSQL Primary StorageClass + description: Contains the storage class used for the primary PostgreSQL + instance of the cluster + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:fieldGroup:PrimaryStorage + - urn:alm:descriptor:io.kubernetes:StorageClass + - path: PrimaryStorage.accessmode + displayName: PostgreSQL Primary StorageClass Access Mode + description: The access mode for the storage class, e.g. "ReadWriteOnce" + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:fieldGroup:PrimaryStorage + - urn:alm:descriptor:com.tectonic.ui:select:ReadWriteOnce + - urn:alm:descriptor:com.tectonic.ui:select:ReadWriteMany + - path: PrimaryStorage.size + displayName: PostgreSQL Primary Data PVC Size + description: The size of the PVC that will store the data for the primary + PostgreSQL instance, e.g. "1G" + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:fieldGroup:PrimaryStorage + - urn:alm:descriptor:com.tectonic.ui:text + - path: status + displayName: Deprecated + description: Deprecated + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced + - path: userlabels + displayName: User defined labels + description: A set of labels that help the PostgreSQL Operator manage + a PostgreSQL cluster + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + statusDescriptors: + - path: message + displayName: Initialization Message + description: Outputs a human readable message of the status of if the + PostgreSQL cluster initialization + x-descriptors: + - urn:alm:descriptor:text + - path: state + displayName: Initialization State + description: Outputs the state of if the PostgreSQL cluster was initialized + x-descriptors: + - urn:alm:descriptor:text + - name: pgreplicas.crunchydata.com + kind: Pgreplica + version: v1 + displayName: Postgres Replica Cluster Member + description: Represents a Postgres replica cluster member + resources: + - kind: Pgreplica + version: v1 + - kind: ConfigMap + version: v1 + - kind: Deployment + version: v1 + - kind: Job + version: v1 + - kind: Pod + version: v1 + - kind: ReplicaSet + version: v1 + - kind: Secret + version: v1 + - kind: Service + version: v1 + - kind: PersistentVolumeClaim + version: v1 + specDescriptors: + - path: size + displayName: Size + description: The desired number of member Pods for the deployment. + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + statusDescriptors: + - path: message + displayName: Message + description: Message + x-descriptors: + - urn:alm:descriptor:text + - path: state + displayName: State + description: State + x-descriptors: + - urn:alm:descriptor:text + - name: pgpolicies.crunchydata.com + kind: Pgpolicy + version: v1 + displayName: Postgres SQL Policy + description: Represents a Postgres sql policy + resources: + - kind: Pgpolicy + version: v1 + specDescriptors: + - path: name + displayName: Name + description: The pgpolicy name. + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - path: sql + displayName: SQL + description: The pgpolicy sql. + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + statusDescriptors: + - path: message + displayName: Message + description: Message + x-descriptors: + - urn:alm:descriptor:text + - path: state + displayName: State + description: State + x-descriptors: + - urn:alm:descriptor:text + - name: pgtasks.crunchydata.com + kind: Pgtask + version: v1 + displayName: Postgres workflow task + description: Represents a Postgres workflow task + resources: + - kind: Pgtask + version: v1 + specDescriptors: + - path: name + displayName: Name + description: The pgtask name. + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - path: tasktype + displayName: TaskType + description: The pgtask type. + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + statusDescriptors: + - path: message + displayName: Message + description: Message + x-descriptors: + - urn:alm:descriptor:text + - path: state + displayName: State + description: State + x-descriptors: + - urn:alm:descriptor:text + installModes: + - {type: OwnNamespace, supported: true} + - {type: SingleNamespace, supported: true} + - {type: MultiNamespace, supported: true} + - {type: AllNamespaces, supported: false} + install: + strategy: deployment + spec: + clusterPermissions: + - serviceAccountName: postgres-operator + rules: + - apiGroups: + - '' + resources: + - namespaces + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - '' + resources: + - serviceaccounts + verbs: + - get + - create + - update + - delete + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - get + - create + - update + - delete + - apiGroups: + - '' + resources: + - configmaps + - endpoints + - pods + - pods/exec + - secrets + - services + - persistentvolumeclaims + verbs: + - get + - list + - watch + - create + - patch + - update + - delete + - deletecollection + - apiGroups: + - '' + resources: + - pods/log + verbs: + - get + - list + - watch + - apiGroups: + - apps + resources: + - deployments + - replicasets + verbs: + - get + - list + - watch + - create + - patch + - update + - delete + - deletecollection + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - list + - watch + - create + - patch + - update + - delete + - deletecollection + - apiGroups: + - crunchydata.com + resources: + - pgclusters + - pgpolicies + - pgreplicas + - pgtasks + verbs: + - get + - list + - watch + - create + - patch + - update + - delete + - deletecollection + permissions: + - serviceAccountName: postgres-operator + rules: + - apiGroups: + - '' + resources: + - configmaps + - secrets + verbs: + - get + - list + - create + - update + - delete + - apiGroups: + - '' + resources: + - serviceaccounts + verbs: + - get + deployments: + - name: postgres-operator + spec: + replicas: 1 + selector: + matchLabels: + name: postgres-operator + vendor: crunchydata + template: + metadata: + labels: + name: postgres-operator + vendor: crunchydata + spec: + serviceAccountName: postgres-operator + securityContext: + runAsNonRoot: true + containers: + - name: apiserver + image: 'registry.developers.crunchydata.com/crunchydata/pgo-apiserver:centos8-4.7.5' + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: true + ports: + - containerPort: 8443 + readinessProbe: + httpGet: + path: /healthz + port: 8443 + scheme: HTTPS + initialDelaySeconds: 15 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /healthz + port: 8443 + scheme: HTTPS + initialDelaySeconds: 15 + periodSeconds: 5 + env: + - {name: NAMESPACE, valueFrom: {fieldRef: {fieldPath: "metadata.annotations['olm.targetNamespaces']"}}} + - {name: PGO_INSTALLATION_NAME, valueFrom: {fieldRef: {fieldPath: "metadata.namespace"}}} + - {name: PGO_OPERATOR_NAMESPACE, valueFrom: {fieldRef: {fieldPath: "metadata.namespace"}}} + - {name: CRUNCHY_DEBUG, value: 'false'} + - {name: EVENT_ADDR, value: 'localhost:4150'} + - {name: PORT, value: '8443'} + - name: CCP_IMAGE_PREFIX + value: registry.developers.crunchydata.com/crunchydata + - name: CCP_IMAGE_TAG + value: centos8-13.6-4.7.5 + - name: PGO_IMAGE_PREFIX + value: registry.developers.crunchydata.com/crunchydata + - name: PGO_IMAGE_TAG + value: centos8-4.7.5 + - name: RELATED_IMAGE_PGO_BACKREST + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_PGO_BACKREST_REPO + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest-repo:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_PGO_CLIENT + value: registry.developers.crunchydata.com/crunchydata/pgo-client:centos8-4.7.5 + - name: RELATED_IMAGE_PGO_RMDATA + value: registry.developers.crunchydata.com/crunchydata/pgo-rmdata:centos8-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_POSTGRES_EXPORTER + value: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter:centos8-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_PGADMIN + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_PGBADGER + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgbadger:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_PGBOUNCER + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_POSTGRES_HA + value: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-ha:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_POSTGRES_GIS_HA + value: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis-ha:centos8-13.6-3.1-4.7.5 + volumeMounts: + - mountPath: /tmp + name: tmp + - name: operator + image: 'registry.developers.crunchydata.com/crunchydata/postgres-operator:centos8-4.7.5' + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: true + env: + - {name: NAMESPACE, valueFrom: {fieldRef: {fieldPath: "metadata.annotations['olm.targetNamespaces']"}}} + - {name: PGO_INSTALLATION_NAME, valueFrom: {fieldRef: {fieldPath: "metadata.namespace"}}} + - {name: PGO_OPERATOR_NAMESPACE, valueFrom: {fieldRef: {fieldPath: "metadata.namespace"}}} + - {name: CRUNCHY_DEBUG, value: 'false'} + - {name: EVENT_ADDR, value: 'localhost:4150'} + - name: CCP_IMAGE_PREFIX + value: registry.developers.crunchydata.com/crunchydata + - name: CCP_IMAGE_TAG + value: centos8-13.6-4.7.5 + - name: PGO_IMAGE_PREFIX + value: registry.developers.crunchydata.com/crunchydata + - name: PGO_IMAGE_TAG + value: centos8-4.7.5 + - name: RELATED_IMAGE_PGO_BACKREST + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_PGO_BACKREST_REPO + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest-repo:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_PGO_CLIENT + value: registry.developers.crunchydata.com/crunchydata/pgo-client:centos8-4.7.5 + - name: RELATED_IMAGE_PGO_RMDATA + value: registry.developers.crunchydata.com/crunchydata/pgo-rmdata:centos8-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_POSTGRES_EXPORTER + value: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter:centos8-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_PGADMIN + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_PGBADGER + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgbadger:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_PGBOUNCER + value: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_POSTGRES_HA + value: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-ha:centos8-13.6-4.7.5 + - name: RELATED_IMAGE_CRUNCHY_POSTGRES_GIS_HA + value: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis-ha:centos8-13.6-3.1-4.7.5 + - name: scheduler + image: 'registry.developers.crunchydata.com/crunchydata/pgo-scheduler:centos8-4.7.5' + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: true + livenessProbe: + exec: + command: ["bash", "-c", "test -n \"$(find /tmp/scheduler.hb\ + \ -newermt '61 sec ago')\""] + failureThreshold: 2 + initialDelaySeconds: 60 + periodSeconds: 60 + env: + - {name: NAMESPACE, valueFrom: {fieldRef: {fieldPath: "metadata.annotations['olm.targetNamespaces']"}}} + - {name: PGO_INSTALLATION_NAME, valueFrom: {fieldRef: {fieldPath: "metadata.namespace"}}} + - {name: PGO_OPERATOR_NAMESPACE, valueFrom: {fieldRef: {fieldPath: "metadata.namespace"}}} + - {name: CRUNCHY_DEBUG, value: 'false'} + - {name: EVENT_ADDR, value: 'localhost:4150'} + - {name: TIMEOUT, value: '3600'} + volumeMounts: + - mountPath: /tmp + name: tmp + - name: event + image: 'registry.developers.crunchydata.com/crunchydata/pgo-event:centos8-4.7.5' + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: true + livenessProbe: + httpGet: + path: /ping + port: 4151 + initialDelaySeconds: 15 + periodSeconds: 5 + env: + - {name: TIMEOUT, value: '3600'} + volumeMounts: + - mountPath: /tmp + name: tmp + volumes: + - name: tmp + emptyDir: + medium: Memory + sizeLimit: 16Mi + icon: + - mediatype: image/svg+xml + base64data: PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzYzLjg1IDM2My4wNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzYzLjg1IDM2My4wNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiNGRkZGRkY7fQoJLnN0MXtmaWxsOnVybCgjU1ZHSURfMV8pO30KCS5zdDJ7ZmlsbDojNDE0MTQxO30KCS5zdDN7Y2xpcC1wYXRoOnVybCgjU1ZHSURfM18pO30KCS5zdDR7ZmlsbDpub25lO30KCS5zdDV7ZmlsbDp1cmwoI1NWR0lEXzRfKTt9Cgkuc3Q2e2ZpbGw6IzQ2NkJCMjt9Cgkuc3Q3e2ZpbGw6IzFDNDQ5Qjt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTM1My44LDIwOS41M2MtMC4yMy0zLjY1LDEuOTUtNy4wOCw1LjAxLTguOTVjMC4xMS01LjYxLDAuMzctMTEuMjIsMC40My0xNi44NGMwLjA0LTQuMS0wLjA1LTguMi0wLjQ0LTEyLjI5CgkJYy0wLjA4LTAuODktMC4yLTEuNzctMC4yOS0yLjY2Yy0wLjAzLTAuMjEtMC4wNS0wLjM3LTAuMDctMC41MWMtMC4wNy0wLjQxLTAuMTQtMC44My0wLjIyLTEuMjRjLTAuNDEtMi4xNS0wLjkyLTQuMjctMS41LTYuMzgKCQljLTAuNTEtMS44NC0wLjUtMy42Ni0wLjA3LTUuMzNjLTAuNjktMS4zNy0xLjE1LTIuODgtMS4zNS00LjRjLTAuMDYtMC40OC0wLjEzLTAuOTYtMC4yLTEuNDRjLTAuMDItMC4xMy0wLjA1LTAuMjktMC4wOC0wLjQ5CgkJYy0wLjIyLTEuMjMtMC40My0yLjQ2LTAuNjctMy42OGMtMC40Mi0yLjE0LTAuODgtNC4yNi0xLjQtNi4zOGMtMS4xLTQuNTUtMi40Mi05LjA1LTMuODktMTMuNDljLTEuNDQtNC4zNC0yLjktOC43LTQuNTItMTIuOTgKCQljLTAuNzgtMi4wNi0xLjYxLTQuMDktMi40Ny02LjExYy0wLjE0LTAuMy0wLjQ2LTEuMDMtMC42Mi0xLjM3Yy0wLjUxLTEuMDgtMS4wMi0yLjE2LTEuNTYtMy4yM2MtMi4wMS00LjAzLTQuMjMtNy45Ny02LjY1LTExLjc2CgkJYy0xLjExLTEuNzMtMi4yMi0zLjQ3LTMuMzYtNS4xOGMtMC42Mi0wLjkzLTEuMjctMS44NS0xLjk1LTIuNzRjLTAuMjEtMC4yOC0wLjQzLTAuNTYtMC42NS0wLjg0Yy0wLjA4LTAuMS0wLjE4LTAuMjItMC4zMS0wLjM3CgkJYy00Ljg0LTUuNTYtOS45OS0xMC44OC0xNC41Mi0xNi43MWMtMi4yLTAuMzEtNC4zNi0xLjI2LTYuMTEtMi42OGMtMS4xMy0wLjkxLTIuMjYtMS44NS0zLjQ0LTIuNzFjLTAuMjQtMC4xNy0wLjU2LTAuMzktMC44My0wLjU4CgkJYy0wLjQ0LTAuMzItMC44OC0wLjYzLTEuMzItMC45NGMtMi4zNS0xLjY1LTQuNzUtMy4yMy03LjE5LTQuNzVjLTQuOTgtMy4xMS0xMC4xMi01Ljk4LTE1LjMzLTguNjgKCQljLTEwLjUyLTUuNDUtMjEuMzctMTAuMjItMzIuMjktMTQuNzljLTQuNjItMS45My05LjI1LTMuODMtMTMuODgtNS43NGMtMC4zMi0wLjEzLTEuMjMtMC40OS0xLjQ2LTAuNTgKCQljLTAuNTUtMC4yMS0xLjExLTAuNDItMS42Ny0wLjYzYy0xLjMyLTAuNDgtMi42NC0wLjk1LTMuOTgtMS4zOWMtMi42My0wLjg2LTUuMjgtMS42NC03Ljk2LTIuMzNjLTUuNTUtMS40My0xMS4xOC0yLjQzLTE2Ljg2LTMuMTgKCQljLTAuMTMtMC4wMi0wLjI0LTAuMDMtMC4zMy0wLjA1Yy0wLjEzLTAuMDEtMC4yOS0wLjAyLTAuNDktMC4wNGMtMC41OS0wLjA1LTEuMTktMC4xMi0xLjc4LTAuMTdjLTEuMzQtMC4xMi0yLjY4LTAuMjMtNC4wMi0wLjMxCgkJYy0yLjY4LTAuMTgtNS4zNy0wLjI5LTguMDYtMC4zNWMtMTEuMzgtMC4yNi0yMi43NSwwLjQ1LTM0LjA4LDEuNDRjLTMsMC4yNi02LjAyLDAuNS05LjAxLDAuODZjLTAuNDgsMC4wNi0xLjA3LDAuMDgtMS41NiwwLjE5CgkJYy0wLjExLDAuMDItMC4yMSwwLjA1LTAuMywwLjA2Yy0xLjIzLDAuMjEtMi40NiwwLjQ1LTMuNjksMC43MWMtNS4xLDEuMDgtMTAuMTEsMi41OC0xNSw0LjRjLTEuMjgsMC40OC0yLjU1LDAuOTgtMy44MSwxLjQ5CgkJYy0wLjUsMC4yMS0xLjAxLDAuNDMtMS41MSwwLjYzYy0wLjA5LDAuMDQtMC4xNywwLjA3LTAuMjQsMC4xYy0yLjIyLDEuMDMtNC40MywyLjA3LTYuNiwzLjE4Yy00LjUyLDIuMzEtOC45NCw0Ljg0LTEzLjI3LDcuNDgKCQljLTguOTQsNS40Ni0xNy41NSwxMS40NC0yNi4yLDE3LjMzYy00LjMxLDIuOTQtOC43MSw1Ljc0LTEzLjAzLDguNjZjLTIuMjEsMS40OS00LjM5LDMuMDMtNi41Miw0LjY0YzAsMC0wLjQ5LDAuMzgtMC44NywwLjY3CgkJYy0wLjM4LDAuMzEtMC45OSwwLjgxLTEsMC44MmMtMC44NSwwLjcyLTEuNjksMS40Ni0yLjUsMi4yMWMtMS4xMywxLjA1LTIuMjMsMi4xMy0zLjI5LDMuMjVjLTAuNDgsMC41MS0wLjkzLDEuMDctMS40MywxLjU2CgkJYy0wLjEzLDAuMTMtMC40NCwwLjQ5LTAuNTcsMC42NGMtMS40MiwxLjk3LTIuNjUsNC4xMi0zLjksNi4xOWMtMy4yMSw1LjMzLTYuNCwxMC41NC0xMC4xNiwxNS41Yy0xLjgyLDIuNDEtNC43MSwzLjI3LTcuNTgsMy4wNgoJCUM2Ljk2LDEyMy45MiwwLDE1MS42NywwLDE4MS4wNWMwLDEwMC41Miw4MS40OCwxODIsMTgyLDE4MmM4Ny41OSwwLDE2MC43Mi02MS44NywxNzguMDktMTQ0LjI5CgkJQzM1Ni41LDIxNy4yMSwzNTQuMDYsMjEzLjcsMzUzLjgsMjA5LjUzeiIvPgoJPGc+CgkJPGc+CgkJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTgxLjkyNjMiIHkxPSIwIiB4Mj0iMTgxLjkyNjMiIHkyPSIzMzUuNDA2OCI+CgkJCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMjU5Q0Q3Ii8+CgkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMDY2OEIyIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02OS43OSwyOTAuNjdjLTAuNy0zLjg1LTEuMTUtNy43MS0xLjI4LTExLjU5Yy0wLjEzLTMuODcsMC4wNS03Ljc2LDAuNjEtMTEuNjYKCQkJCWMwLjc1LTUuMTYsMi40OS05LjgyLDQuODUtMTQuMTZjMi4zNS00LjM0LDUuMzItOC4zOCw4LjUtMTIuMzFjMC43LTAuODYsMS40MS0xLjcxLDIuMTEtMi41N2MwLjA2LTAuMDcsMC4wNS0wLjE5LDAuMTQtMC42MQoJCQkJYy04LjIyLTEuMDUtMTQuMTctNS4wMy0xNy4zLTEyLjY0Yy0xLjM1LTMuMjctMy43NC00LjY0LTYuNTYtNS4zM2MtMC45NC0wLjIzLTEuOTMtMC4zOC0yLjk0LTAuNWMtMS43MS0wLjItMy40NS0wLjEyLTUuMTQtMC4zOAoJCQkJYy0zLjI0LTAuNS01LjQ1LTIuMjQtNi4zNS00LjkzYy0wLjMtMC45LTAuNDUtMS45LTAuNDUtM2MwLjAxLTEuNi0wLjA5LTIuNjgtMi4wMy0yLjk5Yy0yLjk5LTAuNDgtNS40LTEuNS03LjMxLTIuODkKCQkJCWMtMC45NS0wLjY5LTEuNzgtMS40OC0yLjUtMi4zNGMtMC45MS0xLjA5LTEuNTctMi4zMy0yLjEzLTMuNjJjLTEuMTctMi43My0xLjY2LTUuNzYtMS41My04Ljc1YzAtMC4wMywwLTAuMDUsMC0wLjA4CgkJCQljMC4wNS0xLjExLDAuMTgtMi4yMSwwLjM3LTMuMjhjMS4yMS02Ljc0LDIuOTktMTMuMzgsNC40Mi0yMC4wOGMxLjE5LTUuNjIsMi4yMi0xMS4yOCwzLjM1LTE2LjkxCgkJCQljMS4yNC02LjE3LDUuMjMtMTAuNDMsMTAuMTEtMTMuODhjMS4zMy0wLjk0LDIuMzgtMS45OSwzLjE4LTMuMnMxLjM1LTIuNTcsMS42OS00LjEzYzEuMi01LjUsNC4wOS04LjYxLDguNjMtOS4zNAoJCQkJYzEuNTEtMC4yNSwzLjItMC4yMyw1LjA3LDAuMDVjMS40LDAuMjEsMi43OCwwLjU0LDQuMTksMC43YzEuNjYsMC4xOSwzLjI5LDAuMjgsNC45LDAuMjRjNC44Mi0wLjEyLDkuMzctMS4zOCwxMy41Ni00LjQzCgkJCQljNi4wNS00LjM5LDEyLjI1LTguNTksMTguMjgtMTMuMDJjMC43Ny0wLjU2LDEuMjEtMi4wMiwxLjIzLTMuMDdjMC4wOS00LjM1LTAuMi04LjctMC4wNC0xMy4wNGMwLjA5LTIuNTUsMC40OS00Ljg2LDEuMTgtNi45NAoJCQkJYzIuMDgtNi4yNCw2Ljg1LTEwLjM3LDE0LjIyLTEyLjIyYzUuMTktMS4zLDkuNDMtNC4wNywxMy4yNC03LjYzYzAuMjktMC4yOCwwLjU5LTAuNzYsMC43OC0xLjI0YzAuMTktMC40OCwwLjI3LTAuOTUsMC4xMi0xLjIxCgkJCQljLTEuNDQtMi42NC0xLjk4LTUuMTQtMS44OC03LjU1YzAuMDctMS42LDAuNDItMy4xNiwwLjk3LTQuNjljMC44My0yLjMsMi4xMi00LjUzLDMuNTktNi43M2MwLjQ1LTAuNjcsMC45Mi0xLjMyLDEuNjItMi4zMQoJCQkJYzEuMDcsMS4xNSwyLjE5LDIuMjUsMy4zLDMuMzZjMy4zMSwzLjMzLDYuNDYsNi43NSw3LjUxLDExLjk3YzYuMDgtMS4zLDEyLjI5LTIuNTQsMTguNDYtMy45N2M0LjU2LTEuMDYsOS4xMS0xLjc1LDEzLjY0LTIuMTEKCQkJCWMxMy41OS0xLjA4LDI3LjAxLDAuODYsNDAuMjQsNS4wOGMzLjcyLDEuMTgsNy4xNSwyLjksMTAuNCw0LjljMi43NCwxLjY4LDUuMzYsMy41Miw3Ljc1LDUuN2MxLjc0LDEuNTksMy4zOSwzLjMsNC45Myw1LjEyCgkJCQljMi45MSwzLjQyLDUuODEsNi44NSw4LjY4LDEwLjNjNS43NSw2LjksMTEuMzksMTMuODcsMTYuODIsMjAuOThjMi43MiwzLjU2LDUuMzgsNy4xNSw3Ljk3LDEwLjc5CgkJCQljNS4xOSw3LjI4LDEwLjExLDE0Ljc1LDE0LjY0LDIyLjQ3YzQuNTMsNy43Myw4LjY5LDE1LjcxLDEyLjM0LDI0LjA0YzQuMTQsOS40NCw3LjksMTkuMDQsMTEuOTUsMjguNTIKCQkJCWMwLjY0LDEuNSwxLjY4LDMsMi45MSw0LjAzYzEyLjQyLDEwLjQxLDI0LjA1LDIxLjU1LDM0LjU2LDMzLjY5YzIuODQtMTIuNzcsNC40Ni0yNi4wMSw0LjQ2LTM5LjY0CgkJCQljMC0zNy41MS0xMS4zNy03Mi4zNS0zMC44Mi0xMDEuMzFjLTYuNTMtOS42My0xMy45NS0xOC42Mi0yMi4xNS0yNi44MmMtMjAuNjUtMjAuNjUtNDYuMjEtMzYuMzgtNzQuNzUtNDUuMjgKCQkJCUMyMTguOTksMi44OCwyMDAuNzgsMCwxODEuOTIsMEMxMjUuMzQsMCw3NC42OSwyNS44OSw0MS4yLDY2LjQ2Yy0zLjY3LDQuNDQtNy4xMiw5LjA3LTEwLjM2LDEzLjg1CgkJCQljLTE5LjQ2LDI4Ljk2LTMwLjgzLDYzLjgtMzAuODMsMTAxLjMxYzAsNjQuODIsMzQsMTIxLjU2LDg1LjA0LDE1My43OGMtMy4zMi02Ljc5LTYuMzMtMTMuNjktOC44NC0yMC44CgkJCQlDNzMuNDcsMzA2Ljg2LDcxLjI4LDI5OC45LDY5Ljc5LDI5MC42N3oiLz4KCQkJPGc+CgkJCQk8cGF0aCBjbGFzcz0ic3QyIiBkPSJNNzguNTcsMTQ4LjJsLTAuMTQsMC43N2MwLDAsMy40NSwyMC4zNSwzNy4xNiw3Ljc2Yy0yLjExLTEuNTctMy4yMy00LjAyLTMuMi03LjYyCgkJCQkJYy02LjUyLDUuODYtMTMuODIsNy4yLTIxLjYxLDYuMzFDODUuMTEsMTU0Ljc4LDgwLjk3LDE1MS45Nyw3OC41NywxNDguMnoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik04Mi45NywxMjYuMTlsMC4wOCwwLjAxYzAuMDEtMC4wMSwwLjAxLTAuMDIsMC4wMi0wLjAzQzgzLjAzLDEyNi4xOCw4MywxMjYuMTksODIuOTcsMTI2LjE5eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTk3LjEsMTQ3Ljk1YzIuNDUtMi4yMSwyLjg2LTYuNSwxLTkuODFjLTEuNDUtMi41OS00LjQxLTMuNjgtNy42NC0yLjU1Yy0yLjMzLDAuODEtNC4yOCwyLjEzLTMuOTMsNS4xNwoJCQkJCWMxLjUzLTAuMjIsMi44Ny0wLjQsNC42OS0wLjY2Yy0xLjQxLDMuMTctMC40NSw1LjMxLDIuMjMsNy4wMWMtMS4xNSwwLjI2LTEuODIsMC40MS0yLjksMC42NQoJCQkJCUM5MywxNDkuODcsOTUuMDgsMTQ5Ljc4LDk3LjEsMTQ3Ljk1eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTEyMi43OSwxMjAuMThjLTUuNDMsMi41NC0xMC43OSwzLjc2LTE2LjkxLDEuODVjLTMuMzItMS4wMy03LjIyLTAuMTgtMTAuODYtMC4xOAoJCQkJCWM2LjU2LDEuMjEsMTIsMy43OSwxNS4xNiw5LjMzYzUuMDgtNC4wNCwxMC4wOC04LjAzLDE1LjE4LTEyLjA5QzEyNC40MiwxMTkuNDgsMTIzLjU5LDExOS44MSwxMjIuNzksMTIwLjE4eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTMyNC44MywxODcuNThjLTEuMjQtMS4wNC0yLjI3LTIuNTQtMi45MS00LjAzYy00LjA1LTkuNDgtNy44LTE5LjA4LTExLjk1LTI4LjUyCgkJCQkJYy0zLjY2LTguMzItNy44MS0xNi4zMS0xMi4zNC0yNC4wNGMtNC41My03LjczLTkuNDUtMTUuMTktMTQuNjQtMjIuNDdjLTIuNTktMy42NC01LjI2LTcuMjQtNy45Ny0xMC43OQoJCQkJCWMtNS40My03LjEyLTExLjA4LTE0LjA4LTE2LjgyLTIwLjk4Yy0yLjg3LTMuNDUtNS43Ny02Ljg4LTguNjgtMTAuM2MtMS41NS0xLjgyLTMuMTktMy41My00LjkzLTUuMTIKCQkJCQljLTIuMzktMi4xNy01LjAxLTQuMDItNy43NS01LjdjLTMuMjUtMi02LjY4LTMuNzEtMTAuNC00LjljLTEzLjIzLTQuMjEtMjYuNjUtNi4xNS00MC4yNC01LjA4Yy00LjUzLDAuMzYtOS4wOCwxLjA1LTEzLjY0LDIuMTEKCQkJCQljLTYuMTcsMS40My0xMi4zNywyLjY3LTE4LjQ2LDMuOTdjLTEuMDYtNS4yMi00LjItOC42NC03LjUxLTExLjk3Yy0xLjEtMS4xMS0yLjIzLTIuMjEtMy4zLTMuMzZjLTAuNywwLjk5LTEuMTcsMS42NC0xLjYyLDIuMzEKCQkJCQljLTEuNDcsMi4yMS0yLjc2LDQuNDQtMy41OSw2LjczYy0wLjU1LDEuNTMtMC45MSwzLjA5LTAuOTcsNC42OWMtMC4xLDIuNCwwLjQzLDQuOSwxLjg4LDcuNTVjMC4xNCwwLjI2LDAuMDYsMC43My0wLjEyLDEuMjEKCQkJCQljLTAuMTksMC40OC0wLjQ4LDAuOTYtMC43OCwxLjI0Yy0zLjgsMy41Ni04LjA1LDYuMzMtMTMuMjQsNy42M2MtNy4zNywxLjg1LTEyLjE0LDUuOTgtMTQuMjIsMTIuMjIKCQkJCQljLTAuNjksMi4wOC0xLjA5LDQuNC0xLjE4LDYuOTRjLTAuMTYsNC4zNCwwLjE0LDguNywwLjA0LDEzLjA0Yy0wLjAyLDEuMDUtMC40NywyLjUxLTEuMjMsMy4wNwoJCQkJCWMtNi4wMyw0LjQzLTEyLjIyLDguNjMtMTguMjgsMTMuMDJjLTQuMTksMy4wNC04Ljc0LDQuMzEtMTMuNTYsNC40M2MtMS42MSwwLjA0LTMuMjQtMC4wNS00LjktMC4yNAoJCQkJCWMtMS40LTAuMTYtMi43OS0wLjUtNC4xOC0wLjdjLTEuODctMC4yOC0zLjU2LTAuMy01LjA3LTAuMDVjLTQuNTMsMC43NC03LjQyLDMuODQtOC42Myw5LjM0Yy0wLjM0LDEuNTctMC44OSwyLjkzLTEuNjksNC4xMwoJCQkJCWMtMC44LDEuMjEtMS44NCwyLjI2LTMuMTgsMy4yYy00Ljg4LDMuNDUtOC44Nyw3LjcxLTEwLjExLDEzLjg4Yy0xLjEzLDUuNjMtMi4xNiwxMS4yOS0zLjM1LDE2LjkxCgkJCQkJYy0xLjQyLDYuNzEtMy4yLDEzLjM0LTQuNDIsMjAuMDhjLTAuMTksMS4wNy0wLjMyLDIuMTctMC4zNywzLjI4YzAsMC4wMywwLDAuMDUsMCwwLjA4Yy0wLjEzLDIuOTksMC4zNSw2LjAzLDEuNTMsOC43NQoJCQkJCWMwLjU2LDEuMjksMS4yMiwyLjUzLDIuMTMsMy42MmMwLjcxLDAuODYsMS41NCwxLjY1LDIuNSwyLjM0YzEuOTEsMS4zOSw0LjMyLDIuNCw3LjMxLDIuODljMS45NCwwLjMxLDIuMDQsMS4zOCwyLjAzLDIuOTkKCQkJCQljMCwxLjEsMC4xNSwyLjEsMC40NSwzYzAuOSwyLjY5LDMuMTEsNC40Myw2LjM1LDQuOTNjMS42OSwwLjI2LDMuNDQsMC4xOCw1LjE0LDAuMzhjMS4wMSwwLjEyLDIsMC4yNywyLjk0LDAuNQoJCQkJCWMyLjgyLDAuNjgsNS4yMSwyLjA2LDYuNTUsNS4zM2MzLjEzLDcuNiw5LjA4LDExLjU4LDE3LjMsMTIuNjRjLTAuMDksMC40MS0wLjA4LDAuNTQtMC4xNCwwLjYxYy0wLjcsMC44Ni0xLjQxLDEuNzEtMi4xMSwyLjU3CgkJCQkJYy0zLjE5LDMuOTMtNi4xNSw3Ljk2LTguNSwxMi4zMWMtMi4zNSw0LjM1LTQuMSw5LTQuODUsMTQuMTZjLTAuNTcsMy45LTAuNzUsNy43OS0wLjYxLDExLjY2YzAuMTMsMy44OCwwLjU4LDcuNzQsMS4yOCwxMS41OQoJCQkJCWMxLjQ5LDguMjMsMy42NywxNi4xOSw2LjQxLDIzLjk0YzIuNTEsNy4xLDUuNTIsMTQuMDEsOC44NCwyMC44YzYuMjUsMy45NCwxMi43NSw3LjQ5LDE5LjQ4LDEwLjY2CgkJCQkJYzIuMTYtOC42NSw0Ljc0LTE3LjI0LDcuODktMjUuNzNjMS44LTQuODcsNC40NS05LjU1LDcuMzYtMTMuODdjNS44Ny04LjcxLDE0LjIxLTEyLjkzLDI0Ljg3LTEyLjE3CgkJCQkJYzIzLjI4LDEuNjUsNDUuMzMsNy41LDY2LjEyLDE4LjMzYzE3LjAyLDguODYsMjcuNzMsMjIuMSwzMi44NSwzOS45NmM4LTIuODksMTUuNzktNi4yLDIzLjIyLTEwLjEzCgkJCQkJYy0wLjA1LTAuMTMtMC4xMi0wLjIzLTAuMTUtMC4zOGMtMi42Ny0xMy40MywxLjEyLTM2LjE1LDE3LjQyLTQ1Ljg1YzkuNzctNS44MSwyMC4zNy0xMC4yMywzMC42NC0xNS4xOAoJCQkJCWMyLjY5LTEuMjksNS41Ny0yLjE5LDguNzQtMy40MmMtMi40MS0xLjM3LTQuNS0yLjU0LTYuNTctMy43NWMtMTAuNTktNi4xOC0yMC41NC0xMy4yMS0yOS44Ny0yMS4yNAoJCQkJCWMtMTMuMDMtMTEuMjEtMTUuNzEtMjUuMDMtMTEuNTYtNDAuODljMC44MS0zLjEsMi02LjEsMy4wOC05LjM0Yy0wLjczLDAuNTMtMS4zMywwLjk2LTIuNTEsMS44MQoJCQkJCWM0LjM5LTEwLjQ3LDUuOC0yMC44Myw1LjY1LTMxLjQxYy0wLjA2LTQuNTQtMC43OS05LjA3LTAuODUtMTMuNjFjLTAuMDYtMy43MiwwLjQxLTcuNDUsMC42Ni0xMS4xN2MwLjEzLTIsMC4yOC0zLjk5LDAuNDUtNi40OAoJCQkJCWMtNC45MSwxLjItNy45OC0wLjkxLTkuNjktNC44OGMwLjc5LDcuMjQsMi4xNywxNC40MiwyLjIxLDIxLjYxYzAuMDUsOS41LTMuOSwxOC4xNy04LjI2LDI2LjM2CgkJCQkJYy04Ljg3LDE2LjY4LTIyLjk5LDI3LjkzLTM5LjU2LDM2LjM2Yy02LjQ2LDMuMjktMTIuNzMsMi4zOS0xOC44Mi0xLjA0Yy0yLjExLTEuMTktNC4xNS0yLjUyLTYuMjctMy42OQoJCQkJCWMtMS45Ny0xLjA5LTIuOTEtMi4zMi0yLjIyLTQuODNjMC42OC0yLjQ4LDIuMTYtMy4xOSw0LjM3LTMuMzFjMC4xLTAuMDEsMC4yLTAuMDQsMC4zLTAuMDJjNi4zNCwxLjA1LDkuNTgtMi45MSwxMS44My03Ljc5CgkJCQkJYzIuMTgtNC43NS0wLjA0LTktMi40NS0xMy4zYy0yLjA3LDAuNTgtNC4wNywwLjk3LTUuOTEsMS43NGMtMC44NywwLjM2LTEuNjEsMS4zNy0yLjA5LDIuMjVjLTMuNzEsNi44My03LjExLDEzLjgzLTExLjEyLDIwLjQ3CgkJCQkJYy0xNy4xNywyNi41Mi00NS40MSwxOC4xMi00NS40MSwxOC4xMmMtMTUuMjYtMi42Ny0zNy43OC0wLjc2LTM3Ljc4LTAuNzZjLTguNzgsMS41My0yNC40MiwxLjkxLTI0LjQyLDEuOTEKCQkJCQljLTExLjgzLDAtMTQuODgtMTIuMzQtMTQuODgtMTIuMzRjNi42MS00LjMyLDQ2LjA0LDEuNzgsNDYuMDQsMS43OGMyNi4wNCwzLjc1LDQzLjUyLTYuMTIsNTAuMTMtMTAuNzcKCQkJCQljLTM0Ljc0LDE2LjA4LTc2LjUyLTYuMjktMTEyLjYsMi45Yy0zLjU0LDAuOS01LjA0LTQuNTYtMS41MS01LjQ2YzI5LjMxLTcuNDYsNjMuNDQsNi40Miw5My40MSwyLjY3CgkJCQkJYzEwLjk5LTIuMDUsMjEuMjYtNi41MSwzMC44LTEyLjU4YzMuOTktMi41NCw2LjE2LTYuMzgsNi4xNC0xMS4yM2MtMC4wMi00LjM0LDAuMzItOC43Ni0wLjM0LTEzLjAyCgkJCQkJYy0xLjk5LTEyLjktMTYuNTgtMjQuMDMtMjkuOTMtMjMuMDljMCwwLDIwLjI1LDEyLjIsMjEuODgsMjMuMzRjNS41NywyMS43MS0zMS41OCwyNi42NS0zMS41OCwyNi42NXMtMjEuOTgsNC44OS00OC41OS0zLjkxCgkJCQkJYzAsMC0xOS4yMi00LjMzLTQ1LjM4LDMuMDZjMCwwLTkuMTIsMy4zOC0xMC4yNi00Ljg0Yy0wLjgxLTUuODQsMS4wNy0xOS44LDcuNTQtMzkuM2wtMC4xLTAuMmMwLjA2LDAuMDEsMC4xMS0wLjAxLDAuMTYtMC4wMQoJCQkJCWMwLjIxLTAuNjMsMC4zOC0xLjIsMC42LTEuODRjMCwwLDIuNzUsMC45Myw2LjY4LDEuMDRjMTAuMDgtMi45OCwxNC44My0xMy4zMiwxNC44My0xMy4zMmwtOC4wNCw1LjY1bDAuNTgtMS4wNgoJCQkJCWMtMy4wNSw0LjAxLTguOTgsNS4yOC0xMy4xNywyLjMxYy0yLjYxLTEuODUtMi41NC00LjI5LDAuMzQtNi4zOWMwLjY2LTAuNDgsMS4zNi0wLjkzLDIuMDUtMS4zOGMwLjAxLDAuMjEtMC4xMiwwLjQtMC4wNywwLjYxCgkJCQkJYzIuNjksMC4zOSw3LjQ1LTAuMjUsOS4xNS0yLjU2YzEuMDgtMS40NywxLjMyLTYuNy0xLjMzLTdjMC45LTUsMy4yOC03LjAzLDkuMDUtNy4wNWMzLjg0LTAuMDIsNy42OSwwLjI5LDExLjUzLDAuMTIKCQkJCQljNi4wOS0wLjI2LDExLjctMi4yLDE2LjU4LTUuODdjMTMuNDEtMTAuMDksMjYuNzYtMjAuMjgsNDAuMTMtMzAuNDNjMC4xNC0wLjEsMC4xNy0wLjM0LDAuMy0wLjZjLTIuODktMC4xMy01Ljc2LTAuMS04LjU5LTAuNDQKCQkJCQljLTMuNTItMC40Mi02LjcxLTEuNjctOC41LTUuMDZjLTIuMDktMy45Ni0wLjQ3LTYuOSwzLjcyLTguMjhjMy43OC0xLjI1LDcuODQtMi42NSwxMC44NC01LjEyCgkJCQkJYzE4LjQyLTE1LjIsNDAuMDgtMTcuNzEsNjIuNjctMTYuNDJjNi4zNCwwLjM2LDEyLjY2LDEuNDksMTguOTEsMi43OWMtMi4wNSwwLjQ5LTExLjQ1LDIuOTYtMTQuMzYsNy41NwoJCQkJCWMtMC45OSwxLjc2LTIuNjUsMy42My0zLjAzLDUuNzRjLTAuMjcsMS40OCwxLjIyLDMuMjgsMS45Miw0Ljk0YzEuMjQtMC45NiwyLjUtMS44OSwzLjctMi44OWMwLjI4LTAuMjMsMC4zOC0wLjcxLDAuNS0xLjA5CgkJCQkJYzEuNzItNS4zNiw2LjE2LTcuOTUsMTAuODYtMTAuOThjMC40MywyLjEsMC42MSwzLjc5LDEuMTMsNS4zOGMwLjcsMi4xNi0wLjI2LDMuNTgtMS44OCw0LjYyYy0wLjgyLDAuNTMtMS45NiwwLjU2LTIuOTYsMC44MgoJCQkJCWMtMC4yLTEuMTEtMC41Ni0yLjIyLTAuNTMtMy4zMmMwLjAyLTAuOSwwLjUxLTEuNzksMC43OS0yLjY4Yy00Ljk4LDMuMjMtNi44OCw4LjItOC43MywxMy40MWMxLjE4LDAuNDIsMi4wMywwLjcyLDIuMzIsMC44MgoJCQkJCWMtMC41OCwxLjg5LTEuMTMsMy42OC0xLjcsNS41NGw0LjMxLTIuMTNjMi44Ni0xLDUuMDQtMS43Myw3LjItMi41M2MzLjM0LTEuMjQsNC45NC0zLjc3LDQuOTYtNy4yNAoJCQkJCWMwLjA0LTUuNDktMS42LTEwLjU2LTMuOTktMTUuODdjMC43OCwwLjE2LDEuNTYsMC4yOCwyLjM0LDAuNDVjNy42OSwxLjY4LDE0LjEyLDYuMDQsMTkuNTQsMTEuNjcKCQkJCQljNC4yNyw0LjQ0LDguNzgsOC44MywxMi4xNywxMy45MWM3Ljc2LDExLjYxLDE4LjQ0LDIwLjc3LDI2LjA5LDMyLjQ4YzEzLjgyLDIxLjE0LDI2LjEzLDQzLjAzLDM1LjIsNjYuNjUKCQkJCQljMC4zOSwxLjAxLDAuNzIsMi4wNSwxLjEyLDMuMThjLTIuOTQsMC45My01LjcyLDEuOC04LjQzLDIuNjVjMTcuNzgsNy4zMSwzMC4wOCwyMS4zOSw0Mi45OSwzNC41NQoJCQkJCWMzLjM2LDMuNDMsNi41Myw3LjAyLDkuNjEsMTAuNjdjMC44NC0zLjAyLDEuNjYtNi4wNiwyLjM1LTkuMTRDMzQ4Ljg3LDIwOS4xMiwzMzcuMjUsMTk3Ljk5LDMyNC44MywxODcuNTh6IE0xNjMuMTcsMjYyLjM0CgkJCQkJYzIwLjY4LDIuMzQsNDAuOTYsMS40Miw1OC42Mi0xMS41MWM3LjI0LTUuMywxMy45LTExLjM4LDIwLjg3LTE3LjA2YzEuMDYtMC44NiwyLjI3LTEuNzUsMy41NS0yLjA3CgkJCQkJYzguODYtMi4xOSwxNi4yNi02LjU0LDIxLjYyLTE0LjA4YzAuMTUtMC4yMSwwLjQzLTAuMzIsMS4yOS0wLjk0Yy0wLjg5LDIuNjItMS4xOSw0Ljg0LTIuMzEsNi41Yy0xLjgxLDIuNjgtMi4yMSw1LjUyLTIuNCw4LjU4CgkJCQkJYy0xLjA1LDE2LjczLTIuOTIsMzMuMjctMTEuNTQsNDguMThjLTAuMSwwLjE3LTAuMiwwLjM1LTAuMjgsMC41NGMtNS42LDEzLjU2LTE2LjUsMTguMzEtMzAuMywxOC4xNAoJCQkJCWMtMTAuMjktMC4xMy0yMC4yNS0yLjQtMzAuMTMtNWwtNTUuMzEtMTQuNzNjLTYuNDQtMi42OS02Ljk5LTQuMDYtNC4xMi0xMC4yM2MyLjk4LTYuNCw2LjAyLTEyLjc3LDkuMjQtMTkuNTkKCQkJCQlDMTQ1Ljk2LDI1OC45NiwxNTQuNCwyNjEuMzUsMTYzLjE3LDI2Mi4zNHogTTg3LjM1LDI0Ny40NWM4LjU5LTEwLjQ0LDguNC0xMS4wNCwyMS44MS0xMS40MmM5LjUyLTAuMjcsMTkuMDksMC45MSwyOS4yOSwxLjQ5CgkJCQkJYy0wLjg1LDEuOTktMS4yOCwzLjA5LTEuNzgsNC4xNWMtNC44MywxMC4zNC05LjczLDIwLjY2LTE0LjQ3LDMxLjA0Yy0wLjg4LDEuOTMtMS44LDIuMzQtMy45LDEuOTkKCQkJCQljLTYuMzktMS4wNi0xMi42Ny0wLjYtMTkuMDQsMi44MWMxLjYzLDAuMiwyLjg3LDAuMTEsMy45MiwwLjUzYzIuNjQsMS4wNyw1LjY2LDEuODUsNy42NywzLjY5YzMuNTksMy4yOCw0LjQ5LDYuOTMsMi40MywxMi4zMQoJCQkJCWMtNS42OSwxNC44OC0xMC4yNiwzMC4xOS0xNS4yNyw0NS4zM2MtMC4xOCwwLjU2LTAuMzYsMS4xMi0wLjU0LDEuNjdjLTAuMzIsMC4xLTAuNjQsMC4yMS0wLjk2LDAuMzIKCQkJCQljLTMuMjctNy4xNC02LjcyLTE0LjE5LTkuNzUtMjEuNDNjLTUuMTMtMTIuMjUtOC45LTI0Ljg5LTEwLjIxLTM4LjJDNzUuMjksMjY4LjcxLDc5LjA5LDI1Ny41LDg3LjM1LDI0Ny40NXoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik0xNTcuNTYsMTAxLjljMi45MS0yLjcxLDUuNDMtNC4yNyw3LjA0LTUuMWMtMC4zOSwyLjEzLDEuNyw1LjY5LDUuOTUsNi4yMmM3Ljk2LDAuMTEsNy44OC05LjIzLDcuODgtOS4yMwoJCQkJCWMyLjA2LTAuNTUsNC40Ni0wLjc5LDQuNDYtMC43OUMxNjYuMTksODUuMDIsMTU3LjU2LDEwMS45LDE1Ny41NiwxMDEuOXoiLz4KCQkJPC9nPgoJCTwvZz4KCTwvZz4KPC9nPgo8L3N2Zz4K diff --git a/operators/postgresql/4.7.5/metadata/annotations.yaml b/operators/postgresql/4.7.5/metadata/annotations.yaml new file mode 100644 index 000000000000..932146ab2a39 --- /dev/null +++ b/operators/postgresql/4.7.5/metadata/annotations.yaml @@ -0,0 +1,9 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: postgresql + operators.operatorframework.io.bundle.channels.v1: stable + operators.operatorframework.io.bundle.channel.default.v1: stable + com.redhat.openshift.versions: "v4.6-v4.8" \ No newline at end of file