From 5f0fb8e6e6486d66b4baca9fa6f902d042af1e5e Mon Sep 17 00:00:00 2001
From: Chris Bandy
Date: Tue, 14 Jul 2020 14:49:12 -0500
Subject: [PATCH 01/77] Fix typos identified by go vet in internal package
Tests pass when running `go test ./internal/...` with Go 1.13, but it
emits warnings and exits non-zero. The `./internal/operator` package
fails to build on Go 1.14 because the `%w` verb is not allowed in
formatted log messages.
`go test ./internal/... ./pkg/...` now exits zero in both Go 1.13 and
1.14.
See: 63ed75984cf286818f29fd5e9dcf108653f89af3
---
internal/apiserver/clusterservice/clusterimpl.go | 10 +++++-----
internal/apiserver/clusterservice/clusterservice.go | 4 ++--
internal/apiserver/labelservice/labelimpl.go | 2 +-
internal/apiserver/pgdumpservice/pgdumpimpl.go | 2 +-
internal/apiserver/pgouserservice/pgouserimpl.go | 2 +-
internal/apiserver/policyservice/policyimpl.go | 4 ++--
internal/apiserver/pvcservice/pvcservice.go | 2 +-
internal/apiserver/statusservice/statusimpl.go | 2 +-
internal/apiserver/upgradeservice/upgradeimpl.go | 2 +-
internal/controller/manager/controllermanager.go | 2 +-
internal/controller/pgtask/pgtaskcontroller.go | 6 +++---
internal/operator/common.go | 4 ++--
internal/operator/task/rmdata.go | 2 +-
13 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/internal/apiserver/clusterservice/clusterimpl.go b/internal/apiserver/clusterservice/clusterimpl.go
index 049a23758e..2524a33b47 100644
--- a/internal/apiserver/clusterservice/clusterimpl.go
+++ b/internal/apiserver/clusterservice/clusterimpl.go
@@ -339,7 +339,7 @@ func getServices(cluster *crv1.Pgcluster, ns string) ([]msgs.ShowClusterService,
func TestCluster(name, selector, ns, pgouser string, allFlag bool) msgs.ClusterTestResponse {
var err error
- log.Debugf("TestCluster(%s,%s,%s,%s,%s): Called",
+ log.Debugf("TestCluster(%s,%s,%s,%s,%v): Called",
name, selector, ns, pgouser, allFlag)
response := msgs.ClusterTestResponse{}
@@ -355,7 +355,7 @@ func TestCluster(name, selector, ns, pgouser string, allFlag bool) msgs.ClusterT
// be used
if selector == "" {
if allFlag {
- log.Debug("selector is : all clusters in %s", ns)
+ log.Debugf("selector is : all clusters in %s", ns)
} else {
selector = "name=" + name
log.Debugf("selector is: %s", selector)
@@ -446,7 +446,7 @@ func TestCluster(name, selector, ns, pgouser string, allFlag bool) msgs.ClusterT
case msgs.PodTypeReplica:
instance.InstanceType = msgs.ClusterTestInstanceTypeReplica
}
- log.Debugf("Instance found with attributes: (%s, %s, %s)",
+ log.Debugf("Instance found with attributes: (%s, %s, %v)",
instance.InstanceType, instance.Message, instance.Available)
// Add the report on the pods to this set
result.Instances = append(result.Instances, instance)
@@ -514,7 +514,7 @@ func TestCluster(name, selector, ns, pgouser string, allFlag bool) msgs.ClusterT
}
}
- log.Debugf("Endpoint found with attributes: (%s, %s, %s)",
+ log.Debugf("Endpoint found with attributes: (%s, %s, %v)",
endpoint.InstanceType, endpoint.Message, endpoint.Available)
// append the endpoint to the list
@@ -1699,7 +1699,7 @@ func UpdateCluster(request *msgs.UpdateClusterRequest) msgs.UpdateClusterRespons
response.Status = msgs.Status{Code: msgs.Ok, Msg: ""}
response.Results = make([]string, 0)
- log.Debugf("autofail is [%t]\n", request.Autofail)
+ log.Debugf("autofail is [%v]\n", request.Autofail)
switch {
case request.Startup && request.Shutdown:
diff --git a/internal/apiserver/clusterservice/clusterservice.go b/internal/apiserver/clusterservice/clusterservice.go
index e69aae067f..d0f31df636 100644
--- a/internal/apiserver/clusterservice/clusterservice.go
+++ b/internal/apiserver/clusterservice/clusterservice.go
@@ -131,7 +131,7 @@ func ShowClusterHandler(w http.ResponseWriter, r *http.Request) {
namespace := request.Namespace
allflag := request.AllFlag
- log.Debugf("ShowClusterHandler: parameters name [%s] selector [%s] ccpimagetag [%s] version [%s] namespace [%s] allflag [%s]", clustername, selector, ccpimagetag, clientVersion, namespace, allflag)
+ log.Debugf("ShowClusterHandler: parameters name [%s] selector [%s] ccpimagetag [%s] version [%s] namespace [%s] allflag [%v]", clustername, selector, ccpimagetag, clientVersion, namespace, allflag)
username, err := apiserver.Authn(apiserver.SHOW_CLUSTER_PERM, w, r)
if err != nil {
@@ -206,7 +206,7 @@ func DeleteClusterHandler(w http.ResponseWriter, r *http.Request) {
deleteData := request.DeleteData
deleteBackups := request.DeleteBackups
- log.Debugf("DeleteClusterHandler: parameters namespace [%s] selector [%s] delete-data [%t] delete-backups [%t]", namespace, selector, clientVersion, deleteData, deleteBackups)
+ log.Debugf("DeleteClusterHandler: parameters namespace [%s] selector [%s] delete-data [%t] delete-backups [%t]", namespace, selector, deleteData, deleteBackups)
username, err := apiserver.Authn(apiserver.DELETE_CLUSTER_PERM, w, r)
if err != nil {
diff --git a/internal/apiserver/labelservice/labelimpl.go b/internal/apiserver/labelservice/labelimpl.go
index 7dd04d4567..ad066f3cb5 100644
--- a/internal/apiserver/labelservice/labelimpl.go
+++ b/internal/apiserver/labelservice/labelimpl.go
@@ -483,7 +483,7 @@ func deleteTheLabel(deployment *v1.Deployment, clusterName string, labelsMap map
_, err = apiserver.Clientset.AppsV1().Deployments(ns).Patch(deployment.Name, types.MergePatchType, patchBytes, "")
if err != nil {
- log.Debugf("error patching deployment ", err.Error())
+ log.Debugf("error patching deployment: %v", err.Error())
}
return err
diff --git a/internal/apiserver/pgdumpservice/pgdumpimpl.go b/internal/apiserver/pgdumpservice/pgdumpimpl.go
index f234262fe9..031c559cee 100644
--- a/internal/apiserver/pgdumpservice/pgdumpimpl.go
+++ b/internal/apiserver/pgdumpservice/pgdumpimpl.go
@@ -237,7 +237,7 @@ func ShowpgDump(clusterName string, selector string, ns string) msgs.ShowBackupR
// nothing found, no error
log.Debugf("pgTask %s not found, no erros", pgTaskName)
response.Status.Code = msgs.Ok
- response.Status.Msg = fmt.Sprintln("pgDump %s not found.", pgTaskName)
+ response.Status.Msg = fmt.Sprintf("pgDump %s not found.", pgTaskName)
}
}
diff --git a/internal/apiserver/pgouserservice/pgouserimpl.go b/internal/apiserver/pgouserservice/pgouserimpl.go
index b1f0ef57d2..6e0c061467 100644
--- a/internal/apiserver/pgouserservice/pgouserimpl.go
+++ b/internal/apiserver/pgouserservice/pgouserimpl.go
@@ -244,7 +244,7 @@ func UpdatePgouser(clientset kubernetes.Interface, updatedBy string, request *ms
log.Info("Updating secret for: ", request.PgouserName)
_, err = clientset.CoreV1().Secrets(apiserver.PgoNamespace).Update(secret)
if err != nil {
- log.Debug("Error updating pgouser secret: ", err.Error)
+ log.Debug("Error updating pgouser secret: ", err.Error())
resp.Status.Code = msgs.Error
resp.Status.Msg = err.Error()
return resp
diff --git a/internal/apiserver/policyservice/policyimpl.go b/internal/apiserver/policyservice/policyimpl.go
index a7c7fe2180..9463288ffd 100644
--- a/internal/apiserver/policyservice/policyimpl.go
+++ b/internal/apiserver/policyservice/policyimpl.go
@@ -220,7 +220,7 @@ func ApplyPolicy(request *msgs.ApplyPolicyRequest, ns, pgouser string) msgs.Appl
return resp
}
if len(deployments.Items) < 1 {
- log.Error("%s did not have a deployment for some reason", c.Name)
+ log.Errorf("%s did not have a deployment for some reason", c.Name)
} else {
allDeployments = append(allDeployments, deployments.Items[0])
}
@@ -239,7 +239,7 @@ func ApplyPolicy(request *msgs.ApplyPolicyRequest, ns, pgouser string) msgs.Appl
for _, d := range allDeployments {
if d.ObjectMeta.Labels[config.LABEL_SERVICE_NAME] != d.ObjectMeta.Labels[config.LABEL_PG_CLUSTER] {
- log.Debug("skipping apply policy on deployment %s", d.Name)
+ log.Debugf("skipping apply policy on deployment %s", d.Name)
continue
//skip non primary deployments
}
diff --git a/internal/apiserver/pvcservice/pvcservice.go b/internal/apiserver/pvcservice/pvcservice.go
index 3143cf183b..a12979cb3c 100644
--- a/internal/apiserver/pvcservice/pvcservice.go
+++ b/internal/apiserver/pvcservice/pvcservice.go
@@ -53,7 +53,7 @@ func ShowPVCHandler(w http.ResponseWriter, r *http.Request) {
clientVersion := request.ClientVersion
namespace := request.Namespace
- log.Debugf("ShowPVCHandler parameters version [%s] namespace [%s] pvcname [%s] nodeLabel [%]", clientVersion, namespace, clusterName)
+ log.Debugf("ShowPVCHandler parameters version [%s] namespace [%s] pvcname [%s]", clientVersion, namespace, clusterName)
switch r.Method {
case "GET":
diff --git a/internal/apiserver/statusservice/statusimpl.go b/internal/apiserver/statusservice/statusimpl.go
index 87c629470c..3dfdb40836 100644
--- a/internal/apiserver/statusservice/statusimpl.go
+++ b/internal/apiserver/statusservice/statusimpl.go
@@ -174,7 +174,7 @@ func getLabels(ns string) []msgs.KeyValue {
}
for k, v := range results {
- ss = append(ss, msgs.KeyValue{k, v})
+ ss = append(ss, msgs.KeyValue{Key: k, Value: v})
}
sort.Slice(ss, func(i, j int) bool {
diff --git a/internal/apiserver/upgradeservice/upgradeimpl.go b/internal/apiserver/upgradeservice/upgradeimpl.go
index 7b2aabcf2d..0389defcfb 100644
--- a/internal/apiserver/upgradeservice/upgradeimpl.go
+++ b/internal/apiserver/upgradeservice/upgradeimpl.go
@@ -222,7 +222,7 @@ func supportedOperatorVersion(version string) bool {
// then the upgrade cannot continue
minor, err := strconv.Atoi(operatorVersion[2])
if err != nil {
- log.Errorf("Cannot convert Postgres Operator's minor version to an integer. Error: ", err)
+ log.Errorf("Cannot convert Postgres Operator's minor version to an integer. Error: %v", err)
return false
}
if minor < MINIMUM_MINOR_PGO_VERSION || minor > MAXIMUM_MINOR_PGO_VERSION {
diff --git a/internal/controller/manager/controllermanager.go b/internal/controller/manager/controllermanager.go
index 6d3789d3e9..5991c3ccd7 100644
--- a/internal/controller/manager/controllermanager.go
+++ b/internal/controller/manager/controllermanager.go
@@ -304,7 +304,7 @@ func (c *ControllerManager) addControllerGroup(namespace string) error {
pgoInformerFactory.Crunchydata().V1().Pgclusters(),
*c.pgoConfig.Pgo.ConfigMapWorkerCount)
if err != nil {
- log.Errorf("Unable to create ConfigMap controller: %w", err)
+ log.Errorf("Unable to create ConfigMap controller: %v", err)
return err
}
diff --git a/internal/controller/pgtask/pgtaskcontroller.go b/internal/controller/pgtask/pgtaskcontroller.go
index 9a5b524dc9..979cc64f75 100644
--- a/internal/controller/pgtask/pgtaskcontroller.go
+++ b/internal/controller/pgtask/pgtaskcontroller.go
@@ -117,7 +117,7 @@ func (c *Controller) processNextItem() bool {
if !dupeFailover(c.PgtaskClient, &tmpTask, keyNamespace) {
clusteroperator.FailoverBase(keyNamespace, c.PgtaskClientset, c.PgtaskClient, &tmpTask, c.PgtaskConfig)
} else {
- log.Debug("skipping duplicate onAdd failover task %s/%s", keyNamespace, keyResourceName)
+ log.Debugf("skipping duplicate onAdd failover task %s/%s", keyNamespace, keyResourceName)
}
case crv1.PgtaskDeleteData:
@@ -125,7 +125,7 @@ func (c *Controller) processNextItem() bool {
if !dupeDeleteData(c.PgtaskClient, &tmpTask, keyNamespace) {
taskoperator.RemoveData(keyNamespace, c.PgtaskClientset, c.PgtaskClient, &tmpTask)
} else {
- log.Debug("skipping duplicate onAdd delete data task %s/%s", keyNamespace, keyResourceName)
+ log.Debugf("skipping duplicate onAdd delete data task %s/%s", keyNamespace, keyResourceName)
}
case crv1.PgtaskDeleteBackups:
log.Debug("delete backups task added")
@@ -150,7 +150,7 @@ func (c *Controller) processNextItem() bool {
log.Debugf("workflow task added [%s] ID [%s]", keyResourceName, tmpTask.Spec.Parameters[crv1.PgtaskWorkflowID])
case crv1.PgtaskCloneStep1, crv1.PgtaskCloneStep2, crv1.PgtaskCloneStep3:
- log.Debug("clone task added [%s]", keyResourceName)
+ log.Debugf("clone task added [%s]", keyResourceName)
clusteroperator.Clone(c.PgtaskClientset, c.PgtaskClient, c.PgtaskConfig, keyNamespace, &tmpTask)
default:
diff --git a/internal/operator/common.go b/internal/operator/common.go
index 15adae0f1f..2d4360deb7 100644
--- a/internal/operator/common.go
+++ b/internal/operator/common.go
@@ -369,7 +369,7 @@ func SetupNamespaces(clientset kubernetes.Interface) ([]string, error) {
// First set the proper namespace operating mode for the Operator install. The mode identified
// determines whether or not certain namespace capabilities are enabled.
if err := setNamespaceOperatingMode(clientset); err != nil {
- log.Errorf("Error detecting namespace operating mode: %w", err)
+ log.Errorf("Error detecting namespace operating mode: %v", err)
return nil, err
}
log.Debugf("Namespace operating mode is '%s'", NamespaceOperatingMode())
@@ -383,7 +383,7 @@ func SetupNamespaces(clientset kubernetes.Interface) ([]string, error) {
// proceed with creating and/or updating any namespaces provided for the installation
if err := ns.ConfigureInstallNamespaces(clientset, InstallationName,
PgoNamespace, namespaceList, NamespaceOperatingMode()); err != nil {
- log.Errorf("Unable to setup namespaces: %w", err)
+ log.Errorf("Unable to setup namespaces: %v", err)
return nil, err
}
diff --git a/internal/operator/task/rmdata.go b/internal/operator/task/rmdata.go
index 79250c8592..875abef328 100644
--- a/internal/operator/task/rmdata.go
+++ b/internal/operator/task/rmdata.go
@@ -56,7 +56,7 @@ func RemoveData(namespace string, clientset kubernetes.Interface, restclient *re
//create marker (clustername, namespace)
err := PatchpgtaskDeleteDataStatus(restclient, task, namespace)
if err != nil {
- log.Error("could not set delete data started marker for task %s cluster %s", task.Spec.Name, task.Spec.Parameters[config.LABEL_PG_CLUSTER])
+ log.Errorf("could not set delete data started marker for task %s cluster %s", task.Spec.Name, task.Spec.Parameters[config.LABEL_PG_CLUSTER])
return
}
From 261b38d9c251780ac12d366b20c4445892af7741 Mon Sep 17 00:00:00 2001
From: Chris Bandy
Date: Mon, 20 Jul 2020 16:50:11 -0500
Subject: [PATCH 02/77] Fix labeling clusters with multiple labels
When using `pgo label` or `pgo delete label` with a list of labels,
PgCluster was getting different labels than its Deployments.
Issue: [ch8740]
See: 88cd75f6b5f409a148f1884be5a911fba6e759e0
---
internal/apiserver/labelservice/labelimpl.go | 22 +++++++++----------
.../apiserver/policyservice/policyimpl.go | 2 +-
2 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/internal/apiserver/labelservice/labelimpl.go b/internal/apiserver/labelservice/labelimpl.go
index ad066f3cb5..672757a1cd 100644
--- a/internal/apiserver/labelservice/labelimpl.go
+++ b/internal/apiserver/labelservice/labelimpl.go
@@ -125,7 +125,7 @@ func addLabels(items []crv1.Pgcluster, DryRun bool, LabelCmdLabel string, newLab
log.Debug("dry run only")
} else {
log.Debugf("adding label to cluster %s", items[i].Spec.Name)
- err := PatchPgcluster(LabelCmdLabel, items[i], ns)
+ err := PatchPgcluster(newLabels, items[i], ns)
if err != nil {
log.Error(err.Error())
}
@@ -224,11 +224,8 @@ func updateLabels(deployment *v1.Deployment, clusterName string, newLabels map[s
}
-func PatchPgcluster(newLabel string, oldCRD crv1.Pgcluster, ns string) error {
+func PatchPgcluster(newLabels map[string]string, oldCRD crv1.Pgcluster, ns string) error {
- fields := strings.Split(newLabel, "=")
- labelKey := fields[0]
- labelValue := fields[1]
oldData, err := json.Marshal(oldCRD)
if err != nil {
return err
@@ -236,7 +233,9 @@ func PatchPgcluster(newLabel string, oldCRD crv1.Pgcluster, ns string) error {
if oldCRD.ObjectMeta.Labels == nil {
oldCRD.ObjectMeta.Labels = make(map[string]string)
}
- oldCRD.ObjectMeta.Labels[labelKey] = labelValue
+ for key, value := range newLabels {
+ oldCRD.ObjectMeta.Labels[key] = value
+ }
var newData, patchBytes []byte
newData, err = json.Marshal(oldCRD)
if err != nil {
@@ -377,7 +376,7 @@ func deleteLabels(items []crv1.Pgcluster, LabelCmdLabel string, labelsMap map[st
for i := 0; i < len(items); i++ {
log.Debugf("deleting label from %s", items[i].Spec.Name)
- err = deletePatchPgcluster(LabelCmdLabel, items[i], ns)
+ err = deletePatchPgcluster(labelsMap, items[i], ns)
if err != nil {
log.Error(err.Error())
return err
@@ -406,11 +405,8 @@ func deleteLabels(items []crv1.Pgcluster, LabelCmdLabel string, labelsMap map[st
return err
}
-func deletePatchPgcluster(newLabel string, oldCRD crv1.Pgcluster, ns string) error {
+func deletePatchPgcluster(labelsMap map[string]string, oldCRD crv1.Pgcluster, ns string) error {
- fields := strings.Split(newLabel, "=")
- labelKey := fields[0]
- //labelValue := fields[1]
oldData, err := json.Marshal(oldCRD)
if err != nil {
return err
@@ -418,7 +414,9 @@ func deletePatchPgcluster(newLabel string, oldCRD crv1.Pgcluster, ns string) err
if oldCRD.ObjectMeta.Labels == nil {
oldCRD.ObjectMeta.Labels = make(map[string]string)
}
- delete(oldCRD.ObjectMeta.Labels, labelKey)
+ for k := range labelsMap {
+ delete(oldCRD.ObjectMeta.Labels, k)
+ }
var newData, patchBytes []byte
newData, err = json.Marshal(oldCRD)
diff --git a/internal/apiserver/policyservice/policyimpl.go b/internal/apiserver/policyservice/policyimpl.go
index 9463288ffd..b78e0aa34b 100644
--- a/internal/apiserver/policyservice/policyimpl.go
+++ b/internal/apiserver/policyservice/policyimpl.go
@@ -270,7 +270,7 @@ func ApplyPolicy(request *msgs.ApplyPolicyRequest, ns, pgouser string) msgs.Appl
}
//update the pgcluster crd labels with the new policy
- err = labelservice.PatchPgcluster(request.Name+"="+config.LABEL_PGPOLICY, cl, ns)
+ err = labelservice.PatchPgcluster(map[string]string{request.Name: config.LABEL_PGPOLICY}, cl, ns)
if err != nil {
log.Error(err)
}
From b1b52b85b1004668f64351bfbb27ede62f6cfa8d Mon Sep 17 00:00:00 2001
From: tjmoore4 <42497036+tjmoore4@users.noreply.github.com>
Date: Wed, 22 Jul 2020 14:55:00 -0400
Subject: [PATCH 03/77] Update Upgrade Documentation for all Installation
Methods
This update adds additional information for how to upgrade the
Crunchy PostgreSQL Operator using the PostgreSQL Operator Installer
and Helm Chart installation methods.
---
docs/content/Upgrade/automatedupgrade.md | 26 +++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/docs/content/Upgrade/automatedupgrade.md b/docs/content/Upgrade/automatedupgrade.md
index 18b2adde27..31480bc07e 100644
--- a/docs/content/Upgrade/automatedupgrade.md
+++ b/docs/content/Upgrade/automatedupgrade.md
@@ -35,15 +35,31 @@ The automated upgrade procedure is designed to facilate the quickest and most ef
##### NOTE: As with any upgrade procedure, it is strongly recommended that a full logical backup is taken before any upgrade procedure is started. Please see the [Logical Backups](/pgo-client/common-tasks#logical-backups-pg_dump--pg_dumpall) section of the Common Tasks page for more information.
-### Automated Upgrade when using an Ansible installation of the PostgreSQL Operator
+### Automated Upgrade when using the PostgreSQL Operator Installer (`pgo-deployer`), Helm or Ansible
-For existing PostgreSQL Operator deployments that were installed using Ansible, the upgrade process is straightforward.
+For all existing PostgreSQL Operator deployments that were installed using the Ansible installation method, the PostgreSQL Operator Installer or the Helm Chart Installation of the PostgreSQL Operator, the upgrade process is straightforward.
-First, you will copy your existing inventory file as a backup for your existing settings. You will reference these settings, but you will need to use the updated version of the inventory file for the current version of PostgreSQL Operator.
+First, you will copy your existing configuration file (whether inventory, postgres-operator.yml, values.yaml, etc, depending on method and version) as a backup for your existing settings. You will reference these settings, but you will need to use the updated version of this file for the current version of PostgreSQL Operator.
-Once you've checked out the appropriate release tag, please follow the [Update Instructions]({{< relref "installation/other/ansible/updating-operator.md" >}}), being sure to update the new inventory file with your required settings. Please keep the above [Considerations](/upgrade/automatedupgrade#considerations) in mind, particularly with regard to the version and storage requirements listed.
+In all three cases, you will need to use the relevant update functionality available with your chosen installation method. For all three options, please keep the above [Considerations](/upgrade/automatedupgrade#considerations) in mind, particularly with regard to the version and storage requirements listed.
-Once the update is complete, you should now see the PostgreSQL Operator pods are up and ready. It is strongly recommended that you create a test cluster to validate proper functionality before moving on to the [Automated Cluster Upgrade](/upgrade/automatedupgrade#postgresql-operator-automated-cluster-upgrade) section below.
+#### PostgreSQL Operator Installer
+
+For existing PostgreSQL Operator deployments that were installed using the PostgreSQL Operator Installer, you will check out the appropriate release tag and update your the new configuration files. After this, you will need to update your Operator installation using the `DEPLOY_ACTION` method described in the [Configuring to Update and Uninstall](/installation/postgres-operator#configuring-to-update-and-uninstall) section of the documentation.
+
+Please note, you will need to ensure that you have executed the [post-installation cleanup](/installation/postgres-operator#post-installation) between each `DEPLOY_ACTION` activity.
+
+#### Helm
+
+For existing PostgreSQL Operator deployments that were installed using the Helm installer, you will check out the appropriate release tag and update your the new configuration files. Then you will need to use the `helm upgrade` command as described in the [Helm Upgrade](/installation/other/helm#upgrade) section of the Helm installation documentation.
+
+#### Ansible
+
+For existing PostgreSQL Operator deployments that were installed using Ansible, you will first need to check out the appropriate release tag of the Operator. Then please follow the [Update Instructions]({{< relref "installation/other/ansible/updating-operator.md" >}}), being sure to update the new inventory file with your required settings.
+
+#### Wrapping Up the PostgreSQL Operator Upgrade
+
+Once the upgrade is complete, you should now see the PostgreSQL Operator pods are up and ready. It is strongly recommended that you create a test cluster to validate proper functionality before moving on to the [Automated Cluster Upgrade](/upgrade/automatedupgrade#postgresql-operator-automated-cluster-upgrade) section below.
### Automated Upgrade when using a Bash installation of the PostgreSQL Operator
From 49a4d2d6a964176acad56e04e2395030df39d856 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Tue, 28 Jul 2020 17:46:11 -0400
Subject: [PATCH 04/77] Provide additional context around pgBackRest Secret
To provide more transparency around the configuration files that
are loaded into the pgBackRest secret, this includes a note to
explain the context of the config and sshd_config files.
Issue: #1741
---
docs/content/custom-resources/_index.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/docs/content/custom-resources/_index.md b/docs/content/custom-resources/_index.md
index abf7bb7c25..9058d8a1da 100644
--- a/docs/content/custom-resources/_index.md
+++ b/docs/content/custom-resources/_index.md
@@ -260,6 +260,12 @@ export pgbackrest_public_key="${public_key_temp//[$'\n']}" pgbackrest_private_ke
# create the backrest-repo-config example file and substitute in the newly
# created keys
+#
+# (Note: that the "config" / "sshd_config" entries contain configuration to
+# ensure that PostgreSQL instances are able to communicate with the pgBackRest
+# repository, which houses backups and archives, and vice versa. Most of the
+# settings follow the sshd defaults, with a few overrides. Edit at your own
+# discretion.)
cat <<-EOF > "${pgo_cluster_name}-backrest-repo-config.yaml"
apiVersion: v1
kind: Secret
From 6ac888d4fba97b335cfa738314778c74e3491772 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Thu, 30 Jul 2020 09:30:19 -0400
Subject: [PATCH 05/77] Add support for the "*" permission to pgo create
pgorole --permissions
While "*" has been supported for awhile in the PostgreSQL Operator, one
could not add it while using the `pgo create pgorole --permissions` as
it failed the validation check. This rectifies this oversight and fixes
said bug.
Issue: [ch8909]
---
.../apiserver/pgoroleservice/pgoroleimpl.go | 2 +-
.../pgoroleservice/pgoroleimpl_test.go | 55 +++++++++++++++++++
2 files changed, 56 insertions(+), 1 deletion(-)
create mode 100644 internal/apiserver/pgoroleservice/pgoroleimpl_test.go
diff --git a/internal/apiserver/pgoroleservice/pgoroleimpl.go b/internal/apiserver/pgoroleservice/pgoroleimpl.go
index b16453f557..633d0c3660 100644
--- a/internal/apiserver/pgoroleservice/pgoroleimpl.go
+++ b/internal/apiserver/pgoroleservice/pgoroleimpl.go
@@ -254,7 +254,7 @@ func validPermissions(perms string) error {
fields := strings.Split(perms, ",")
for _, v := range fields {
- if apiserver.PermMap[strings.TrimSpace(v)] == "" {
+ if apiserver.PermMap[strings.TrimSpace(v)] == "" && strings.TrimSpace(v) != "*" {
return errors.New(v + " not a valid Permission")
}
}
diff --git a/internal/apiserver/pgoroleservice/pgoroleimpl_test.go b/internal/apiserver/pgoroleservice/pgoroleimpl_test.go
new file mode 100644
index 0000000000..98ad0c61f2
--- /dev/null
+++ b/internal/apiserver/pgoroleservice/pgoroleimpl_test.go
@@ -0,0 +1,55 @@
+package pgoroleservice
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/crunchydata/postgres-operator/internal/apiserver"
+)
+
+func TestValidPermissions(t *testing.T) {
+ apiserver.PermMap = map[string]string{
+ apiserver.CREATE_CLUSTER_PERM: "yes",
+ apiserver.CREATE_PGBOUNCER_PERM: "yes",
+ }
+
+ t.Run("with valid permission", func(t *testing.T) {
+ perms := apiserver.CREATE_CLUSTER_PERM
+
+ if err := validPermissions(perms); err != nil {
+ t.Errorf("%q should be a valid permission", perms)
+ }
+ })
+
+ t.Run("with multiple valid permissions", func(t *testing.T) {
+ perms := fmt.Sprintf("%s,%s", apiserver.CREATE_CLUSTER_PERM, apiserver.CREATE_PGBOUNCER_PERM)
+
+ if err := validPermissions(perms); err != nil {
+ t.Errorf("%v should be a valid permission", perms)
+ }
+ })
+
+ t.Run("with an invalid permission", func(t *testing.T) {
+ perms := "bogus"
+
+ if err := validPermissions(perms); err == nil {
+ t.Errorf("%q should raise an error", perms)
+ }
+ })
+
+ t.Run("with a mix of valid and invalid permissions", func(t *testing.T) {
+ perms := fmt.Sprintf("%s,%s", apiserver.CREATE_CLUSTER_PERM, "bogus")
+
+ if err := validPermissions(perms); err == nil {
+ t.Errorf("%q should raise an error", perms)
+ }
+ })
+
+ t.Run("with *", func(t *testing.T) {
+ perms := "*"
+
+ if err := validPermissions(perms); err != nil {
+ t.Errorf("%q should be a valid permission", perms)
+ }
+ })
+}
From 04b6c483b7b122a07f298c2decc477aa06564012 Mon Sep 17 00:00:00 2001
From: Joseph Mckulka
Date: Thu, 6 Aug 2020 18:18:34 +0000
Subject: [PATCH 06/77] Update sane default for pgbadger resources
pgbadger was running into the OOM Killer because of the memory resource limits.
This commit ups the memory limit as a workaround.
---
.../ansible/roles/pgo-operator/files/pgo-configs/pgbadger.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/installers/ansible/roles/pgo-operator/files/pgo-configs/pgbadger.json b/installers/ansible/roles/pgo-operator/files/pgo-configs/pgbadger.json
index f39964b5d2..d9b04daa73 100644
--- a/installers/ansible/roles/pgo-operator/files/pgo-configs/pgbadger.json
+++ b/installers/ansible/roles/pgo-operator/files/pgo-configs/pgbadger.json
@@ -23,7 +23,7 @@
"resources": {
"limits": {
"cpu": "500m",
- "memory": "24Mi"
+ "memory": "64Mi"
}
},
"volumeMounts": [
From 639324a46e28551be68386fa336f05d5ef4d66b2 Mon Sep 17 00:00:00 2001
From: andrewlecuyer <43458182+andrewlecuyer@users.noreply.github.com>
Date: Wed, 12 Aug 2020 14:06:21 -0500
Subject: [PATCH 07/77] Default URI Style for S3 Bootstrap
The proper default S3 URI style is now set when generating the
pgBackRest S3 environment variables for a bootstrap Job (i.e. a
Job created to bootstrap a cluster from an existing backup, such
as when using the '--restore-from' flag with the 'pgo' client).
Specifically, if an empty string is detected in the 's3-uri-style'
annotation for the pgBackRest repo secret for the cluster being
bootstrapped/restored from, a proper default value of 'host' is now
set. This ensures there is never an empty value for the
PGBACKREST_REPO1_S3_URI_STYLE environment variable in a bootstrap
Pod, which can lead to problems when running various pgBackRest
commands.
Additionally, tests have been created to verify the output of the
GetPgbackrestBootstrapS3EnvVars function that is utilized to populate
the proper S3 environment variables for a bootstrap Job (specifically
using the pgBackRest repo secret from the cluster being bootstrapped
from). This includes ensuring the proper default URI style is set
when the 's3-uri-style' annotation is empty, as well as ensuring
all annotation values are properly reflected in the final S3
environment variable output. In support of these tests, a
NewFakePGOClient function has also been created in the 'fake' package
(underneath 'kubeapi'). This is needed to create a fake client
containing the proper resources (i.e. a mock 'pgo-config' ConfigMap)
as need to initialize the Operator and therefore the various templates
needed to properly call the GetPgbackrestBootstrapS3EnvVars function
for these tests (PGOROOT must be properly set in the environment when
running tests so that the proper default template files and pgo.yaml
file can be found as needed to create the mock 'pgo-config' ConfigMap).
Issue: [ch8915]
See: c503b9d25ce4a9c06b01844e635d87ff00e2d4ce
---
internal/operator/backrest/repo.go | 4 +--
internal/operator/cluster/clusterlogic.go | 4 +--
internal/operator/clusterutilities.go | 31 +++++++++++++++--------
3 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/internal/operator/backrest/repo.go b/internal/operator/backrest/repo.go
index 3bc75ea074..8893d2e416 100644
--- a/internal/operator/backrest/repo.go
+++ b/internal/operator/backrest/repo.go
@@ -191,8 +191,8 @@ func setBootstrapRepoOverrides(clientset kubernetes.Interface, cluster *crv1.Pgc
s3Restore := S3RepoTypeCLIOptionExists(cluster.Spec.PGDataSource.RestoreOpts)
if s3Restore {
// Now override any backrest S3 env vars for the bootstrap job
- repoFields.PgbackrestS3EnvVars = operator.GetPgbackrestBootstrapS3EnvVars(cluster,
- restoreFromSecret)
+ repoFields.PgbackrestS3EnvVars = operator.GetPgbackrestBootstrapS3EnvVars(
+ cluster.Spec.PGDataSource.RestoreFrom, restoreFromSecret)
} else {
repoFields.PgbackrestS3EnvVars = ""
}
diff --git a/internal/operator/cluster/clusterlogic.go b/internal/operator/cluster/clusterlogic.go
index 69c35cd961..d18b71eb99 100644
--- a/internal/operator/cluster/clusterlogic.go
+++ b/internal/operator/cluster/clusterlogic.go
@@ -246,8 +246,8 @@ func getBootstrapJobFields(clientset kubernetes.Interface, client *rest.RESTClie
s3Restore := backrest.S3RepoTypeCLIOptionExists(cluster.Spec.PGDataSource.RestoreOpts)
if s3Restore {
// Now override any backrest S3 env vars for the bootstrap job
- bootstrapFields.PgbackrestS3EnvVars = operator.GetPgbackrestBootstrapS3EnvVars(cluster,
- restoreFromSecret)
+ bootstrapFields.PgbackrestS3EnvVars = operator.GetPgbackrestBootstrapS3EnvVars(
+ cluster.Spec.PGDataSource.RestoreFrom, restoreFromSecret)
} else {
bootstrapFields.PgbackrestS3EnvVars = ""
}
diff --git a/internal/operator/clusterutilities.go b/internal/operator/clusterutilities.go
index 1efdc4ee1b..d11ed1a1c1 100644
--- a/internal/operator/clusterutilities.go
+++ b/internal/operator/clusterutilities.go
@@ -57,6 +57,10 @@ const (
PGHAConfigReplicaBootstrapRepoType = "replica-bootstrap-repo-type"
)
+// defaultPGBackRestS3URIStyle is the default pgBackRest S3 URI style to use if a specific style is
+// not provided
+const defaultPGBackRestS3URIStyle = "host"
+
// affinityType represents the two affinity types provided by Kubernetes, specifically
// either preferredDuringSchedulingIgnoredDuringExecution or
// requiredDuringSchedulingIgnoredDuringExecution
@@ -779,7 +783,7 @@ func GetPgbackrestS3EnvVars(cluster crv1.Pgcluster, clientset kubernetes.Interfa
// if the URI style is not configured, set to the default value
if s3EnvVars.PgbackrestS3URIStyle == "" {
- s3EnvVars.PgbackrestS3URIStyle = "host"
+ s3EnvVars.PgbackrestS3URIStyle = defaultPGBackRestS3URIStyle
}
// if set, pgBackRest URI style must be set to either 'path' or 'host'. If it is neither,
// log an error and stop the cluster from being created.
@@ -828,18 +832,23 @@ func GetS3VerifyTLSSetting(cluster *crv1.Pgcluster) string {
// pgBackRest environment variables required to enable S3 support for the boostrap job. After
// the template has been executed with the proper values, the result is then returned a string
// for inclusion in the PG and pgBackRest deployments.
-func GetPgbackrestBootstrapS3EnvVars(cluster *crv1.Pgcluster, restoreFromSecret *v1.Secret) string {
+func GetPgbackrestBootstrapS3EnvVars(pgDataSourceRestoreFrom string,
+ restoreFromSecret *v1.Secret) string {
s3EnvVars := PgbackrestS3EnvVarsTemplateFields{
- PgbackrestS3Key: util.BackRestRepoSecretKeyAWSS3KeyAWSS3Key,
- PgbackrestS3KeySecret: util.BackRestRepoSecretKeyAWSS3KeyAWSS3KeySecret,
- PgbackrestS3Bucket: restoreFromSecret.Annotations[config.ANNOTATION_S3_BUCKET],
- PgbackrestS3Endpoint: restoreFromSecret.Annotations[config.ANNOTATION_S3_ENDPOINT],
- PgbackrestS3Region: restoreFromSecret.Annotations[config.ANNOTATION_S3_REGION],
- PgbackrestS3URIStyle: restoreFromSecret.Annotations[config.ANNOTATION_S3_URI_STYLE],
- PgbackrestS3VerifyTLS: restoreFromSecret.Annotations[config.ANNOTATION_S3_VERIFY_TLS],
- PgbackrestS3SecretName: fmt.Sprintf(util.BackrestRepoSecretName,
- cluster.Spec.PGDataSource.RestoreFrom),
+ PgbackrestS3Key: util.BackRestRepoSecretKeyAWSS3KeyAWSS3Key,
+ PgbackrestS3KeySecret: util.BackRestRepoSecretKeyAWSS3KeyAWSS3KeySecret,
+ PgbackrestS3Bucket: restoreFromSecret.Annotations[config.ANNOTATION_S3_BUCKET],
+ PgbackrestS3Endpoint: restoreFromSecret.Annotations[config.ANNOTATION_S3_ENDPOINT],
+ PgbackrestS3Region: restoreFromSecret.Annotations[config.ANNOTATION_S3_REGION],
+ PgbackrestS3SecretName: fmt.Sprintf(util.BackrestRepoSecretName, pgDataSourceRestoreFrom),
+ }
+
+ // if the URI style annotation is empty then set the proper default
+ if restoreFromSecret.Annotations[config.ANNOTATION_S3_URI_STYLE] != "" {
+ s3EnvVars.PgbackrestS3URIStyle = restoreFromSecret.Annotations[config.ANNOTATION_S3_URI_STYLE]
+ } else {
+ s3EnvVars.PgbackrestS3URIStyle = defaultPGBackRestS3URIStyle
}
verifyTLS := restoreFromSecret.Annotations[config.ANNOTATION_S3_VERIFY_TLS]
From bcff5d5401fb4e907769daac309495ea5fa33b16 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 14 Aug 2020 11:40:50 -0400
Subject: [PATCH 08/77] Version bump for 4.4.1
This adds in the information for the PostgreSQL 2020-08-13
cumulative update release.
---
Makefile | 4 ++--
README.md | 2 +-
bin/push-ccp-to-gcr.sh | 2 +-
conf/postgres-operator/pgo.yaml | 4 ++--
docs/config.toml | 4 ++--
docs/content/Configuration/compatibility.md | 6 ++++++
examples/create-by-resource/fromcrd.json | 6 +++---
examples/envs.sh | 2 +-
examples/load/sample-json-load-config-sc.yaml | 2 +-
examples/load/sample-json-load-config.yaml | 2 +-
examples/load/sample-load-config.yaml | 2 +-
installers/ansible/README.md | 2 +-
installers/ansible/values.yaml | 6 +++---
installers/gcp-marketplace/Makefile | 2 +-
installers/gcp-marketplace/README.md | 2 +-
installers/gcp-marketplace/inventory.ini | 6 +++---
installers/helm/metrics/Chart.yaml | 2 +-
installers/helm/metrics/values.yaml | 6 +++---
installers/helm/postgres-operator/Chart.yaml | 2 +-
installers/helm/postgres-operator/values.yaml | 6 +++---
installers/kubectl/client-setup.sh | 2 +-
installers/kubectl/postgres-operator-ocp311.yml | 8 ++++----
installers/kubectl/postgres-operator.yml | 8 ++++----
installers/olm/Makefile | 4 ++--
pkg/apis/crunchydata.com/v1/doc.go | 8 ++++----
pkg/apiservermsgs/common.go | 2 +-
redhat/atomic/help.1 | 2 +-
redhat/atomic/help.md | 2 +-
28 files changed, 56 insertions(+), 50 deletions(-)
diff --git a/Makefile b/Makefile
index d4d51e2873..e2b75516e6 100644
--- a/Makefile
+++ b/Makefile
@@ -9,9 +9,9 @@ PGO_CMD ?= kubectl
PGO_IMAGE_PREFIX ?= crunchydata
PGO_IMAGE_TAG ?= $(PGO_BASEOS)-$(PGO_VERSION)
PGO_OPERATOR_NAMESPACE ?= pgo
-PGO_VERSION ?= 4.4.0
+PGO_VERSION ?= 4.4.1
PGO_PG_VERSION ?= 12
-PGO_PG_FULLVERSION ?= 12.3
+PGO_PG_FULLVERSION ?= 12.4
PGO_BACKREST_VERSION ?= 2.27
RELTMPDIR=/tmp/release.$(PGO_VERSION)
diff --git a/README.md b/README.md
index 9d14b031ed..5b152ce843 100644
--- a/README.md
+++ b/README.md
@@ -128,7 +128,7 @@ Based on your storage settings in your Kubernetes environment, you may be able t
```shell
kubectl create namespace pgo
-kubectl apply -f https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.4.0/installers/kubectl/postgres-operator.yml
+kubectl apply -f https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.4.1/installers/kubectl/postgres-operator.yml
```
Otherwise, we highly recommend following the instructions from our [Quickstart](https://access.crunchydata.com/documentation/postgres-operator/latest/quickstart/).
diff --git a/bin/push-ccp-to-gcr.sh b/bin/push-ccp-to-gcr.sh
index 5928c70bfd..8043d20317 100755
--- a/bin/push-ccp-to-gcr.sh
+++ b/bin/push-ccp-to-gcr.sh
@@ -16,7 +16,7 @@
GCR_IMAGE_PREFIX=gcr.io/crunchy-dev-test
CCP_IMAGE_PREFIX=crunchydata
-CCP_IMAGE_TAG=centos7-12.3-4.4.0
+CCP_IMAGE_TAG=centos7-12.4-4.4.1
IMAGES=(
crunchy-prometheus
diff --git a/conf/postgres-operator/pgo.yaml b/conf/postgres-operator/pgo.yaml
index d59a27aff4..576b7aaf0c 100644
--- a/conf/postgres-operator/pgo.yaml
+++ b/conf/postgres-operator/pgo.yaml
@@ -2,7 +2,7 @@ Cluster:
CCPImagePrefix: registry.developers.crunchydata.com/crunchydata
Metrics: false
Badger: false
- CCPImageTag: centos7-12.3-4.4.0
+ CCPImageTag: centos7-12.4-4.4.1
Port: 5432
PGBadgerPort: 10000
ExporterPort: 9187
@@ -81,4 +81,4 @@ Storage:
Pgo:
Audit: false
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
- PGOImageTag: centos7-4.4.0
+ PGOImageTag: centos7-4.4.1
diff --git a/docs/config.toml b/docs/config.toml
index 63e9eb37e1..b233d0eeaf 100644
--- a/docs/config.toml
+++ b/docs/config.toml
@@ -25,8 +25,8 @@ disableNavChevron = false # set true to hide next/prev chevron, default is false
highlightClientSide = false # set true to use highlight.pack.js instead of the default hugo chroma highlighter
menushortcutsnewtab = true # set true to open shortcuts links to a new tab/window
enableGitInfo = true
-operatorVersion = "4.4.0"
-postgresVersion = "12.3"
+operatorVersion = "4.4.1"
+postgresVersion = "12.4"
postgisVersion = "3.0"
centosBase = "centos7"
diff --git a/docs/content/Configuration/compatibility.md b/docs/content/Configuration/compatibility.md
index 42ec75cfbc..12fe2de0c1 100644
--- a/docs/content/Configuration/compatibility.md
+++ b/docs/content/Configuration/compatibility.md
@@ -12,6 +12,12 @@ version dependencies between the two projects. Below are the operator releases a
| Operator Release | Container Release | Postgres | PgBackrest Version
|:----------|:-------------|:------------|:--------------
+| 4.4.1 | 4.4.1 | 12.4 | 2.27 |
+|||11.9|2.27|
+|||10.14|2.27|
+|||9.6.19|2.27|
+|||9.5.23|2.27|
+||||
| 4.4.0 | 4.4.0 | 12.3 | 2.27 |
|||11.8|2.27|
|||10.13|2.27|
diff --git a/examples/create-by-resource/fromcrd.json b/examples/create-by-resource/fromcrd.json
index 209401d9b6..14f1a2c033 100644
--- a/examples/create-by-resource/fromcrd.json
+++ b/examples/create-by-resource/fromcrd.json
@@ -16,7 +16,7 @@
"pg-cluster": "fromcrd",
"pg-pod-anti-affinity": "",
"pgo-backrest": "true",
- "pgo-version": "4.4.0",
+ "pgo-version": "4.4.1",
"pgouser": "pgoadmin",
"primary": "true"
},
@@ -62,7 +62,7 @@
},
"backrestResources": {},
"ccpimage": "crunchy-postgres-ha",
- "ccpimagetag": "centos7-12.3-4.4.0",
+ "ccpimagetag": "centos7-12.4-4.4.1",
"clustername": "fromcrd",
"customconfig": "",
"database": "userdb",
@@ -95,7 +95,7 @@
"userlabels": {
"crunchy_collect": "false",
"pg-pod-anti-affinity": "",
- "pgo-version": "4.4.0",
+ "pgo-version": "4.4.1",
"pgouser": "pgoadmin",
"pgo-backrest": "true"
},
diff --git a/examples/envs.sh b/examples/envs.sh
index e9a612077c..4d439d682f 100644
--- a/examples/envs.sh
+++ b/examples/envs.sh
@@ -20,7 +20,7 @@ export PGOROOT=$GOPATH/src/github.com/crunchydata/postgres-operator
# the version of the Operator you run is set by these vars
export PGO_IMAGE_PREFIX=registry.developers.crunchydata.com/crunchydata
export PGO_BASEOS=centos7
-export PGO_VERSION=4.4.0
+export PGO_VERSION=4.4.1
export PGO_IMAGE_TAG=$PGO_BASEOS-$PGO_VERSION
# for setting the pgo apiserver port, disabling TLS or not verifying TLS
diff --git a/examples/load/sample-json-load-config-sc.yaml b/examples/load/sample-json-load-config-sc.yaml
index b69fe846d3..20e5c111ce 100644
--- a/examples/load/sample-json-load-config-sc.yaml
+++ b/examples/load/sample-json-load-config-sc.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.0
+PGOImageTag: centos7-4.4.1
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/examples/load/sample-json-load-config.yaml b/examples/load/sample-json-load-config.yaml
index 530d176958..24268fda1a 100644
--- a/examples/load/sample-json-load-config.yaml
+++ b/examples/load/sample-json-load-config.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.0
+PGOImageTag: centos7-4.4.1
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/examples/load/sample-load-config.yaml b/examples/load/sample-load-config.yaml
index 34016c35eb..1b75a5df4a 100644
--- a/examples/load/sample-load-config.yaml
+++ b/examples/load/sample-load-config.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.0
+PGOImageTag: centos7-4.4.1
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/installers/ansible/README.md b/installers/ansible/README.md
index 6f0464914b..4518aa3a52 100644
--- a/installers/ansible/README.md
+++ b/installers/ansible/README.md
@@ -4,7 +4,7 @@
-Latest Release: 4.4.0
+Latest Release: 4.4.1
## General
diff --git a/installers/ansible/values.yaml b/installers/ansible/values.yaml
index 5f50ea37b7..a553a19421 100644
--- a/installers/ansible/values.yaml
+++ b/installers/ansible/values.yaml
@@ -13,7 +13,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.3-4.4.0"
+ccp_image_tag: "centos7-12.4-4.4.1"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -54,14 +54,14 @@ pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
-pgo_client_version: "v4.4.0"
+pgo_client_version: "v4.4.1"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.0"
+pgo_image_tag: "centos7-4.4.1"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
diff --git a/installers/gcp-marketplace/Makefile b/installers/gcp-marketplace/Makefile
index 8f243ca122..a9591aa02e 100644
--- a/installers/gcp-marketplace/Makefile
+++ b/installers/gcp-marketplace/Makefile
@@ -6,7 +6,7 @@ MARKETPLACE_TOOLS ?= gcr.io/cloud-marketplace-tools/k8s/dev:$(MARKETPLACE_VERSIO
MARKETPLACE_VERSION ?= 0.9.4
KUBECONFIG ?= $(HOME)/.kube/config
PARAMETERS ?= {}
-PGO_VERSION ?= 4.4.0
+PGO_VERSION ?= 4.4.1
IMAGE_BUILD_ARGS = --build-arg MARKETPLACE_VERSION='$(MARKETPLACE_VERSION)' \
--build-arg PGO_VERSION='$(PGO_VERSION)'
diff --git a/installers/gcp-marketplace/README.md b/installers/gcp-marketplace/README.md
index cb152c04a2..0f29b9af13 100644
--- a/installers/gcp-marketplace/README.md
+++ b/installers/gcp-marketplace/README.md
@@ -59,7 +59,7 @@ Google Cloud Marketplace.
```shell
IMAGE_REPOSITORY=gcr.io/crunchydata-public/postgres-operator
- export PGO_VERSION=4.4.0
+ export PGO_VERSION=4.4.1
export INSTALLER_IMAGE=${IMAGE_REPOSITORY}/deployer:${PGO_VERSION}
export OPERATOR_IMAGE=${IMAGE_REPOSITORY}:${PGO_VERSION}
export OPERATOR_IMAGE_API=${IMAGE_REPOSITORY}/pgo-apiserver:${PGO_VERSION}
diff --git a/installers/gcp-marketplace/inventory.ini b/installers/gcp-marketplace/inventory.ini
index c3ea1a1000..ab8dac2486 100644
--- a/installers/gcp-marketplace/inventory.ini
+++ b/installers/gcp-marketplace/inventory.ini
@@ -16,11 +16,11 @@ pgo_operator_namespace='${OPERATOR_NAMESPACE}'
namespace=''
ccp_image_prefix='registry.developers.crunchydata.com/crunchydata'
-ccp_image_tag='centos7-12.3-4.4.0'
+ccp_image_tag='centos7-12.4-4.4.1'
ccp_image_pull_secret=''
ccp_image_pull_secret_manifest=''
pgo_image_prefix='registry.developers.crunchydata.com/crunchydata'
-pgo_image_tag='centos7-4.4.0'
+pgo_image_tag='centos7-4.4.1'
pgo_image='${OPERATOR_IMAGE}'
pgo_event_image='${OPERATOR_IMAGE_EVENT}'
@@ -29,7 +29,7 @@ pgo_scheduler_image='${OPERATOR_IMAGE_SCHEDULER}'
# PGO Client Install
pgo_client_install='false'
-pgo_client_version='v4.4.0'
+pgo_client_version='v4.4.1'
badger='false'
metrics='${POSTGRES_METRICS}'
diff --git a/installers/helm/metrics/Chart.yaml b/installers/helm/metrics/Chart.yaml
index 6efe6c6ab9..fbb7a92719 100644
--- a/installers/helm/metrics/Chart.yaml
+++ b/installers/helm/metrics/Chart.yaml
@@ -3,6 +3,6 @@ name: postgres-operator-metrics
description: Metrics Install for Crunchy PostgreSQL Operator
type: application
version: 0.1.0
-appVersion: 4.4.0
+appVersion: 4.4.1
home: https://github.com/CrunchyData/postgres-operator
icon: https://github.com/CrunchyData/postgres-operator/raw/master/crunchy_logo.png
\ No newline at end of file
diff --git a/installers/helm/metrics/values.yaml b/installers/helm/metrics/values.yaml
index df0060caf0..9a47f3baf1 100644
--- a/installers/helm/metrics/values.yaml
+++ b/installers/helm/metrics/values.yaml
@@ -29,7 +29,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.3-4.4.0"
+ccp_image_tag: "centos7-12.4-4.4.1"
create_rbac: "true"
crunchy_debug: "false"
db_password_length: "24"
@@ -56,11 +56,11 @@ pgo_admin_password: "examplepassword"
pgo_admin_perms: "*"
pgo_admin_role_name: "pgoadmin"
pgo_admin_username: "admin"
-pgo_client_version: "4.4.0"
+pgo_client_version: "4.4.1"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.0"
+pgo_image_tag: "centos7-4.4.1"
pgo_installation_name: "devtest"
pgo_operator_namespace: "pgo"
prometheus_install: "false"
diff --git a/installers/helm/postgres-operator/Chart.yaml b/installers/helm/postgres-operator/Chart.yaml
index cf0622add8..d2a005c5bc 100644
--- a/installers/helm/postgres-operator/Chart.yaml
+++ b/installers/helm/postgres-operator/Chart.yaml
@@ -3,7 +3,7 @@ name: postgres-operator
description: Crunchy PostgreSQL Operator Helm chart for Kubernetes
type: application
version: 0.1.0
-appVersion: 4.4.0
+appVersion: 4.4.1
home: https://github.com/CrunchyData/postgres-operator
icon: https://github.com/CrunchyData/postgres-operator/raw/master/crunchy_logo.png
keywords:
diff --git a/installers/helm/postgres-operator/values.yaml b/installers/helm/postgres-operator/values.yaml
index 4544d5c0d8..837b9e855a 100644
--- a/installers/helm/postgres-operator/values.yaml
+++ b/installers/helm/postgres-operator/values.yaml
@@ -37,7 +37,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.3-4.4.0"
+ccp_image_tag: "centos7-12.4-4.4.1"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -69,14 +69,14 @@ pgo_apiserver_port: "8443"
pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
-pgo_client_version: "4.4.0"
+pgo_client_version: "4.4.1"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.0"
+pgo_image_tag: "centos7-4.4.1"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
diff --git a/installers/kubectl/client-setup.sh b/installers/kubectl/client-setup.sh
index 6d4c0a84d5..4ae6f3f0f9 100755
--- a/installers/kubectl/client-setup.sh
+++ b/installers/kubectl/client-setup.sh
@@ -14,7 +14,7 @@
# This script should be run after the operator has been deployed
PGO_OPERATOR_NAMESPACE="${PGO_OPERATOR_NAMESPACE:-pgo}"
PGO_USER_ADMIN="${PGO_USER_ADMIN:-pgouser-admin}"
-PGO_CLIENT_VERSION="${PGO_CLIENT_VERSION:-v4.4.0}"
+PGO_CLIENT_VERSION="${PGO_CLIENT_VERSION:-v4.4.1}"
PGO_CLIENT_URL="https://github.com/CrunchyData/postgres-operator/releases/download/${PGO_CLIENT_VERSION}"
PGO_CMD="${PGO_CMD-kubectl}"
diff --git a/installers/kubectl/postgres-operator-ocp311.yml b/installers/kubectl/postgres-operator-ocp311.yml
index e9abff59d4..dfce225a9e 100644
--- a/installers/kubectl/postgres-operator-ocp311.yml
+++ b/installers/kubectl/postgres-operator-ocp311.yml
@@ -40,7 +40,7 @@ data:
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
- ccp_image_tag: "centos7-12.3-4.4.0"
+ ccp_image_tag: "centos7-12.4-4.4.1"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -80,14 +80,14 @@ data:
pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
- pgo_client_version: "4.4.0"
+ pgo_client_version: "4.4.1"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
- pgo_image_tag: "centos7-4.4.0"
+ pgo_image_tag: "centos7-4.4.1"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
@@ -169,7 +169,7 @@ spec:
restartPolicy: Never
containers:
- name: pgo-deploy
- image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.0
+ image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.1
imagePullPolicy: IfNotPresent
env:
- name: DEPLOY_ACTION
diff --git a/installers/kubectl/postgres-operator.yml b/installers/kubectl/postgres-operator.yml
index 716cc3ed6b..cec1f1bb7d 100644
--- a/installers/kubectl/postgres-operator.yml
+++ b/installers/kubectl/postgres-operator.yml
@@ -134,7 +134,7 @@ rules:
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
- ccp_image_tag: "centos7-12.3-4.4.0"
+ ccp_image_tag: "centos7-12.4-4.4.1"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -174,14 +174,14 @@ rules:
pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
- pgo_client_version: "4.4.0"
+ pgo_client_version: "4.4.1"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
- pgo_image_tag: "centos7-4.4.0"
+ pgo_image_tag: "centos7-4.4.1"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
@@ -276,7 +276,7 @@ spec:
restartPolicy: Never
containers:
- name: pgo-deploy
- image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.0
+ image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.1
imagePullPolicy: IfNotPresent
env:
- name: DEPLOY_ACTION
diff --git a/installers/olm/Makefile b/installers/olm/Makefile
index 09ff82042f..e6881c21c2 100644
--- a/installers/olm/Makefile
+++ b/installers/olm/Makefile
@@ -2,7 +2,7 @@
.SUFFIXES:
CCP_IMAGE_PREFIX ?= registry.developers.crunchydata.com/crunchydata
-CCP_PG_FULLVERSION ?= 12.3
+CCP_PG_FULLVERSION ?= 12.4
CCP_POSTGIS_VERSION ?= 3.0
KUBECONFIG ?= $(HOME)/.kube/config
OLM_SDK_VERSION ?= 0.13.0
@@ -10,7 +10,7 @@ OLM_TOOLS ?= registry.localhost:5000/postgres-operator-olm-tools:$(OLM_SDK_VERSI
OLM_VERSION ?= 0.14.2
PGO_BASEOS ?= centos7
PGO_IMAGE_PREFIX ?= registry.developers.crunchydata.com/crunchydata
-PGO_VERSION ?= 4.4.0
+PGO_VERSION ?= 4.4.1
PGO_IMAGE_TAG ?= $(PGO_BASEOS)-$(PGO_VERSION)
CCP_IMAGE_TAG ?= $(PGO_BASEOS)-$(CCP_PG_FULLVERSION)-$(PGO_VERSION)
CCP_POSTGIS_IMAGE_TAG ?= $(PGO_BASEOS)-$(CCP_PG_FULLVERSION)-$(CCP_POSTGIS_VERSION)-$(PGO_VERSION)
diff --git a/pkg/apis/crunchydata.com/v1/doc.go b/pkg/apis/crunchydata.com/v1/doc.go
index d4040f582a..63b21d1c91 100644
--- a/pkg/apis/crunchydata.com/v1/doc.go
+++ b/pkg/apis/crunchydata.com/v1/doc.go
@@ -53,7 +53,7 @@ cluster.
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.0",
+ '{"ClientVersion":"4.4.1",
"Namespace":"pgouser1",
"Name":"mycluster",
$PGO_APISERVER_URL/clusters
@@ -72,7 +72,7 @@ show all of the clusters that are in the given namespace.
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.0",
+ '{"ClientVersion":"4.4.1",
"Namespace":"pgouser1",
"Clustername":"mycluster"}' \
$PGO_APISERVER_URL/showclusters
@@ -82,7 +82,7 @@ $PGO_APISERVER_URL/showclusters
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.0",
+ '{"ClientVersion":"4.4.1",
"Namespace":"pgouser1",
"Clustername":"mycluster"}' \
$PGO_APISERVER_URL/clustersdelete
@@ -90,7 +90,7 @@ $PGO_APISERVER_URL/clustersdelete
Schemes: http, https
BasePath: /
- Version: 4.4.0
+ Version: 4.4.1
License: Apache 2.0 http://www.apache.org/licenses/LICENSE-2.0
Contact: Crunchy Data https://www.crunchydata.com/
diff --git a/pkg/apiservermsgs/common.go b/pkg/apiservermsgs/common.go
index d8407415bc..5c7ba74143 100644
--- a/pkg/apiservermsgs/common.go
+++ b/pkg/apiservermsgs/common.go
@@ -15,7 +15,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-const PGO_VERSION = "4.4.0"
+const PGO_VERSION = "4.4.1"
// Ok status
const Ok = "ok"
diff --git a/redhat/atomic/help.1 b/redhat/atomic/help.1
index 20abae2707..34735fc700 100644
--- a/redhat/atomic/help.1
+++ b/redhat/atomic/help.1
@@ -56,4 +56,4 @@ The Red Hat Enterprise Linux version from which the container was built. For exa
\fB\fCRelease=\fR
.PP
-The specific release number of the container. For example, Release="4.4.0"
+The specific release number of the container. For example, Release="4.4.1"
diff --git a/redhat/atomic/help.md b/redhat/atomic/help.md
index 77a3d7920f..6fd906b198 100644
--- a/redhat/atomic/help.md
+++ b/redhat/atomic/help.md
@@ -45,4 +45,4 @@ The Red Hat Enterprise Linux version from which the container was built. For exa
`Release=`
-The specific release number of the container. For example, Release="4.4.0"
+The specific release number of the container. For example, Release="4.4.1"
From 4a41cc6396a2301395ce68f8198911849b67ac99 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 17 Aug 2020 12:45:46 -0400
Subject: [PATCH 09/77] Add 4.3.3 release notes
---
docs/content/releases/4.3.3.md | 48 ++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
create mode 100644 docs/content/releases/4.3.3.md
diff --git a/docs/content/releases/4.3.3.md b/docs/content/releases/4.3.3.md
new file mode 100644
index 0000000000..c76495049d
--- /dev/null
+++ b/docs/content/releases/4.3.3.md
@@ -0,0 +1,48 @@
+---
+title: "4.3.3"
+date:
+draft: false
+weight: 93
+---
+
+Crunchy Data announces the release of the [PostgreSQL Operator](https://www.crunchydata.com/products/crunchy-postgresql-operator/) 4.3.3 on August 17, 2020.
+
+The PostgreSQL Operator is released in conjunction with the [Crunchy Container Suite](https://github.com/CrunchyData/crunchy-containers/).
+
+The PostgreSQL Operator 4.3.3 release includes the following software versions upgrades:
+
+- The PostgreSQL containers now use versions 12.4, 11.9, 10.14, 9.6.19, and 9.5.23
+- pgBouncer is now at version 1.14.
+
+PostgreSQL Operator is tested with Kubernetes 1.13 - 1.18, OpenShift 3.11+, OpenShift 4.3+, Google Kubernetes Engine (GKE), and VMware Enterprise PKS 1.3+.
+
+
+## Changes
+
+- Perform a `pg_dump` from a specific database using the `--database` flag when using `pgo backup` with `--backup-type=pgdump`.
+- Restore a `pg_dump` to a specific database using the `--pgdump-database` flag using `pgo restore` when `--backup-type=pgdump` is specified.
+- Add the `--client` flag to `pgo version` to output the client version of `pgo`.
+- The PostgreSQL cluster scope is now utilized to identify and sync the ConfigMap responsible for the DCS for a PostgreSQL cluster.
+- The `PGMONITOR_PASSWORD` is now populated by an environmental variable secret. This environmental variable is only set on a primary instance as it is only needed at the time a PostgreSQL cluster is initialized.
+- Remove "Operator Start Time" from `pgo status` as it is more convenient and accurate to get this information from `kubectl` and the like, and it was not working due to RBAC privileges. (Reported by @mw-0).
+- `pgo-rmdata` container no longer runs as the `root` user, but as `daemon` (UID 2)
+- Remove dependency on the `expenv` binary that was included in the PostgreSQL Operator release. All `expenv` calls were either replaced with the native `envsubst` program or removed.
+
+## Fixes
+
+- Add validation to ensure that limits for CPU/memory are greater-than-or-equal-to the requests. This applies to any command that can set a limit/request.
+- Ensure WAL archives are pushed to all repositories when pgBackRest is set to use both a local and a S3-based repository
+- Silence expected error conditions when a pgBackRest repository is being initialized.
+- Add the `watch` permissions to the `pgo-deployer` ServiceAccount.
+- Ensure `client-setup.sh` works with when there is an existing `pgo` client in the install path
+- Ensure the PostgreSQL Operator can be uninstalled by adding `list` verb ClusterRole privileges to several Kubernetes objects.
+- Bring up the correct number of pgBouncer replicas when `pgo update cluster --startup` is issued.
+- Fixed issue where `pgo scale` would not work after `pgo update cluster --shutdown` and `pgo update cluster --startup` were run.
+- Ensure `pgo scaledown` deletes external WAL volumes from the replica that is removed.
+- Fix for PostgreSQL cluster startup logic when performing a restore.
+- Do not consider non-running Pods as primary Pods when checking for multiple primaries (Reported by @djcooklup).
+- Fix race condition that could occur while `pgo upgrade` was running while a HA configuration map attempted to sync. (Reported by Paul Heinen @v3nturetheworld).
+- Silence "ConfigMap not found" error messages that occurred during PostgreSQL cluster initialization, as these were not real errors.
+- Fix an issue with controller processing, which could manifest in PostgreSQL clusters not being deleted.
+- Eliminate `gcc` from the `postgres-ha` and `pgadmin4` containers.
+- Fix `pgo label` when applying multiple labels at once.
From 58c58289482682183c6ef9a0b01084ab630ecda8 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 17 Aug 2020 12:47:17 -0400
Subject: [PATCH 10/77] Add 4.4.1 release notes
---
docs/content/releases/4.4.1.md | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
create mode 100644 docs/content/releases/4.4.1.md
diff --git a/docs/content/releases/4.4.1.md b/docs/content/releases/4.4.1.md
new file mode 100644
index 0000000000..7057ee69ae
--- /dev/null
+++ b/docs/content/releases/4.4.1.md
@@ -0,0 +1,23 @@
+---
+title: "4.4.1"
+date:
+draft: false
+weight: 79
+---
+
+Crunchy Data announces the release of the [PostgreSQL Operator](https://www.crunchydata.com/products/crunchy-postgresql-operator/) 4.4.1 on August 17, 2020.
+
+The PostgreSQL Operator is released in conjunction with the [Crunchy Container Suite](https://github.com/CrunchyData/crunchy-containers/).
+
+The PostgreSQL Operator 4.4.1 release includes the following software versions upgrades:
+
+- The PostgreSQL containers now use versions 12.4, 11.9, 10.14, 9.6.19, and 9.5.23
+
+PostgreSQL Operator is tested with Kubernetes 1.13 - 1.18, OpenShift 3.11+, OpenShift 4.3+, Google Kubernetes Engine (GKE), and VMware Enterprise PKS 1.3+.
+
+## Fixes
+
+- The pgBackRest URI style defaults to `host` if it is not set.
+- Fix `pgo label` when applying multiple labels at once.
+- pgBadger now has a default memory limit of 64Mi, which should help avoid a visit from the OOM killer.
+- Fix `pgo create pgorole` so that the expression `--permissions=*` works.
From f71b5a3b326ed464baaabed61e58542fbbe7a0b4 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Tue, 1 Sep 2020 14:10:06 -0400
Subject: [PATCH 11/77] Restrict check for pgBackRest primary Pods to running
pods
There could be cases where a pgBackRest Pod is running while
another is terminating, and we want to ensure that the full
pgBackRest functionality is available when there is one (and
presently, only one) pgBackRest Pod available for the request.
Issue: [ch9155]
Issue: #1835
---
internal/apiserver/backrestservice/backrestimpl.go | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/internal/apiserver/backrestservice/backrestimpl.go b/internal/apiserver/backrestservice/backrestimpl.go
index 048b0237cb..d41428478e 100644
--- a/internal/apiserver/backrestservice/backrestimpl.go
+++ b/internal/apiserver/backrestservice/backrestimpl.go
@@ -36,6 +36,7 @@ import (
log "github.com/sirupsen/logrus"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/fields"
)
const containername = "database"
@@ -291,7 +292,13 @@ func getPrimaryPodName(cluster *crv1.Pgcluster, ns string) (string, error) {
//look up the backrest-repo pod name
selector := "pg-cluster=" + cluster.Spec.Name + ",pgo-backrest-repo=true"
- repopods, err := apiserver.Clientset.CoreV1().Pods(ns).List(metav1.ListOptions{LabelSelector: selector})
+
+ options := metav1.ListOptions{
+ FieldSelector: fields.OneTermEqualSelector("status.phase", string(v1.PodRunning)).String(),
+ LabelSelector: selector,
+ }
+
+ repopods, err := apiserver.Clientset.CoreV1().Pods(ns).List(options)
if len(repopods.Items) != 1 {
log.Errorf("pods len != 1 for cluster %s", cluster.Spec.Name)
return "", errors.New("backrestrepo pod not found for cluster " + cluster.Spec.Name)
From 35f71450f1c99271e150e55a61f2ae56a45a3a84 Mon Sep 17 00:00:00 2001
From: Chris Bandy
Date: Fri, 28 Aug 2020 15:33:31 -0500
Subject: [PATCH 12/77] Copy pgBackRest S3 secrets during cluster upgrade
Starting in 4.3, pgBackRest secrets are overwritten during upgrade in
order to generate new SSH keys and corresponding SSH config. Some
non-SSH secrets were omitted.
Issue: [ch9063]
See: 7ef89deb88a5fcf43b0034811ecde03d2bdea277
---
internal/operator/cluster/upgrade.go | 44 ++++++++++++++++++++--------
internal/util/cluster.go | 3 ++
2 files changed, 35 insertions(+), 12 deletions(-)
diff --git a/internal/operator/cluster/upgrade.go b/internal/operator/cluster/upgrade.go
index d7675ce97e..ee766c89af 100644
--- a/internal/operator/cluster/upgrade.go
+++ b/internal/operator/cluster/upgrade.go
@@ -312,9 +312,6 @@ func deleteBeforeUpgrade(clientset kubernetes.Interface, restclient *rest.RESTCl
// delete the '-pgha-default-config' configmap, if it exists so the config syncer
// will not try to use it instead of '-pgha-config'
clientset.CoreV1().ConfigMaps(namespace).Delete(clusterName+"-pgha-default-config", &metav1.DeleteOptions{})
-
- // delete the backrest repo config secret, since key encryption has been updated from RSA to EdDSA
- clientset.CoreV1().Secrets(namespace).Delete(clusterName+"-backrest-repo-config", &metav1.DeleteOptions{})
}
// deploymentWait is modified from cluster.waitForDeploymentDelete. It simply waits for the current primary deployment
@@ -405,17 +402,35 @@ func createUpgradePGHAConfigMap(clientset kubernetes.Interface, cluster *crv1.Pg
return nil
}
-// recreateBackrestRepoSecret deletes and recreates the secret for the pgBackRest repo. This is needed
+// recreateBackrestRepoSecret overwrites the secret for the pgBackRest repo. This is needed
// because the key encryption algorithm has been updated from RSA to EdDSA
func recreateBackrestRepoSecret(clientset kubernetes.Interface, clustername, namespace, operatorNamespace string) {
- if err := util.CreateBackrestRepoSecrets(clientset,
- util.BackrestRepoConfig{
- BackrestS3Key: "", // these are set to empty so that it can be generated
- BackrestS3KeySecret: "",
- ClusterName: clustername,
- ClusterNamespace: namespace,
- OperatorNamespace: operatorNamespace,
- }); err != nil {
+ config := util.BackrestRepoConfig{
+ ClusterName: clustername,
+ ClusterNamespace: namespace,
+ OperatorNamespace: operatorNamespace,
+ }
+
+ secretName := clustername + "-backrest-repo-config"
+ secret, err := clientset.CoreV1().Secrets(namespace).Get(secretName, metav1.GetOptions{})
+
+ // >= 4.3
+ if err == nil {
+ if b, ok := secret.Data["aws-s3-ca.crt"]; ok {
+ config.BackrestS3CA = b
+ }
+ if b, ok := secret.Data["aws-s3-key"]; ok {
+ config.BackrestS3Key = string(b)
+ }
+ if b, ok := secret.Data["aws-s3-key-secret"]; ok {
+ config.BackrestS3KeySecret = string(b)
+ }
+ }
+
+ if err == nil {
+ err = util.CreateBackrestRepoSecrets(clientset, config)
+ }
+ if err != nil {
log.Errorf("error generating new backrest repo secrets during pgcluster upgrade: %v", err)
}
}
@@ -490,6 +505,11 @@ func preparePgclusterForUpgrade(pgcluster *crv1.Pgcluster, parameters map[string
// cluster operations in this version of the Postgres Operator
pgcluster.ObjectMeta.Labels[config.LABEL_BACKREST] = "true"
+ // added in 4.4
+ if pgcluster.Spec.BackrestS3VerifyTLS == "" {
+ pgcluster.Spec.BackrestS3VerifyTLS = operator.Pgo.Cluster.BackrestS3VerifyTLS
+ }
+
// add a label with the PGO version upgraded from and to
pgcluster.Annotations[config.ANNOTATION_UPGRADE_INFO] = "From_" + oldpgoversion + "_to_" + parameters[config.LABEL_PGO_VERSION]
// update the "is upgraded" label to indicate cluster has been upgraded
diff --git a/internal/util/cluster.go b/internal/util/cluster.go
index d9c8cc2091..91c7cfec95 100644
--- a/internal/util/cluster.go
+++ b/internal/util/cluster.go
@@ -176,6 +176,9 @@ func CreateBackrestRepoSecrets(clientset kubernetes.Interface,
}
_, err = clientset.CoreV1().Secrets(backrestRepoConfig.ClusterNamespace).Create(&secret)
+ if kubeapi.IsAlreadyExists(err) {
+ _, err = clientset.CoreV1().Secrets(backrestRepoConfig.ClusterNamespace).Update(&secret)
+ }
return err
}
From f0adfea798548a187f8200bb6dab0ad8ec2dc041 Mon Sep 17 00:00:00 2001
From: Chris Bandy
Date: Wed, 2 Sep 2020 16:14:23 -0500
Subject: [PATCH 13/77] Upgrade pgBackRest settings from 4.2 and earlier
The format of pgBackRest secrets changed in 4.3, and operator settings
started being saved to the cluster in 4.4.
Issue: [ch9063]
See: b1e03f1ed301f60451cf83c73a5479d933e6d2b7
---
internal/operator/cluster/upgrade.go | 29 ++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/internal/operator/cluster/upgrade.go b/internal/operator/cluster/upgrade.go
index ee766c89af..fad958ea4e 100644
--- a/internal/operator/cluster/upgrade.go
+++ b/internal/operator/cluster/upgrade.go
@@ -36,6 +36,7 @@ import (
"k8s.io/apimachinery/pkg/fields"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
+ "sigs.k8s.io/yaml"
)
// Store image names as constants to use later
@@ -414,6 +415,23 @@ func recreateBackrestRepoSecret(clientset kubernetes.Interface, clustername, nam
secretName := clustername + "-backrest-repo-config"
secret, err := clientset.CoreV1().Secrets(namespace).Get(secretName, metav1.GetOptions{})
+ // 4.1, 4.2
+ if err == nil {
+ if b, ok := secret.Data["aws-s3-ca.crt"]; ok {
+ config.BackrestS3CA = b
+ }
+ if b, ok := secret.Data["aws-s3-credentials.yaml"]; ok {
+ var parsed struct {
+ Key string `yaml:"aws-s3-key"`
+ KeySecret string `yaml:"aws-s3-key-secret"`
+ }
+ if err = yaml.Unmarshal(b, &parsed); err == nil {
+ config.BackrestS3Key = parsed.Key
+ config.BackrestS3KeySecret = parsed.KeySecret
+ }
+ }
+ }
+
// >= 4.3
if err == nil {
if b, ok := secret.Data["aws-s3-ca.crt"]; ok {
@@ -505,6 +523,17 @@ func preparePgclusterForUpgrade(pgcluster *crv1.Pgcluster, parameters map[string
// cluster operations in this version of the Postgres Operator
pgcluster.ObjectMeta.Labels[config.LABEL_BACKREST] = "true"
+ // added in 4.2 and copied from configuration in 4.4
+ if pgcluster.Spec.BackrestS3Bucket == "" {
+ pgcluster.Spec.BackrestS3Bucket = operator.Pgo.Cluster.BackrestS3Bucket
+ }
+ if pgcluster.Spec.BackrestS3Endpoint == "" {
+ pgcluster.Spec.BackrestS3Endpoint = operator.Pgo.Cluster.BackrestS3Endpoint
+ }
+ if pgcluster.Spec.BackrestS3Region == "" {
+ pgcluster.Spec.BackrestS3Region = operator.Pgo.Cluster.BackrestS3Region
+ }
+
// added in 4.4
if pgcluster.Spec.BackrestS3VerifyTLS == "" {
pgcluster.Spec.BackrestS3VerifyTLS = operator.Pgo.Cluster.BackrestS3VerifyTLS
From c2ee6f906ac39f4c162ff6ccd95fabb0276c9a43 Mon Sep 17 00:00:00 2001
From: Chris Bandy
Date: Tue, 8 Sep 2020 12:16:14 -0500
Subject: [PATCH 14/77] Use a byte slice when generating passwords
Go 1.15 complained about the conversion from int64 to string.
See: 44e3a1819927e53b2674c90a142ac7d90c80a4d2
---
internal/util/secrets.go | 8 ++---
internal/util/secrets_test.go | 58 +++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 5 deletions(-)
create mode 100644 internal/util/secrets_test.go
diff --git a/internal/util/secrets.go b/internal/util/secrets.go
index 16bb5758d9..1ef90e7bd6 100644
--- a/internal/util/secrets.go
+++ b/internal/util/secrets.go
@@ -76,9 +76,7 @@ func CreateSecret(clientset kubernetes.Interface, db, secretName, username, pass
// GeneratePassword generates a password of a given length out of the acceptable
// ASCII characters suitable for a password
func GeneratePassword(length int) (string, error) {
- // for "length" times, we are going to get a random ASCII character, and
- // append it to the "password" string
- password := ""
+ password := make([]byte, length)
for i := 0; i < length; i++ {
char, err := rand.Int(rand.Reader, passwordCharSelector)
@@ -88,10 +86,10 @@ func GeneratePassword(length int) (string, error) {
return "", err
}
- password += string(passwordCharLower + char.Int64())
+ password[i] = byte(passwordCharLower + char.Int64())
}
- return password, nil
+ return string(password), nil
}
// GeneratedPasswordLength returns the value for what the length of a
diff --git a/internal/util/secrets_test.go b/internal/util/secrets_test.go
new file mode 100644
index 0000000000..89cbcebac9
--- /dev/null
+++ b/internal/util/secrets_test.go
@@ -0,0 +1,58 @@
+package util
+
+/*
+ Copyright 2020 Crunchy Data Solutions, Inc.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import (
+ "strings"
+ "testing"
+ "unicode"
+)
+
+func TestGeneratePassword(t *testing.T) {
+ // different lengths
+ for _, length := range []int{1, 2, 3, 5, 20} {
+ password, err := GeneratePassword(length)
+ if err != nil {
+ t.Fatalf("expected no error, got %v", err)
+ }
+ if expected, actual := length, len(password); expected != actual {
+ t.Fatalf("expected length %v, got %v", expected, actual)
+ }
+ if i := strings.IndexFunc(password, unicode.IsPrint); i > 0 {
+ t.Fatalf("expected only printable characters, got %q in %q", password[i], password)
+ }
+ }
+
+ // random contents
+ previous := []string{}
+
+ for i := 0; i < 10; i++ {
+ password, err := GeneratePassword(5)
+ if err != nil {
+ t.Fatalf("expected no error, got %v", err)
+ }
+ if i := strings.IndexFunc(password, unicode.IsPrint); i > 0 {
+ t.Fatalf("expected only printable characters, got %q in %q", password[i], password)
+ }
+
+ for i := range previous {
+ if password == previous[i] {
+ t.Fatalf("expected passwords to not repeat, got %q after %q", password, previous)
+ }
+ }
+ previous = append(previous, password)
+ }
+}
From 00e809211d0fc370cb24a5d2d0dbe27ae3002cbd Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 14 Sep 2020 16:41:39 -0400
Subject: [PATCH 15/77] Ensure pgBouncer port is derived from Cluster spec
Previously, it was derived from the Postgres Operator configuration,
which is actually incorrect for several reasons, so technically
this constitutes a bug.
Issue: #1830
---
internal/operator/cluster/pgbouncer.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/internal/operator/cluster/pgbouncer.go b/internal/operator/cluster/pgbouncer.go
index 2b8e1cc207..9e5065daa3 100644
--- a/internal/operator/cluster/pgbouncer.go
+++ b/internal/operator/cluster/pgbouncer.go
@@ -460,7 +460,7 @@ func createPgBouncerDeployment(clientset kubernetes.Interface, cluster *crv1.Pgc
ClusterName: cluster.Name,
CCPImagePrefix: util.GetValueOrDefault(cluster.Spec.CCPImagePrefix, operator.Pgo.Cluster.CCPImagePrefix),
CCPImageTag: cluster.Spec.CCPImageTag,
- Port: operator.Pgo.Cluster.Port,
+ Port: cluster.Spec.Port,
PGBouncerSecret: util.GeneratePgBouncerSecretName(cluster.Name),
ContainerResources: operator.GetResourcesJSON(cluster.Spec.PgBouncer.Resources,
cluster.Spec.PgBouncer.Limits),
From 81b0b38c2efac05d36eb858789b2f92a2d09fb22 Mon Sep 17 00:00:00 2001
From: Joseph Mckulka
Date: Wed, 22 Jul 2020 18:48:54 -0400
Subject: [PATCH 16/77] updates template to generate configmap from values.yaml
---
.../postgres-operator/templates/_helpers.tpl | 11 ++
.../templates/values_configmap.yaml | 117 +-----------------
2 files changed, 12 insertions(+), 116 deletions(-)
diff --git a/installers/helm/postgres-operator/templates/_helpers.tpl b/installers/helm/postgres-operator/templates/_helpers.tpl
index b1457b2728..a1027ba8d7 100644
--- a/installers/helm/postgres-operator/templates/_helpers.tpl
+++ b/installers/helm/postgres-operator/templates/_helpers.tpl
@@ -84,3 +84,14 @@ cluster-admin
{{ include "postgres-operator.fullname" . }}-cr
{{- end }}
{{- end }}
+
+{{/*
+Generate Configmap based on Values defined in values.yaml
+*/}}
+{{- define "postgres-operator.values" -}}
+values.yaml: |
+ ---
+{{- range $index, $value := .Values }}
+{{ $index | indent 2 }}: {{ $value | quote }}
+{{- end }}
+{{- end }}
diff --git a/installers/helm/postgres-operator/templates/values_configmap.yaml b/installers/helm/postgres-operator/templates/values_configmap.yaml
index f30ff0233c..15ab0b9606 100644
--- a/installers/helm/postgres-operator/templates/values_configmap.yaml
+++ b/installers/helm/postgres-operator/templates/values_configmap.yaml
@@ -6,119 +6,4 @@ metadata:
labels:
{{ include "postgres-operator.labels" . | indent 4 }}
data:
- values.yaml: |
- ---
- archive_mode: "{{ .Values.archive_mode}}"
- archive_timeout: "{{ .Values.archive_timeout}}"
- backrest_aws_s3_bucket: "{{ .Values.backrest_aws_s3_bucket}}"
- backrest_aws_s3_endpoint: "{{ .Values.backrest_aws_s3_endpoint}}"
- backrest_aws_s3_key: "{{ .Values.backrest_aws_s3_key}}"
- backrest_aws_s3_region: "{{ .Values.backrest_aws_s3_region}}"
- backrest_aws_s3_secret: "{{ .Values.backrest_aws_s3_secret}}"
- backrest_aws_s3_uri_style: "{{ .Values.backrest_aws_s3_uri_style }}"
- backrest_aws_s3_verify_tls: "{{ .Values.backrest_aws_s3_verify_tls }}"
- backrest_port: "{{ .Values.backrest_port}}"
- badger: "{{ .Values.badger}}"
- ccp_image_prefix: "{{ .Values.ccp_image_prefix}}"
- ccp_image_pull_secret: "{{ .Values.ccp_image_pull_secret}}"
- ccp_image_pull_secret_manifest: "{{ .Values.ccp_image_pull_secret_manifest}}"
- ccp_image_tag: "{{ .Values.ccp_image_tag}}"
- create_rbac: "{{ .Values.create_rbac}}"
- crunchy_debug: "{{ .Values.crunchy_debug}}"
- db_name: "{{ .Values.db_name}}"
- db_password_age_days: "{{ .Values.db_password_age_days}}"
- db_password_length: "{{ .Values.db_password_length}}"
- db_port: "{{ .Values.db_port}}"
- db_replicas: "{{ .Values.db_replicas}}"
- db_user: "{{ .Values.db_user}}"
- default_instance_memory: "{{ .Values.default_instance_memory}}"
- default_pgbackrest_memory: "{{ .Values.default_pgbackrest_memory}}"
- default_pgbouncer_memory: "{{ .Values.default_pgbouncer_memory}}"
- delete_metrics_namespace: "{{ .Values.delete_metrics_namespace}}"
- delete_operator_namespace: "{{ .Values.delete_operator_namespace}}"
- delete_watched_namespaces: "{{ .Values.delete_watched_namespaces}}"
- disable_auto_failover: "{{ .Values.disable_auto_failover}}"
- disable_fsgroup: "{{ .Values.disable_fsgroup}}"
- reconcile_rbac: "{{ .Values.reconcile_rbac}}"
- exporterport: "{{ .Values.exporterport}}"
- metrics: "{{ .Values.metrics}}"
- namespace: "{{ .Values.namespace}}"
- namespace_mode: "{{ .Values.namespace_mode}}"
- pgbadgerport: "{{ .Values.pgbadgerport}}"
- pgo_add_os_ca_store: "{{ .Values.pgo_add_os_ca_store}}"
- pgo_admin_password: "{{ .Values.pgo_admin_password}}"
- pgo_admin_perms: "{{ .Values.pgo_admin_perms}}"
- pgo_admin_role_name: "{{ .Values.pgo_admin_role_name}}"
- pgo_admin_username: "{{ .Values.pgo_admin_username}}"
- pgo_apiserver_port: "{{ .Values.pgo_apiserver_port}}"
- pgo_apiserver_url: "{{ .Values.pgo_apiserver_url}}"
- pgo_client_cert_secret: "{{ .Values.pgo_client_cert_secret}}"
- pgo_client_container_install: "{{ .Values.pgo_client_container_install}}"
- pgo_client_version: "{{ .Values.pgo_client_version}}"
- pgo_cluster_admin: "{{ .Values.pgo_cluster_admin}}"
- pgo_disable_eventing: "{{ .Values.pgo_disable_eventing}}"
- pgo_disable_tls: "{{ .Values.pgo_disable_tls}}"
- pgo_image_prefix: "{{ .Values.pgo_image_prefix}}"
- pgo_image_pull_secret: "{{ .Values.pgo_image_pull_secret}}"
- pgo_image_pull_secret_manifest: "{{ .Values.pgo_image_pull_secret_manifest}}"
- pgo_image_tag: "{{ .Values.pgo_image_tag}}"
- pgo_installation_name: "{{ .Values.pgo_installation_name}}"
- pgo_noauth_routes: "{{ .Values.pgo_noauth_routes}}"
- pgo_operator_namespace: "{{ .Values.pgo_operator_namespace}}"
- pgo_tls_ca_store: "{{ .Values.pgo_tls_ca_store}}"
- pgo_tls_no_verify: "{{ .Values.pgo_tls_no_verify}}"
- pod_anti_affinity: "{{ .Values.pod_anti_affinity}}"
- pod_anti_affinity_pgbackrest: "{{ .Values.pod_anti_affinity_pgbackrest}}"
- pod_anti_affinity_pgbouncer: "{{ .Values.pod_anti_affinity_pgbouncer}}"
- scheduler_timeout: "{{ .Values.scheduler_timeout}}"
- service_type: "{{ .Values.service_type}}"
- sync_replication: "{{ .Values.sync_replication}}"
- backrest_storage: "{{ .Values.backrest_storage}}"
- backup_storage: "{{ .Values.backup_storage}}"
- primary_storage: "{{ .Values.primary_storage}}"
- replica_storage: "{{ .Values.replica_storage}}"
- wal_storage: "{{ .Values.wal_storage}}"
- storage1_name: "{{ .Values.storage1_name}}"
- storage1_access_mode: "{{ .Values.storage1_access_mode}}"
- storage1_size: "{{ .Values.storage1_size}}"
- storage1_type: "{{ .Values.storage1_type}}"
- storage2_name: "{{ .Values.storage2_name}}"
- storage2_access_mode: "{{ .Values.storage2_access_mode}}"
- storage2_size: "{{ .Values.storage2_size}}"
- storage2_type: "{{ .Values.storage2_type}}"
- storage3_name: "{{ .Values.storage3_name}}"
- storage3_access_mode: "{{ .Values.storage3_access_mode}}"
- storage3_size: "{{ .Values.storage3_size}}"
- storage3_type: "{{ .Values.storage3_type}}"
- storage3_supplemental_groups: "{{ .Values.storage3_supplemental_groups}}"
- storage4_name: "{{ .Values.storage4_name}}"
- storage4_access_mode: "{{ .Values.storage4_access_mode}}"
- storage4_size: "{{ .Values.storage4_size}}"
- storage4_match_labels: "{{ .Values.storage4_match_labels}}"
- storage4_type: "{{ .Values.storage4_type}}"
- storage4_supplemental_groups: "{{ .Values.storage4_supplemental_groups}}"
- storage5_name: "{{ .Values.storage5_name}}"
- storage5_access_mode: "{{ .Values.storage5_access_mode}}"
- storage5_size: "{{ .Values.storage5_size}}"
- storage5_type: "{{ .Values.storage5_type}}"
- storage5_class: "{{ .Values.storage5_class}}"
- storage6_name: "{{ .Values.storage6_name}}"
- storage6_access_mode: "{{ .Values.storage6_access_mode}}"
- storage6_size: "{{ .Values.storage6_size}}"
- storage6_type: "{{ .Values.storage6_type}}"
- storage6_class: "{{ .Values.storage6_class}}"
- storage7_name: "{{ .Values.storage7_name}}"
- storage7_access_mode: "{{ .Values.storage7_access_mode}}"
- storage7_size: "{{ .Values.storage7_size}}"
- storage7_type: "{{ .Values.storage7_type}}"
- storage7_class: "{{ .Values.storage7_class}}"
- storage8_name: "{{ .Values.storage8_name}}"
- storage8_access_mode: "{{ .Values.storage8_access_mode}}"
- storage8_size: "{{ .Values.storage8_size}}"
- storage8_type: "{{ .Values.storage8_type}}"
- storage8_class: "{{ .Values.storage8_class}}"
- storage9_name: "{{ .Values.storage9_name}}"
- storage9_access_mode: "{{ .Values.storage9_access_mode}}"
- storage9_size: "{{ .Values.storage9_size}}"
- storage9_type: "{{ .Values.storage9_type}}"
- storage9_class: "{{ .Values.storage9_class}}"
+{{ include "postgres-operator.values" . | indent 2}}
From dd1701d7f9a25d0acb58781203987ad03010538d Mon Sep 17 00:00:00 2001
From: Joseph Mckulka
Date: Fri, 24 Jul 2020 18:40:36 +0000
Subject: [PATCH 17/77] Fixes yaml spacing of yaml files
---
.../kubectl/postgres-operator-ocp311.yml | 66 ++--
installers/kubectl/postgres-operator.yml | 334 +++++++++---------
2 files changed, 200 insertions(+), 200 deletions(-)
diff --git a/installers/kubectl/postgres-operator-ocp311.yml b/installers/kubectl/postgres-operator-ocp311.yml
index dfce225a9e..4b56b1646c 100644
--- a/installers/kubectl/postgres-operator-ocp311.yml
+++ b/installers/kubectl/postgres-operator-ocp311.yml
@@ -1,22 +1,22 @@
apiVersion: v1
kind: ServiceAccount
metadata:
- name: pgo-deployer-sa
- namespace: pgo
+ name: pgo-deployer-sa
+ namespace: pgo
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
- name: pgo-deployer-crb
- namespace: pgo
+ name: pgo-deployer-crb
+ namespace: pgo
roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: cluster-admin
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: cluster-admin
subjects:
-- kind: ServiceAccount
- name: pgo-deployer-sa
- namespace: pgo
+ - kind: ServiceAccount
+ name: pgo-deployer-sa
+ namespace: pgo
---
apiVersion: v1
kind: ConfigMap
@@ -157,27 +157,27 @@ data:
apiVersion: batch/v1
kind: Job
metadata:
- name: pgo-deploy
- namespace: pgo
+ name: pgo-deploy
+ namespace: pgo
spec:
- backoffLimit: 0
- template:
- metadata:
- name: pgo-deploy
- spec:
- serviceAccountName: pgo-deployer-sa
- restartPolicy: Never
- containers:
- - name: pgo-deploy
- image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.1
- imagePullPolicy: IfNotPresent
- env:
- - name: DEPLOY_ACTION
- value: install
- volumeMounts:
- - name: deployer-conf
- mountPath: "/conf"
- volumes:
- - name: deployer-conf
- configMap:
- name: pgo-deployer-cm
+ backoffLimit: 0
+ template:
+ metadata:
+ name: pgo-deploy
+ spec:
+ serviceAccountName: pgo-deployer-sa
+ restartPolicy: Never
+ containers:
+ - name: pgo-deploy
+ image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.1
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: DEPLOY_ACTION
+ value: install
+ volumeMounts:
+ - name: deployer-conf
+ mountPath: "/conf"
+ volumes:
+ - name: deployer-conf
+ configMap:
+ name: pgo-deployer-cm
diff --git a/installers/kubectl/postgres-operator.yml b/installers/kubectl/postgres-operator.yml
index cec1f1bb7d..aaec8dc931 100644
--- a/installers/kubectl/postgres-operator.yml
+++ b/installers/kubectl/postgres-operator.yml
@@ -1,8 +1,8 @@
apiVersion: v1
kind: ServiceAccount
metadata:
- name: pgo-deployer-sa
- namespace: pgo
+ name: pgo-deployer-sa
+ namespace: pgo
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
@@ -112,179 +112,179 @@ rules:
- delete
- list
---
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: pgo-deployer-cm
- namespace: pgo
- data:
- values.yaml: |+
- ---
- archive_mode: "true"
- archive_timeout: "60"
- backrest_aws_s3_bucket: ""
- backrest_aws_s3_endpoint: ""
- backrest_aws_s3_key: ""
- backrest_aws_s3_region: ""
- backrest_aws_s3_secret: ""
- backrest_aws_s3_uri_style: ""
- backrest_aws_s3_verify_tls: "true"
- backrest_port: "2022"
- badger: "false"
- ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
- ccp_image_pull_secret: ""
- ccp_image_pull_secret_manifest: ""
- ccp_image_tag: "centos7-12.4-4.4.1"
- create_rbac: "true"
- crunchy_debug: "false"
- db_name: ""
- db_password_age_days: "0"
- db_password_length: "24"
- db_port: "5432"
- db_replicas: "0"
- db_user: "testuser"
- default_instance_memory: "128Mi"
- default_pgbackrest_memory: "48Mi"
- default_pgbouncer_memory: "24Mi"
- delete_metrics_namespace: "false"
- delete_operator_namespace: "false"
- delete_watched_namespaces: "false"
- disable_auto_failover: "false"
- disable_fsgroup: "false"
- reconcile_rbac: "true"
- exporterport: "9187"
- grafana_admin_password: ""
- grafana_admin_username: "admin"
- grafana_install: "false"
- grafana_storage_access_mode: "ReadWriteOnce"
- grafana_storage_class_name: "fast"
- grafana_supplemental_groups: "65534"
- grafana_volume_size: "1G"
- metrics: "false"
- metrics_namespace: "pgo"
- namespace: "pgo"
- namespace_mode: "dynamic"
- pgbadgerport: "10000"
- pgo_add_os_ca_store: "false"
- pgo_admin_password: "examplepassword"
- pgo_admin_perms: "*"
- pgo_admin_role_name: "pgoadmin"
- pgo_admin_username: "admin"
- pgo_apiserver_port: "8443"
- pgo_apiserver_url: "https://postgres-operator"
- pgo_client_cert_secret: "pgo.tls"
- pgo_client_container_install: "false"
- pgo_client_version: "4.4.1"
- pgo_cluster_admin: "false"
- pgo_disable_eventing: "false"
- pgo_disable_tls: "false"
- pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
- pgo_image_pull_secret: ""
- pgo_image_pull_secret_manifest: ""
- pgo_image_tag: "centos7-4.4.1"
- pgo_installation_name: "devtest"
- pgo_noauth_routes: ""
- pgo_operator_namespace: "pgo"
- pgo_tls_ca_store: ""
- pgo_tls_no_verify: "false"
- pod_anti_affinity: "preferred"
- pod_anti_affinity_pgbackrest: ""
- pod_anti_affinity_pgbouncer: ""
- prometheus_install: "false"
- prometheus_storage_access_mode: "ReadWriteOnce"
- prometheus_storage_class_name: "fast"
- prometheus_supplemental_groups: "65534"
- prometheus_volume_size: "1G"
- scheduler_timeout: "3600"
- service_type: "ClusterIP"
- sync_replication: "false"
- backrest_storage: "hostpathstorage"
- backup_storage: "hostpathstorage"
- primary_storage: "hostpathstorage"
- replica_storage: "hostpathstorage"
- wal_storage: ""
- storage1_name: "hostpathstorage"
- storage1_access_mode: "ReadWriteMany"
- storage1_size: "1G"
- storage1_type: "create"
- storage2_name: "replicastorage"
- storage2_access_mode: "ReadWriteMany"
- storage2_size: "1G"
- storage2_type: "create"
- storage3_name: "nfsstorage"
- storage3_access_mode: "ReadWriteMany"
- storage3_size: "1G"
- storage3_type: "create"
- storage3_supplemental_groups: "65534"
- storage4_name: "nfsstoragered"
- storage4_access_mode: "ReadWriteMany"
- storage4_size: "1G"
- storage4_match_labels: "crunchyzone=red"
- storage4_type: "create"
- storage4_supplemental_groups: "65534"
- storage5_name: "storageos"
- storage5_access_mode: "ReadWriteOnce"
- storage5_size: "5Gi"
- storage5_type: "dynamic"
- storage5_class: "fast"
- storage6_name: "primarysite"
- storage6_access_mode: "ReadWriteOnce"
- storage6_size: "4G"
- storage6_type: "dynamic"
- storage6_class: "primarysite"
- storage7_name: "alternatesite"
- storage7_access_mode: "ReadWriteOnce"
- storage7_size: "4G"
- storage7_type: "dynamic"
- storage7_class: "alternatesite"
- storage8_name: "gce"
- storage8_access_mode: "ReadWriteOnce"
- storage8_size: "300M"
- storage8_type: "dynamic"
- storage8_class: "standard"
- storage9_name: "rook"
- storage9_access_mode: "ReadWriteOnce"
- storage9_size: "1Gi"
- storage9_type: "dynamic"
- storage9_class: "rook-ceph-block"
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: pgo-deployer-cm
+ namespace: pgo
+data:
+ values.yaml: |+
+ ---
+ archive_mode: "true"
+ archive_timeout: "60"
+ backrest_aws_s3_bucket: ""
+ backrest_aws_s3_endpoint: ""
+ backrest_aws_s3_key: ""
+ backrest_aws_s3_region: ""
+ backrest_aws_s3_secret: ""
+ backrest_aws_s3_uri_style: ""
+ backrest_aws_s3_verify_tls: "true"
+ backrest_port: "2022"
+ badger: "false"
+ ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
+ ccp_image_pull_secret: ""
+ ccp_image_pull_secret_manifest: ""
+ ccp_image_tag: "centos7-12.4-4.4.1"
+ create_rbac: "true"
+ crunchy_debug: "false"
+ db_name: ""
+ db_password_age_days: "0"
+ db_password_length: "24"
+ db_port: "5432"
+ db_replicas: "0"
+ db_user: "testuser"
+ default_instance_memory: "128Mi"
+ default_pgbackrest_memory: "48Mi"
+ default_pgbouncer_memory: "24Mi"
+ delete_metrics_namespace: "false"
+ delete_operator_namespace: "false"
+ delete_watched_namespaces: "false"
+ disable_auto_failover: "false"
+ disable_fsgroup: "false"
+ reconcile_rbac: "true"
+ exporterport: "9187"
+ grafana_admin_password: ""
+ grafana_admin_username: "admin"
+ grafana_install: "false"
+ grafana_storage_access_mode: "ReadWriteOnce"
+ grafana_storage_class_name: "fast"
+ grafana_supplemental_groups: "65534"
+ grafana_volume_size: "1G"
+ metrics: "false"
+ metrics_namespace: "pgo"
+ namespace: "pgo"
+ namespace_mode: "dynamic"
+ pgbadgerport: "10000"
+ pgo_add_os_ca_store: "false"
+ pgo_admin_password: "examplepassword"
+ pgo_admin_perms: "*"
+ pgo_admin_role_name: "pgoadmin"
+ pgo_admin_username: "admin"
+ pgo_apiserver_port: "8443"
+ pgo_apiserver_url: "https://postgres-operator"
+ pgo_client_cert_secret: "pgo.tls"
+ pgo_client_container_install: "false"
+ pgo_client_version: "4.4.1"
+ pgo_cluster_admin: "false"
+ pgo_disable_eventing: "false"
+ pgo_disable_tls: "false"
+ pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
+ pgo_image_pull_secret: ""
+ pgo_image_pull_secret_manifest: ""
+ pgo_image_tag: "centos7-4.4.1"
+ pgo_installation_name: "devtest"
+ pgo_noauth_routes: ""
+ pgo_operator_namespace: "pgo"
+ pgo_tls_ca_store: ""
+ pgo_tls_no_verify: "false"
+ pod_anti_affinity: "preferred"
+ pod_anti_affinity_pgbackrest: ""
+ pod_anti_affinity_pgbouncer: ""
+ prometheus_install: "false"
+ prometheus_storage_access_mode: "ReadWriteOnce"
+ prometheus_storage_class_name: "fast"
+ prometheus_supplemental_groups: "65534"
+ prometheus_volume_size: "1G"
+ scheduler_timeout: "3600"
+ service_type: "ClusterIP"
+ sync_replication: "false"
+ backrest_storage: "hostpathstorage"
+ backup_storage: "hostpathstorage"
+ primary_storage: "hostpathstorage"
+ replica_storage: "hostpathstorage"
+ wal_storage: ""
+ storage1_name: "hostpathstorage"
+ storage1_access_mode: "ReadWriteMany"
+ storage1_size: "1G"
+ storage1_type: "create"
+ storage2_name: "replicastorage"
+ storage2_access_mode: "ReadWriteMany"
+ storage2_size: "1G"
+ storage2_type: "create"
+ storage3_name: "nfsstorage"
+ storage3_access_mode: "ReadWriteMany"
+ storage3_size: "1G"
+ storage3_type: "create"
+ storage3_supplemental_groups: "65534"
+ storage4_name: "nfsstoragered"
+ storage4_access_mode: "ReadWriteMany"
+ storage4_size: "1G"
+ storage4_match_labels: "crunchyzone=red"
+ storage4_type: "create"
+ storage4_supplemental_groups: "65534"
+ storage5_name: "storageos"
+ storage5_access_mode: "ReadWriteOnce"
+ storage5_size: "5Gi"
+ storage5_type: "dynamic"
+ storage5_class: "fast"
+ storage6_name: "primarysite"
+ storage6_access_mode: "ReadWriteOnce"
+ storage6_size: "4G"
+ storage6_type: "dynamic"
+ storage6_class: "primarysite"
+ storage7_name: "alternatesite"
+ storage7_access_mode: "ReadWriteOnce"
+ storage7_size: "4G"
+ storage7_type: "dynamic"
+ storage7_class: "alternatesite"
+ storage8_name: "gce"
+ storage8_access_mode: "ReadWriteOnce"
+ storage8_size: "300M"
+ storage8_type: "dynamic"
+ storage8_class: "standard"
+ storage9_name: "rook"
+ storage9_access_mode: "ReadWriteOnce"
+ storage9_size: "1Gi"
+ storage9_type: "dynamic"
+ storage9_class: "rook-ceph-block"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
- name: pgo-deployer-crb
+ name: pgo-deployer-crb
roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: pgo-deployer-cr
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: pgo-deployer-cr
subjects:
-- kind: ServiceAccount
- name: pgo-deployer-sa
- namespace: pgo
+ - kind: ServiceAccount
+ name: pgo-deployer-sa
+ namespace: pgo
---
apiVersion: batch/v1
kind: Job
metadata:
- name: pgo-deploy
- namespace: pgo
+ name: pgo-deploy
+ namespace: pgo
spec:
- backoffLimit: 0
- template:
- metadata:
- name: pgo-deploy
- spec:
- serviceAccountName: pgo-deployer-sa
- restartPolicy: Never
- containers:
- - name: pgo-deploy
- image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.1
- imagePullPolicy: IfNotPresent
- env:
- - name: DEPLOY_ACTION
- value: install
- volumeMounts:
- - name: deployer-conf
- mountPath: "/conf"
- volumes:
- - name: deployer-conf
- configMap:
- name: pgo-deployer-cm
+ backoffLimit: 0
+ template:
+ metadata:
+ name: pgo-deploy
+ spec:
+ serviceAccountName: pgo-deployer-sa
+ restartPolicy: Never
+ containers:
+ - name: pgo-deploy
+ image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.1
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: DEPLOY_ACTION
+ value: install
+ volumeMounts:
+ - name: deployer-conf
+ mountPath: "/conf"
+ volumes:
+ - name: deployer-conf
+ configMap:
+ name: pgo-deployer-cm
From d653d5b224a48ff6c7f98f61e54c267227b971b4 Mon Sep 17 00:00:00 2001
From: Joseph Mckulka
Date: Tue, 28 Jul 2020 21:05:00 +0000
Subject: [PATCH 18/77] updates pgo_client download url
---
installers/ansible/roles/pgo-operator/vars/main.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/installers/ansible/roles/pgo-operator/vars/main.yml b/installers/ansible/roles/pgo-operator/vars/main.yml
index 5df7eae691..c613bb340b 100644
--- a/installers/ansible/roles/pgo-operator/vars/main.yml
+++ b/installers/ansible/roles/pgo-operator/vars/main.yml
@@ -1,3 +1,3 @@
---
-pgo_client_url: "https://github.com/CrunchyData/postgres-operator/releases/download/{{ pgo_client_version }}"
+pgo_client_url: "https://github.com/CrunchyData/postgres-operator/releases/download/v{{ pgo_client_version }}"
pgo_keys_dir: "{{ ansible_env.HOME }}/.pgo/{{ pgo_operator_namespace }}"
From 5e4c344b83d68157b7580d8c7a04ab3c48c784a3 Mon Sep 17 00:00:00 2001
From: Joseph Mckulka
Date: Mon, 27 Jul 2020 13:17:27 +0000
Subject: [PATCH 19/77] Master Config Update
This update adds a master config that is used for the Ansible, Helm, and Kubectl
installers. The config_sync.sh script is added to the hack directory, this
script will use the ansible/values.yaml file as the master config.
The values.yaml for each installer is updated to exactly match the master
config. This is a small change that includes adding a link to the docs and
syncing the pgo_client options.
The master config and the helm installer values.yaml will be out of sync until
the installers are updated with coming metrics changes. The master config still
contains metrics options but those options were removed from the helm
values.yaml.
---
hack/config_sync.sh | 24 +++++++++++++++++++
installers/ansible/values.yaml | 6 ++++-
installers/helm/postgres-operator/.helmignore | 1 +
.../helm/postgres-operator/helm_template.yaml | 20 ++++++++++++++++
installers/helm/postgres-operator/values.yaml | 1 +
.../kubectl/postgres-operator-ocp311.yml | 9 +++++--
installers/kubectl/postgres-operator.yml | 9 +++++--
7 files changed, 65 insertions(+), 5 deletions(-)
create mode 100755 hack/config_sync.sh
create mode 100644 installers/helm/postgres-operator/.helmignore
create mode 100644 installers/helm/postgres-operator/helm_template.yaml
diff --git a/hack/config_sync.sh b/hack/config_sync.sh
new file mode 100755
index 0000000000..d78d36275d
--- /dev/null
+++ b/hack/config_sync.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+test="${PGOROOT:?Need to set PGOROOT env variable}"
+
+INSTALLER_DIR="$PGOROOT/installers"
+MASTER_CONFIG="$PGOROOT/installers/ansible/values.yaml"
+
+yq write --inplace --doc 2 "$INSTALLER_DIR/kubectl/postgres-operator.yml" 'data"values.yaml"' -- "$(cat $MASTER_CONFIG)"
+yq write --inplace --doc 2 "$INSTALLER_DIR/kubectl/postgres-operator-ocp311.yml" 'data"values.yaml"' -- "$(cat $MASTER_CONFIG)"
+
+cat "$INSTALLER_DIR/helm/postgres-operator/helm_template.yaml" "$MASTER_CONFIG" > "$INSTALLER_DIR/helm/postgres-operator/values.yaml"
diff --git a/installers/ansible/values.yaml b/installers/ansible/values.yaml
index a553a19421..8ad78425b7 100644
--- a/installers/ansible/values.yaml
+++ b/installers/ansible/values.yaml
@@ -1,4 +1,8 @@
----
+# =====================
+# Configuration Options
+# More info for these options can be found in the docs
+# https://crunchydata.github.io/postgres-operator/latest/installation/configuration/
+# =====================
archive_mode: "true"
archive_timeout: "60"
backrest_aws_s3_bucket: ""
diff --git a/installers/helm/postgres-operator/.helmignore b/installers/helm/postgres-operator/.helmignore
new file mode 100644
index 0000000000..a92ca61289
--- /dev/null
+++ b/installers/helm/postgres-operator/.helmignore
@@ -0,0 +1 @@
+helm_template.yaml
diff --git a/installers/helm/postgres-operator/helm_template.yaml b/installers/helm/postgres-operator/helm_template.yaml
new file mode 100644
index 0000000000..408861e463
--- /dev/null
+++ b/installers/helm/postgres-operator/helm_template.yaml
@@ -0,0 +1,20 @@
+---
+# ======================
+# Installer Controls
+# ======================
+fullnameOverride: ""
+
+# rbac: settings for deployer RBAC creation
+rbac:
+ # rbac.create: if false RBAC resources should be in place
+ create: true
+ # rbac.useClusterAdmin: creates a ClusterRoleBinding giving cluster-admin to serviceAccount.name
+ useClusterAdmin: false
+
+# serviceAccount: settings for Service Account used by the deployer
+serviceAccount:
+ # serviceAccount.create: Whether to create a Service Account or not
+ create: true
+ # serviceAccount.name: The name of the Service Account to create or use
+ name: ""
+
diff --git a/installers/helm/postgres-operator/values.yaml b/installers/helm/postgres-operator/values.yaml
index 837b9e855a..8f77ddd52b 100644
--- a/installers/helm/postgres-operator/values.yaml
+++ b/installers/helm/postgres-operator/values.yaml
@@ -69,6 +69,7 @@ pgo_apiserver_port: "8443"
pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
+pgo_client_install: "true"
pgo_client_version: "4.4.1"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
diff --git a/installers/kubectl/postgres-operator-ocp311.yml b/installers/kubectl/postgres-operator-ocp311.yml
index 4b56b1646c..49bda7611e 100644
--- a/installers/kubectl/postgres-operator-ocp311.yml
+++ b/installers/kubectl/postgres-operator-ocp311.yml
@@ -24,8 +24,12 @@ metadata:
name: pgo-deployer-cm
namespace: pgo
data:
- values.yaml: |+
- ---
+ values.yaml: |-
+ # =====================
+ # Configuration Options
+ # More info for these options can be found in the docs
+ # https://crunchydata.github.io/postgres-operator/latest/installation/configuration/
+ # =====================
archive_mode: "true"
archive_timeout: "60"
backrest_aws_s3_bucket: ""
@@ -80,6 +84,7 @@ data:
pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
+ pgo_client_install: "true"
pgo_client_version: "4.4.1"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
diff --git a/installers/kubectl/postgres-operator.yml b/installers/kubectl/postgres-operator.yml
index aaec8dc931..65f20a4ad4 100644
--- a/installers/kubectl/postgres-operator.yml
+++ b/installers/kubectl/postgres-operator.yml
@@ -118,8 +118,12 @@ metadata:
name: pgo-deployer-cm
namespace: pgo
data:
- values.yaml: |+
- ---
+ values.yaml: |-
+ # =====================
+ # Configuration Options
+ # More info for these options can be found in the docs
+ # https://crunchydata.github.io/postgres-operator/latest/installation/configuration/
+ # =====================
archive_mode: "true"
archive_timeout: "60"
backrest_aws_s3_bucket: ""
@@ -174,6 +178,7 @@ data:
pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
+ pgo_client_install: "true"
pgo_client_version: "4.4.1"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
From e4cec699820a4814d283b60bb0e16c755140595c Mon Sep 17 00:00:00 2001
From: Joseph Mckulka <16840147+jmckulk@users.noreply.github.com>
Date: Tue, 28 Jul 2020 10:45:20 -0400
Subject: [PATCH 20/77] Updates links and copyright
Co-authored-by: Jonathan S. Katz
---
hack/config_sync.sh | 2 +-
installers/ansible/values.yaml | 2 +-
installers/helm/postgres-operator/values.yaml | 2 +-
installers/kubectl/postgres-operator-ocp311.yml | 2 +-
installers/kubectl/postgres-operator.yml | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/hack/config_sync.sh b/hack/config_sync.sh
index d78d36275d..14f7e9c811 100755
--- a/hack/config_sync.sh
+++ b/hack/config_sync.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/installers/ansible/values.yaml b/installers/ansible/values.yaml
index 8ad78425b7..b521e0054c 100644
--- a/installers/ansible/values.yaml
+++ b/installers/ansible/values.yaml
@@ -1,7 +1,7 @@
# =====================
# Configuration Options
# More info for these options can be found in the docs
-# https://crunchydata.github.io/postgres-operator/latest/installation/configuration/
+# https://access.crunchydata.com/documentation/postgres-operator/latest/installation/configuration/
# =====================
archive_mode: "true"
archive_timeout: "60"
diff --git a/installers/helm/postgres-operator/values.yaml b/installers/helm/postgres-operator/values.yaml
index 8f77ddd52b..fcc609376a 100644
--- a/installers/helm/postgres-operator/values.yaml
+++ b/installers/helm/postgres-operator/values.yaml
@@ -21,7 +21,7 @@ serviceAccount:
# =====================
# Configuration Options
# More info for these options can be found in the docs
-# https://crunchydata.github.io/postgres-operator/latest/installation/configuration/
+# https://access.crunchydata.com/documentation/postgres-operator/latest/installation/configuration/
# =====================
archive_mode: "true"
archive_timeout: "60"
diff --git a/installers/kubectl/postgres-operator-ocp311.yml b/installers/kubectl/postgres-operator-ocp311.yml
index 49bda7611e..90f396ffef 100644
--- a/installers/kubectl/postgres-operator-ocp311.yml
+++ b/installers/kubectl/postgres-operator-ocp311.yml
@@ -28,7 +28,7 @@ data:
# =====================
# Configuration Options
# More info for these options can be found in the docs
- # https://crunchydata.github.io/postgres-operator/latest/installation/configuration/
+ # https://access.crunchydata.com/documentation/postgres-operator/latest/installation/configuration/
# =====================
archive_mode: "true"
archive_timeout: "60"
diff --git a/installers/kubectl/postgres-operator.yml b/installers/kubectl/postgres-operator.yml
index 65f20a4ad4..eeec9afce5 100644
--- a/installers/kubectl/postgres-operator.yml
+++ b/installers/kubectl/postgres-operator.yml
@@ -122,7 +122,7 @@ data:
# =====================
# Configuration Options
# More info for these options can be found in the docs
- # https://crunchydata.github.io/postgres-operator/latest/installation/configuration/
+ # https://access.crunchydata.com/documentation/postgres-operator/latest/installation/configuration/
# =====================
archive_mode: "true"
archive_timeout: "60"
From b736315248682c3af561053df81cd64507233b70 Mon Sep 17 00:00:00 2001
From: Joseph Mckulka
Date: Wed, 16 Sep 2020 18:49:27 +0000
Subject: [PATCH 21/77] Update ansible values.yaml pgo_client_version
A github url is used to download the pgo client when installing with ansible
locally. In the main config update the ansible values.yaml file was updated so
that the "v" in "v4.4.1" was defined in the download url. This changes updates
the values.yaml to account for this change.
---
installers/ansible/values.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/installers/ansible/values.yaml b/installers/ansible/values.yaml
index b521e0054c..cb52a0fa4c 100644
--- a/installers/ansible/values.yaml
+++ b/installers/ansible/values.yaml
@@ -58,7 +58,7 @@ pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
-pgo_client_version: "v4.4.1"
+pgo_client_version: "4.4.1"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
From 73966b5db16d739d1a6a92875e3f82ba4db0eaf8 Mon Sep 17 00:00:00 2001
From: Andrew L'Ecuyer
Date: Wed, 16 Sep 2020 23:45:32 +0000
Subject: [PATCH 22/77] Prevent Panic if PG Deployments Scaled Down
If the primary and all replica Deployments are scaled to zero outside
of the context of the PostgreSQL Operator (e.g. by using
'kubectl scale deployment --replicas=0' instead of
'pgo update cluster --shutdown') and the associated pgcluster for the
Deployment(s) being scaled is not manually set to the proper "shutdown"
status, then the PostgreSQL Operator could panic as it continues to
attempt to synchronize Patroni/PostgreSQL configuration for the PG
cluster (specifically because no pods are found for the cluster). This
commit protects against a panic in this scenario by simply logging an
error when no Pods are found during an attempt to sync configuration.
Issue: [ch9278]
---
internal/operator/config/localdb.go | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/internal/operator/config/localdb.go b/internal/operator/config/localdb.go
index c825d0baee..f1c837169c 100644
--- a/internal/operator/config/localdb.go
+++ b/internal/operator/config/localdb.go
@@ -217,10 +217,10 @@ func (l *LocalDB) Update(configName string, localDBConfig LocalDBConfig) error {
return nil
}
-// apply applies the configuration stored in the CusterConig's configMap for a
-// specific database server to that server. This is done by updating the contents of that
-// database server's local configuration with the configuration for that cluster stored in
-// the LocalDB's configMap, and the issuing a Patroni "reload" for that specific server.
+// apply applies the configuration stored in the cluster ConfigMap for a specific database server
+// to that server. This is done by updating the contents of that database server's local
+// configuration with the configuration for that cluster stored in the LocalDB's configMap, and
+// then issuing a Patroni "reload" for that specific server.
func (l *LocalDB) apply(configName string) error {
clusterName := l.configMap.GetObjectMeta().GetLabels()[config.LABEL_PG_CLUSTER]
@@ -243,6 +243,11 @@ func (l *LocalDB) apply(configName string) error {
if err != nil {
return err
}
+ // if the pod list is empty, also return an error
+ if len(dbPodList.Items) == 0 {
+ return fmt.Errorf("no pod found for %q", clusterName)
+ }
+
dbPod := &dbPodList.Items[0]
// add the config name and patroni port as params for the call to the apply & reload script
From 7ea25fb70310f21c9d62bff8dcc362b10943225d Mon Sep 17 00:00:00 2001
From: andrewlecuyer <43458182+andrewlecuyer@users.noreply.github.com>
Date: Thu, 24 Sep 2020 15:56:19 -0500
Subject: [PATCH 23/77] Delete WAL PVC for Replica Only on Scale Down
When scaling down a replica within a PostgreSQL cluster that utilizes
external PVC's for write-ahead-logs (WAL), only the WAL PVC for replica
being removed is deleted, and the WAL PVC's for all other PostgreSQL
instances within the cluster remain in place.
Issue: [ch9338]
Issue: #1915
---
pgo-rmdata/rmdata/process.go | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/pgo-rmdata/rmdata/process.go b/pgo-rmdata/rmdata/process.go
index f18430f5f6..df182db617 100644
--- a/pgo-rmdata/rmdata/process.go
+++ b/pgo-rmdata/rmdata/process.go
@@ -40,8 +40,8 @@ const (
tablespacePathFormat = "/tablespaces/%s/%s"
// the tablespace on a replcia follows the pattern ""
+ walReplicaPVCPattern = "%s-wal"
// the following constants define the suffixes for the various configMaps created by Patroni
configConfigMapSuffix = "config"
@@ -544,13 +544,16 @@ func getReplicaPVC(request Request) ([]string, error) {
// ...and where the fun begins
tablespaceReplicaPVCPrefix := fmt.Sprintf(tablespaceReplicaPVCPattern, request.ReplicaName)
+ walReplicaPVCName := fmt.Sprintf(walReplicaPVCPattern, request.ReplicaName)
// iterate over the PVC list and append the tablespace PVCs
for _, pvc := range pvcs.Items {
pvcName := pvc.ObjectMeta.Name
- // it does not start with the tablespace replica PVC pattern, continue
- if !(strings.HasPrefix(pvcName, tablespaceReplicaPVCPrefix) || strings.HasSuffix(pvcName, walPVCSuffix)) {
+ // if it does not start with the tablespace replica PVC pattern and does not equal the WAL
+ // PVC pattern then continue
+ if !(strings.HasPrefix(pvcName, tablespaceReplicaPVCPrefix) ||
+ pvcName == walReplicaPVCName) {
continue
}
From 4fbd82cf444bca2bcc25c8be0a2908b45282e5fd Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 25 Sep 2020 09:24:53 -0400
Subject: [PATCH 24/77] Update platform support
The PostgreSQL Operator is tested on Amazon EKS, so add said
indications that we do so.
Issue: #1921
---
README.md | 1 +
docs/content/_index.md | 1 +
2 files changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 5b152ce843..593ea70361 100644
--- a/README.md
+++ b/README.md
@@ -102,6 +102,7 @@ The Crunchy PostgreSQL Operator is tested on the following Platforms:
- Kubernetes 1.13+
- OpenShift 3.11+
- Google Kubernetes Engine (GKE), including Anthos
+- Amazon EKS
- VMware Enterprise PKS 1.3+
### Storage
diff --git a/docs/content/_index.md b/docs/content/_index.md
index 5571714be7..a1adc57a81 100644
--- a/docs/content/_index.md
+++ b/docs/content/_index.md
@@ -102,6 +102,7 @@ The Crunchy PostgreSQL Operator is tested on the following Platforms:
- Kubernetes 1.13+
- OpenShift 3.11+
- Google Kubernetes Engine (GKE), including Anthos
+- Amazon EKS
- VMware Enterprise PKS 1.3+
## Storage
From 1aaa53a84df7da5c2b74b87515cbc0006c9717e4 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 25 Sep 2020 12:58:37 -0400
Subject: [PATCH 25/77] Allow for bad replicas to be scaled down
Previously, the scaledown command would only list out healthy
replicas, not replicas that were in a bad state. However, these
may be the exact replicas that one would want to scale down,
given they are unhealthy.
Issue: [ch9253]
---
.../apiserver/clusterservice/scaleimpl.go | 10 +-
.../apiserver/failoverservice/failoverimpl.go | 2 +-
.../apiserver/restartservice/restartimpl.go | 4 +-
internal/util/failover.go | 105 ++++++++++++++----
pgo/cmd/restart.go | 16 ++-
pgo/cmd/scaledown.go | 12 +-
6 files changed, 112 insertions(+), 37 deletions(-)
diff --git a/internal/apiserver/clusterservice/scaleimpl.go b/internal/apiserver/clusterservice/scaleimpl.go
index 64d631233c..802cc61c18 100644
--- a/internal/apiserver/clusterservice/scaleimpl.go
+++ b/internal/apiserver/clusterservice/scaleimpl.go
@@ -216,7 +216,7 @@ func ScaleQuery(name, ns string) msgs.ScaleQueryResponse {
ClusterName: name,
}
- replicationStatusResponse, err := util.ReplicationStatus(replicationStatusRequest, false)
+ replicationStatusResponse, err := util.ReplicationStatus(replicationStatusRequest, false, true)
// if an error is return, log the message, and return the response
if err != nil {
@@ -291,10 +291,10 @@ func ScaleDown(deleteData bool, clusterName, replicaName, ns string) msgs.ScaleD
return response
}
- // selector in the format "pg-cluster=,pg-ha-scope="
- // which will grab the primary and any/all replicas
- selector := fmt.Sprintf("%s=%s,%s=%s", config.LABEL_PG_CLUSTER, clusterName,
- config.LABEL_PGHA_ROLE, config.LABEL_PGHA_ROLE_REPLICA)
+ // selector in the format "pg-cluster=,pgo-pg-database,role!=config.LABEL_PGHA_ROLE_PRIMARY"
+ // which will grab all the replicas
+ selector := fmt.Sprintf("%s=%s,%s,%s!=%s", config.LABEL_PG_CLUSTER, clusterName,
+ config.LABEL_PG_DATABASE, config.LABEL_PGHA_ROLE, config.LABEL_PGHA_ROLE_PRIMARY)
replicaList, err := apiserver.Clientset.CoreV1().Pods(ns).List(metav1.ListOptions{LabelSelector: selector})
if err != nil {
response.Status.Code = msgs.Error
diff --git a/internal/apiserver/failoverservice/failoverimpl.go b/internal/apiserver/failoverservice/failoverimpl.go
index e7a2573c94..c347a024d9 100644
--- a/internal/apiserver/failoverservice/failoverimpl.go
+++ b/internal/apiserver/failoverservice/failoverimpl.go
@@ -137,7 +137,7 @@ func QueryFailover(name, ns string) msgs.QueryFailoverResponse {
ClusterName: name,
}
- replicationStatusResponse, err := util.ReplicationStatus(replicationStatusRequest, false)
+ replicationStatusResponse, err := util.ReplicationStatus(replicationStatusRequest, false, false)
// if an error is return, log the message, and return the response
if err != nil {
diff --git a/internal/apiserver/restartservice/restartimpl.go b/internal/apiserver/restartservice/restartimpl.go
index 9b72f673a1..9da501fc2b 100644
--- a/internal/apiserver/restartservice/restartimpl.go
+++ b/internal/apiserver/restartservice/restartimpl.go
@@ -123,7 +123,9 @@ func QueryRestart(clusterName, namespace string) msgs.QueryRestartResponse {
ClusterName: clusterName,
}
- replicationStatusResponse, err := util.ReplicationStatus(replicationStatusRequest, true)
+ // get a list of all the Pods...note that we can included "busted" pods as
+ // by including the primary, we're getting all of the database pods anyway.
+ replicationStatusResponse, err := util.ReplicationStatus(replicationStatusRequest, true, true)
if err != nil {
log.Error(err.Error())
resp.Status.Code = msgs.Error
diff --git a/internal/util/failover.go b/internal/util/failover.go
index 643407b737..78f96a8664 100644
--- a/internal/util/failover.go
+++ b/internal/util/failover.go
@@ -79,6 +79,14 @@ const (
// instanceReplicationInfoTypePrimaryStandby is the label used by Patroni to indicate that an
// instance is indeed a primary PostgreSQL instance, specifically within a standby cluster
instanceReplicationInfoTypePrimaryStandby = "Standby Leader"
+ // instanceRolePrimary indicates that an instance is a primary
+ instanceRolePrimary = "primary"
+ // instanceRoleReplica indicates that an instance is a replica
+ instanceRoleReplica = "replica"
+ // instanceRoleUnknown indicates taht an instance is of an unknown typ
+ instanceRoleUnknown = "unknown"
+ // instanceStatusUnavailable indicates an instance is unavailable
+ instanceStatusUnavailable = "unavailable"
)
var (
@@ -137,20 +145,34 @@ func GetPod(clientset kubernetes.Interface, deploymentName, namespace string) (*
// By default information is only returned for replicas within the cluster. However,
// if primary information is also needed, the inlcudePrimary flag can set set to true
// and primary information will will also be included in the ReplicationStatusResponse.
-func ReplicationStatus(request ReplicationStatusRequest, includePrimary bool) (ReplicationStatusResponse, error) {
+//
+// Also by default we do not include any "busted" Pods, e.g. a Pod that is not
+// in a happy phase. That Pod may be lacking a "role" label. From there, we zero
+// out the statistics and apply an error
+func ReplicationStatus(request ReplicationStatusRequest, includePrimary, includeBusted bool) (ReplicationStatusResponse, error) {
response := ReplicationStatusResponse{
Instances: make([]InstanceReplicationInfo, 0),
}
- // First, get replica pods using selector pg-cluster=clusterName,role=replica if not including the primary,
- // or pg-cluster=clusterName,pg-database if including the primary
- var roleSelector string
+ // Build up the selector. First, create the base, which restricts to the
+ // current cluster
+ // pg-cluster=clusterName,pgo-pg-database
+ selector := fmt.Sprintf("%s=%s,%s",
+ config.LABEL_PG_CLUSTER, request.ClusterName, config.LABEL_PG_DATABASE)
+
+ // if we are not including the primary, determine if we are including busted
+ // replicas or not
if !includePrimary {
- roleSelector = fmt.Sprintf("%s=%s", config.LABEL_PGHA_ROLE, config.LABEL_PGHA_ROLE_REPLICA)
- } else {
- roleSelector = config.LABEL_PG_DATABASE
+ if includeBusted {
+ // include all Pods that identify as a database, but **not** a primary
+ // pg-cluster=clusterName,pgo-pg-database,role!=config.LABEL_PGHA_ROLE_PRIMARY
+ selector += fmt.Sprintf(",%s!=%s", config.LABEL_PGHA_ROLE, config.LABEL_PGHA_ROLE_PRIMARY)
+ } else {
+ // include all Pods that identify as a database and have a replica label
+ // pg-cluster=clusterName,pgo-pg-database,role=replica
+ selector += fmt.Sprintf(",%s=%s", config.LABEL_PGHA_ROLE, config.LABEL_PGHA_ROLE_REPLICA)
+ }
}
- selector := fmt.Sprintf("%s=%s,%s", config.LABEL_PG_CLUSTER, request.ClusterName, roleSelector)
log.Debugf(`searching for pods with "%s"`, selector)
pods, err := request.Clientset.CoreV1().Pods(request.Namespace).List(metav1.ListOptions{LabelSelector: selector})
@@ -176,8 +198,36 @@ func ReplicationStatus(request ReplicationStatusRequest, includePrimary bool) (R
// Now get the statistics about the current state of the replicas, which we
// can delegate to Patroni vis-a-vis the information that it collects
// We can get the statistics about the current state of the managed instance
- // From executing and running a command in the first pod
- pod := pods.Items[0]
+ // From executing and running a command in the first active pod
+ var pod *v1.Pod
+
+ for _, p := range pods.Items {
+ if p.Status.Phase == v1.PodRunning {
+ pod = &p
+ break
+ }
+ }
+
+ // if no active Pod can be found, we can only assume that all of the instances
+ // are unavailable, and we should indicate as such
+ if pod == nil {
+ for _, p := range pods.Items {
+ // set up the instance that will be returned
+ instance := InstanceReplicationInfo{
+ Name: instanceInfoMap[p.Name].name,
+ Node: instanceInfoMap[p.Name].node,
+ ReplicationLag: -1,
+ Role: instanceRoleUnknown,
+ Status: instanceStatusUnavailable,
+ Timeline: -1,
+ }
+
+ // append this newly created instance to the list that will be returned
+ response.Instances = append(response.Instances, instance)
+ }
+
+ return response, nil
+ }
// Execute the command that will retrieve the replica information from Patroni
commandStdOut, _, err := kubeapi.ExecToPodThroughAPI(
@@ -198,17 +248,25 @@ func ReplicationStatus(request ReplicationStatusRequest, includePrimary bool) (R
// We need to iterate through this list to format the information for the
// response
for _, rawInstance := range rawInstances {
-
var role string
+
// skip the primary unless explicitly enabled
- if rawInstance.Type == instanceReplicationInfoTypePrimary ||
- rawInstance.Type == instanceReplicationInfoTypePrimaryStandby {
- if !includePrimary {
- continue
- }
- role = "primary"
- } else {
- role = "replica"
+ if !includePrimary && (rawInstance.Type == instanceReplicationInfoTypePrimary ||
+ rawInstance.Type == instanceReplicationInfoTypePrimaryStandby) {
+ continue
+ }
+
+ // if this is a busted instance and we are not including it, skip
+ if !includeBusted && rawInstance.State == "" {
+ continue
+ }
+
+ // determine the role of the instnace
+ switch rawInstance.Type {
+ default:
+ role = instanceRoleReplica
+ case instanceReplicationInfoTypePrimary, instanceReplicationInfoTypePrimaryStandby:
+ role = instanceRolePrimary
}
// set up the instance that will be returned
@@ -219,11 +277,14 @@ func ReplicationStatus(request ReplicationStatusRequest, includePrimary bool) (R
Role: role,
Name: instanceInfoMap[rawInstance.PodName].name,
Node: instanceInfoMap[rawInstance.PodName].node,
+ PendingRestart: rawInstance.PendingRestart == "*",
}
- // indicate whether or not the instance has a pending restart
- if rawInstance.PendingRestart == "*" {
- instance.PendingRestart = true
+ // update the instance info if the instance is busted
+ if rawInstance.State == "" {
+ instance.Status = instanceStatusUnavailable
+ instance.ReplicationLag = -1
+ instance.Timeline = -1
}
// append this newly created instance to the list that will be returned
diff --git a/pgo/cmd/restart.go b/pgo/cmd/restart.go
index c3274e96f2..5303466f9b 100644
--- a/pgo/cmd/restart.go
+++ b/pgo/cmd/restart.go
@@ -32,13 +32,13 @@ var restartCmd = &cobra.Command{
Use: "restart",
Short: "Restarts the PostgrSQL database within a PostgreSQL cluster",
Long: `Restarts one or more PostgreSQL databases within a PostgreSQL cluster.
-
+
For example, to restart the primary and all replicas:
pgo restart mycluster
Or target a specific instance within the cluster:
pgo restart mycluster --target=mycluster-abcd
-
+
And use the 'query' flag obtain a list of all instances within the cluster:
pgo restart mycluster --query`,
Run: func(cmd *cobra.Command, args []string) {
@@ -169,9 +169,15 @@ func queryRestart(args []string, namespace string) {
log.Debugf("postgresql instance: %v", instance)
- fmt.Printf("%-20s\t%-10s\t%-10s\t%-10s\t%12d %-7s\t%15t\n",
- instance.Name, instance.Role, instance.Status, instance.Node, instance.ReplicationLag, "MB",
- instance.PendingRestart)
+ if instance.ReplicationLag != -1 {
+ fmt.Printf("%-20s\t%-10s\t%-10s\t%-10s\t%12d %-7s\t%15t\n",
+ instance.Name, instance.Role, instance.Status, instance.Node, instance.ReplicationLag, "MB",
+ instance.PendingRestart)
+ } else {
+ fmt.Printf("%-20s\t%-10s\t%-10s\t%-10s\t%15s\t%23t\n",
+ instance.Name, instance.Role, instance.Status, instance.Node, "unknown",
+ instance.PendingRestart)
+ }
}
}
}
diff --git a/pgo/cmd/scaledown.go b/pgo/cmd/scaledown.go
index fbea9523be..20241c3d46 100644
--- a/pgo/cmd/scaledown.go
+++ b/pgo/cmd/scaledown.go
@@ -120,9 +120,15 @@ func queryCluster(args []string, ns string) {
log.Debugf("postgresql instance: %v", instance)
- fmt.Printf("%-20s\t%-10s\t%-10s\t%12d %-7s\t%15t\n",
- instance.Name, instance.Status, instance.Node, instance.ReplicationLag, "MB",
- instance.PendingRestart)
+ if instance.ReplicationLag != -1 {
+ fmt.Printf("%-20s\t%-10s\t%-10s\t%12d %-7s\t%15t\n",
+ instance.Name, instance.Status, instance.Node, instance.ReplicationLag, "MB",
+ instance.PendingRestart)
+ } else {
+ fmt.Printf("%-20s\t%-10s\t%-10s\t%15s\t%23t\n",
+ instance.Name, instance.Status, instance.Node, "unknown",
+ instance.PendingRestart)
+ }
}
}
}
From e5eebcd355178650efff5c9273a064e179f0dbbb Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sat, 26 Sep 2020 14:33:33 -0400
Subject: [PATCH 26/77] Add a list of included components
This makes it easier to identify which PostgreSQL software and
extensions are included with the PostgreSQL Operator.
---
README.md | 31 +++++++++++++++++++++++++++++++
docs/content/_index.md | 31 +++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+)
diff --git a/README.md b/README.md
index 593ea70361..a5879f0822 100644
--- a/README.md
+++ b/README.md
@@ -150,6 +150,37 @@ If you have the PostgreSQL Operator installed in your environment, and are inter
There is also a `pgo-client` container if you wish to deploy the client directly to your Kubernetes environment.
+### Included Components
+
+[PostgreSQL containers](https://github.com/CrunchyData/crunchy-containers) deployed with the PostgreSQL Operator include the following components:
+
+- [PostgreSQL](https://www.postgresql.org)
+ - [PostgreSQL Contrib Modules](https://www.postgresql.org/docs/current/contrib.html)
+ - [PL/Python + PL/Python 3](https://www.postgresql.org/docs/current/plpython.html)
+ - [pgAudit](https://www.pgaudit.org/)
+ - [pgAudit Analyze](https://github.com/pgaudit/pgaudit_analyze)
+ - [set_user](https://github.com/pgaudit/set_user)
+- [pgBackRest](https://pgbackrest.org/)
+- [pgBouncer](http://pgbouncer.github.io/)
+- [pgAdmin 4](https://www.pgadmin.org/)
+- [pgMonitor](https://github.com/CrunchyData/pgmonitor)
+- [Patroni](https://patroni.readthedocs.io/)
+- [LLVM](https://llvm.org/) (for [JIT compilation](https://www.postgresql.org/docs/current/jit.html))
+
+In addition to the above, the geospatially enhanced PostgreSQL + PostGIS container adds the following components:
+
+- [PostGIS](http://postgis.net/)
+- [pgRouting](https://pgrouting.org/)
+- [PL/R](https://github.com/postgres-plr/plr)
+
+Additional containers that are not directly integrated with the PostgreSQL Operator but can work alongside it include:
+
+- [pgPool II](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/container-specifications/crunchy-pgpool/)
+- [pg_upgrade](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/container-specifications/crunchy-upgrade/)
+- [pgBench](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/container-specifications/crunchy-pgbench/)
+
+For more information about which versions of the PostgreSQL Operator include which components, please visit the [compatibility](https://access.crunchydata.com/documentation/postgres-operator/latest/configuration/compatibility/) section of the documentation.
+
## Using the PostgreSQL Operator
If you have the PostgreSQL and Client Interface installed in your environment and are interested in guidance on the use of the Crunchy PostgreSQL Operator, please start here:
diff --git a/docs/content/_index.md b/docs/content/_index.md
index a1adc57a81..a13b8c960e 100644
--- a/docs/content/_index.md
+++ b/docs/content/_index.md
@@ -95,6 +95,37 @@ The Crunchy PostgreSQL Operator makes it easy to get your own PostgreSQL-as-a-Se
The Crunchy PostgreSQL Operator extends Kubernetes to provide a higher-level abstraction for rapid creation and management of PostgreSQL clusters. The Crunchy PostgreSQL Operator leverages a Kubernetes concept referred to as "[Custom Resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)” to create several [custom resource definitions (CRDs)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions) that allow for the management of PostgreSQL clusters.
+# Included Components
+
+[PostgreSQL containers](https://github.com/CrunchyData/crunchy-containers) deployed with the PostgreSQL Operator include the following components:
+
+- [PostgreSQL](https://www.postgresql.org)
+ - [PostgreSQL Contrib Modules](https://www.postgresql.org/docs/current/contrib.html)
+ - [PL/Python + PL/Python 3](https://www.postgresql.org/docs/current/plpython.html)
+ - [pgAudit](https://www.pgaudit.org/)
+ - [pgAudit Analyze](https://github.com/pgaudit/pgaudit_analyze)
+ - [set_user](https://github.com/pgaudit/set_user)
+- [pgBackRest](https://pgbackrest.org/)
+- [pgBouncer](http://pgbouncer.github.io/)
+- [pgAdmin 4](https://www.pgadmin.org/)
+- [pgMonitor](https://github.com/CrunchyData/pgmonitor)
+- [Patroni](https://patroni.readthedocs.io/)
+- [LLVM](https://llvm.org/) (for [JIT compilation](https://www.postgresql.org/docs/current/jit.html))
+
+In addition to the above, the geospatially enhanced PostgreSQL + PostGIS container adds the following components:
+
+- [PostGIS](http://postgis.net/)
+- [pgRouting](https://pgrouting.org/)
+- [PL/R](https://github.com/postgres-plr/plr)
+
+Additional containers that are not directly integrated with the PostgreSQL Operator but can work alongside it include:
+
+- [pgPool II](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/container-specifications/crunchy-pgpool/)
+- [pg_upgrade](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/container-specifications/crunchy-upgrade/)
+- [pgBench](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/container-specifications/crunchy-pgbench/)
+
+For more information about which versions of the PostgreSQL Operator include which components, please visit the [compatibility]({{< relref "configuration/compatibility.md" >}}) section of the documentation.
+
# Supported Platforms
The Crunchy PostgreSQL Operator is tested on the following Platforms:
From 84cf2b26a0395a7d6c0ebc132fc099ee3f912a90 Mon Sep 17 00:00:00 2001
From: Andrew L'Ecuyer
Date: Wed, 30 Sep 2020 14:02:41 +0000
Subject: [PATCH 27/77] Proper Deletion Behavior for Logical Backup PVCs
Logical backup PVCs are now properly identified when rmdata is run.
This ensures any PVCs for logical backups are properly preserved or
deleted depending on the specific settings specified when deleting a
cluster. For instance, if '--keep-data' only is specified, then the
logical backups will now be deleted. Additionally, if '--keep-backups'
is specified, then the logical backup PVCs will now be preserved. This
is specifically accomplished by now matching on a prefix for the name
of any logical backup PVCs (prefix 'backup--pgdump'),
instead of matching on the full name of the PVC (which includes the
name of the database name used for the logical backup, e.g.
'backup--pgdump--pvc', and therefore could
vary).
Issue: [ch9381]
---
pgo-rmdata/rmdata/process.go | 39 +++++++++++++++++++++++++++---------
1 file changed, 30 insertions(+), 9 deletions(-)
diff --git a/pgo-rmdata/rmdata/process.go b/pgo-rmdata/rmdata/process.go
index df182db617..361dbef021 100644
--- a/pgo-rmdata/rmdata/process.go
+++ b/pgo-rmdata/rmdata/process.go
@@ -35,7 +35,7 @@ const (
MAX_TRIES = 16
pgBackRestPathFormat = "/backrestrepo/%s"
pgBackRestRepoPVC = "%s-pgbr-repo"
- pgDumpPVC = "backup-%s-pgdump-pvc"
+ pgDumpPVCPrefix = "backup-%s-pgdump"
pgDataPathFormat = "/pgdata/%s"
tablespacePathFormat = "/tablespaces/%s/%s"
// the tablespace on a replcia follows the pattern "
Date: Tue, 13 Oct 2020 08:31:04 -0500
Subject: [PATCH 28/77] Logger no Longer Defaults to "debug" Log Level
The logger utilized by the various Go applications comprising the
PostgreSQL Operator no longer defaults to a "debug" logging level.
Instead, by default the "info" logging level will be utilized (per the
default set by the Logrus logging package), and the "debug" log level
will now only be set if the 'CRUNCHY_DEBUG' environment variable is set
to 'true'.
Issue: [ch9476]
---
internal/logging/loglib.go | 3 ---
1 file changed, 3 deletions(-)
diff --git a/internal/logging/loglib.go b/internal/logging/loglib.go
index c109d435f5..b443e47b4d 100644
--- a/internal/logging/loglib.go
+++ b/internal/logging/loglib.go
@@ -88,7 +88,4 @@ func CrunchyLogger(logDetails LogValues) {
// Output to stdout instead of the default stderr
// Can be any io.Writer, see below for File example
log.SetOutput(os.Stdout)
-
- // Only log the debug severity or above.
- log.SetLevel(log.DebugLevel)
}
From d74c9f5210416c723b74d376d347f318ab3cfdbd Mon Sep 17 00:00:00 2001
From: Andrew L'Ecuyer
Date: Wed, 21 Oct 2020 15:46:03 +0000
Subject: [PATCH 29/77] Proper Detection of Previously Processed pgcluster
The pgcluster controller has been updated to properly detect whether or
not a specific pgcluster custom resource was previously processed via
the controller's 'onAdd' function. Specifically, the 'onAdd' function
will now no longer place a pgcluster in a 'processed' status and
attempt to call 'AddClusterBase' if it determines that the a previous
call to 'AddClusterBase' completed successfully. This is indicated by
either a value of 'completed' in the /spec/status' field of the
pgcluster (which indicates that a previous call to 'AddClusterBase'
successfully created the resources needed to bootstrap the PG cluster),
or a value of 'pgcluster Initialized' in the '/status/state' field
(which indicates that the cluster has been fully initialized).
In addition, the check for an existing Kubernetes Deployment matching
the name of the pgcluster, as well as the check to determine whether
or not a pgcluster custom resource is in a 'processed' status prior to
enqueuing it from the pgcluster controller's 'onAdd' function, have
been removed, since both are no longer valid methods for determining
whether or not to process a pgcluster. For instance, a Deployment
matching the pgcluster name (i.e. the original primary for the cluster)
might no longer exist if it was since scaled down and removed, while
the 'processed' status does not properly indicate whether or not the
various Kubernetes resources (e.g. Deployments) for the initial primary
utilized to bootstrap the cluster have been created, nor does it
properly indicate whether or not the PG cluster has been fully
initialized.
Issue: [ch9574]
---
.../pgcluster/pgclustercontroller.go | 33 ++++++-------------
internal/operator/cluster/cluster.go | 7 ----
2 files changed, 10 insertions(+), 30 deletions(-)
diff --git a/internal/controller/pgcluster/pgclustercontroller.go b/internal/controller/pgcluster/pgclustercontroller.go
index 5a3e2f9c33..018cb3cf75 100644
--- a/internal/controller/pgcluster/pgclustercontroller.go
+++ b/internal/controller/pgcluster/pgclustercontroller.go
@@ -30,7 +30,6 @@ import (
informers "github.com/crunchydata/postgres-operator/pkg/generated/informers/externalversions/crunchydata.com/v1"
log "github.com/sirupsen/logrus"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/cache"
@@ -49,22 +48,11 @@ type Controller struct {
// onAdd is called when a pgcluster is added
func (c *Controller) onAdd(obj interface{}) {
- cluster := obj.(*crv1.Pgcluster)
- log.Debugf("[pgcluster Controller] ns %s onAdd %s", cluster.ObjectMeta.Namespace, cluster.ObjectMeta.SelfLink)
-
- //handle the case when the operator restarts and don't
- //process already processed pgclusters
- if cluster.Status.State == crv1.PgclusterStateProcessed {
- log.Debug("pgcluster " + cluster.ObjectMeta.Name + " already processed")
- return
- }
-
key, err := cache.MetaNamespaceKeyFunc(obj)
if err == nil {
log.Debugf("cluster putting key in queue %s", key)
c.Queue.Add(key)
}
-
}
// RunWorker is a long-running function that will continually call the
@@ -107,17 +95,6 @@ func (c *Controller) processNextItem() bool {
// parallel.
defer c.Queue.Done(key)
- // Invoke the method containing the business logic
- // in this case, the de-dupe logic is to test whether a cluster
- // deployment exists , if so, then we don't create another
- _, err := c.PgclusterClientset.AppsV1().Deployments(keyNamespace).Get(keyResourceName, metav1.GetOptions{})
-
- if err == nil {
- log.Debugf("cluster add - dep already found, not creating again")
- c.Queue.Forget(key)
- return true
- }
-
//get the pgcluster
cluster := crv1.Pgcluster{}
found, err := kubeapi.Getpgcluster(c.PgclusterClient, &cluster, keyResourceName, keyNamespace)
@@ -126,6 +103,16 @@ func (c *Controller) processNextItem() bool {
c.Queue.Forget(key) // NB(cbandy): This should probably be a retry.
return true
}
+ log.Debugf("[pgcluster Controller] ns %s onAdd %s", cluster.ObjectMeta.Namespace, cluster.ObjectMeta.SelfLink)
+
+ if cluster.Spec.Status == crv1.CompletedStatus ||
+ cluster.Status.State == crv1.PgclusterStateBootstrapping ||
+ cluster.Status.State == crv1.PgclusterStateInitialized {
+ log.Debugf("pgcluster Contoller: onAdd event received for cluster %s but "+
+ "will not process because it either has a 'completed' status or is currently in an "+
+ "'initialized' or 'bootstrapping' state", cluster.GetName())
+ return true
+ }
addIdentifier(&cluster)
diff --git a/internal/operator/cluster/cluster.go b/internal/operator/cluster/cluster.go
index f5cf72bdbc..6249ad7337 100644
--- a/internal/operator/cluster/cluster.go
+++ b/internal/operator/cluster/cluster.go
@@ -67,13 +67,6 @@ const (
func AddClusterBase(clientset kubernetes.Interface, client *rest.RESTClient, cl *crv1.Pgcluster, namespace string) {
var err error
- if cl.Spec.Status == crv1.CompletedStatus {
- errorMsg := "crv1 pgcluster " + cl.Spec.ClusterName + " is already marked complete, will not recreate"
- log.Warn(errorMsg)
- publishClusterCreateFailure(cl, errorMsg)
- return
- }
-
dataVolume, walVolume, tablespaceVolumes, err := pvc.CreateMissingPostgreSQLVolumes(
clientset, cl, namespace, cl.Annotations[config.ANNOTATION_CURRENT_PRIMARY], cl.Spec.PrimaryStorage)
if err != nil {
From 0f0140e9e37e705869dc8a87c5b4f645aa7e3c42 Mon Sep 17 00:00:00 2001
From: tjmoore4 <42497036+tjmoore4@users.noreply.github.com>
Date: Mon, 26 Oct 2020 09:58:34 -0400
Subject: [PATCH 30/77] pgo show backup Command Update
Currently, the 'pgo show backup' functionality requires the
Primary pod to be in a Ready state. This is not technically required
because the relevant command is executed within the 'backrest-repo'
pod. As such, this PR separates out the check for the Primary pod
from the 'show backup' functionality so that the backup information
can be shown regardless of the Primary pod's status.
Issue: [ch9402]
Issue: #1927
---
.../apiserver/backrestservice/backrestimpl.go | 86 +++++++++----------
1 file changed, 40 insertions(+), 46 deletions(-)
diff --git a/internal/apiserver/backrestservice/backrestimpl.go b/internal/apiserver/backrestservice/backrestimpl.go
index d41428478e..e19389016e 100644
--- a/internal/apiserver/backrestservice/backrestimpl.go
+++ b/internal/apiserver/backrestservice/backrestimpl.go
@@ -203,9 +203,9 @@ func CreateBackup(request *msgs.CreateBackrestBackupRequest, ns, pgouser string)
}
- //get pod name from cluster
+ // get pod name from cluster
var podname string
- podname, err = getPrimaryPodName(&cluster, ns)
+ podname, err = getBackrestRepoPodName(&cluster, ns)
if err != nil {
log.Error(err)
@@ -214,6 +214,14 @@ func CreateBackup(request *msgs.CreateBackrestBackupRequest, ns, pgouser string)
return resp
}
+ // check if primary is ready
+ if err := isPrimaryReady(&cluster, ns); err != nil {
+ log.Error(err)
+ resp.Status.Code = msgs.Error
+ resp.Status.Msg = err.Error()
+ return resp
+ }
+
jobName := "backrest-" + crv1.PgtaskBackrestBackup + "-" + clusterName
log.Debugf("setting jobName to %s", jobName)
@@ -266,30 +274,9 @@ func getBackupParams(identifier, clusterName, taskName, action, podName, contain
return newInstance
}
-func getDeployName(cluster *crv1.Pgcluster, ns string) (string, error) {
- var depName string
-
- selector := config.LABEL_PG_CLUSTER + "=" + cluster.Spec.Name + "," + config.LABEL_SERVICE_NAME + "=" + cluster.Spec.Name
-
- deps, err := apiserver.Clientset.
- AppsV1().Deployments(ns).
- List(metav1.ListOptions{LabelSelector: selector})
- if err != nil {
- return depName, err
- }
-
- if len(deps.Items) != 1 {
- return depName, errors.New("error: deployment count is wrong for backrest backup " + cluster.Spec.Name)
- }
- for _, d := range deps.Items {
- return d.Name, err
- }
-
- return depName, errors.New("unknown error in backrest backup")
-}
-
-func getPrimaryPodName(cluster *crv1.Pgcluster, ns string) (string, error) {
-
+// getBackrestRepoPodName goes through the pod list to identify the
+// pgBackRest repo pod and then returns the pod name.
+func getBackrestRepoPodName(cluster *crv1.Pgcluster, ns string) (string, error) {
//look up the backrest-repo pod name
selector := "pg-cluster=" + cluster.Spec.Name + ",pgo-backrest-repo=true"
@@ -310,25 +297,6 @@ func getPrimaryPodName(cluster *crv1.Pgcluster, ns string) (string, error) {
repopodName := repopods.Items[0].Name
- primaryReady := false
-
- //make sure the primary pod is in the ready state
- selector = config.LABEL_SERVICE_NAME + "=" + cluster.Spec.Name
-
- pods, err := apiserver.Clientset.CoreV1().Pods(ns).List(metav1.ListOptions{LabelSelector: selector})
- if err != nil {
- return "", err
- }
- for _, p := range pods.Items {
- if isPrimary(&p, cluster.Spec.Name) && isReady(&p) {
- primaryReady = true
- }
- }
-
- if primaryReady == false {
- return "", errors.New("primary pod is not in Ready state")
- }
-
return repopodName, err
}
@@ -356,6 +324,32 @@ func isReady(pod *v1.Pod) bool {
}
+// isPrimaryReady goes through the pod list to first identify the
+// Primary pod and, once identified, determine if it is in a
+// ready state. If not, it returns an error, otherwise it returns
+// a nil value
+func isPrimaryReady(cluster *crv1.Pgcluster, ns string) error {
+ primaryReady := false
+
+ selector := fmt.Sprintf("%s=%s,%s=%s", config.LABEL_PG_CLUSTER, cluster.Name,
+ config.LABEL_PGHA_ROLE, config.LABEL_PGHA_ROLE_PRIMARY)
+
+ pods, err := apiserver.Clientset.CoreV1().Pods(ns).List(metav1.ListOptions{LabelSelector: selector})
+ if err != nil {
+ return err
+ }
+ for _, p := range pods.Items {
+ if isPrimary(&p, cluster.Spec.Name) && isReady(&p) {
+ primaryReady = true
+ }
+ }
+
+ if primaryReady == false {
+ return errors.New("primary pod is not in Ready state")
+ }
+ return nil
+}
+
// ShowBackrest ...
func ShowBackrest(name, selector, ns string) msgs.ShowBackrestResponse {
var err error
@@ -385,7 +379,7 @@ func ShowBackrest(name, selector, ns string) msgs.ShowBackrestResponse {
log.Debugf("clusters found len is %d\n", len(clusterList.Items))
for _, c := range clusterList.Items {
- podname, err := getPrimaryPodName(&c, ns)
+ podname, err := getBackrestRepoPodName(&c, ns)
if err != nil {
log.Error(err)
From b65beb021bfff214e0a74669780d6571cffff4b7 Mon Sep 17 00:00:00 2001
From: tjmoore4 <42497036+tjmoore4@users.noreply.github.com>
Date: Mon, 26 Oct 2020 11:52:12 -0400
Subject: [PATCH 31/77] Update standard image tag when using a GIS enabled
cluster
Currently, the image tag value used by GIS enabled pgclusters is
being used when creating sidecontainers. Since the standard and
GIS enable PostgreSQL containers use different tags, this causes
an image pull error.
This update takes the current image name and the image tag value
stored in the pgcluster CRD and, if the image being used is the
crunchy-postgres-gis-ha container with the corresponding tag, it uses
an updated tag without the addition of the GIS version when provisioning
sidecars containers for the cluster.
Issue: [ch9393]
Issue: #1749
---
internal/operator/cluster/pgadmin.go | 2 +-
internal/operator/cluster/pgbouncer.go | 2 +-
internal/operator/clusterutilities.go | 2 +-
internal/util/util.go | 19 +++++++
internal/util/util_test.go | 75 ++++++++++++++++++++++++++
5 files changed, 97 insertions(+), 3 deletions(-)
create mode 100644 internal/util/util_test.go
diff --git a/internal/operator/cluster/pgadmin.go b/internal/operator/cluster/pgadmin.go
index 8013b38e21..7356c73ded 100644
--- a/internal/operator/cluster/pgadmin.go
+++ b/internal/operator/cluster/pgadmin.go
@@ -354,7 +354,7 @@ func createPgAdminDeployment(clientset kubernetes.Interface, cluster *crv1.Pgclu
Name: pgAdminDeploymentName,
ClusterName: cluster.Name,
CCPImagePrefix: operator.Pgo.Cluster.CCPImagePrefix,
- CCPImageTag: cluster.Spec.CCPImageTag,
+ CCPImageTag: util.GetStandardImageTag(cluster.Spec.CCPImage, cluster.Spec.CCPImageTag),
DisableFSGroup: operator.Pgo.Cluster.DisableFSGroup,
Port: defPgAdminPort,
InitUser: defSetupUsername,
diff --git a/internal/operator/cluster/pgbouncer.go b/internal/operator/cluster/pgbouncer.go
index 9e5065daa3..1f5f6f33b2 100644
--- a/internal/operator/cluster/pgbouncer.go
+++ b/internal/operator/cluster/pgbouncer.go
@@ -459,7 +459,7 @@ func createPgBouncerDeployment(clientset kubernetes.Interface, cluster *crv1.Pgc
Name: pgbouncerDeploymentName,
ClusterName: cluster.Name,
CCPImagePrefix: util.GetValueOrDefault(cluster.Spec.CCPImagePrefix, operator.Pgo.Cluster.CCPImagePrefix),
- CCPImageTag: cluster.Spec.CCPImageTag,
+ CCPImageTag: util.GetStandardImageTag(cluster.Spec.CCPImage, cluster.Spec.CCPImageTag),
Port: cluster.Spec.Port,
PGBouncerSecret: util.GeneratePgBouncerSecretName(cluster.Name),
ContainerResources: operator.GetResourcesJSON(cluster.Spec.PgBouncer.Resources,
diff --git a/internal/operator/clusterutilities.go b/internal/operator/clusterutilities.go
index d11ed1a1c1..b606f10465 100644
--- a/internal/operator/clusterutilities.go
+++ b/internal/operator/clusterutilities.go
@@ -285,7 +285,7 @@ func GetBadgerAddon(clientset kubernetes.Interface, namespace string, cluster *c
if cluster.Labels[config.LABEL_BADGER] == "true" {
log.Debug("crunchy_badger was found as a label on cluster create")
badgerTemplateFields := badgerTemplateFields{}
- badgerTemplateFields.CCPImageTag = spec.CCPImageTag
+ badgerTemplateFields.CCPImageTag = util.GetStandardImageTag(spec.CCPImage, spec.CCPImageTag)
badgerTemplateFields.BadgerTarget = pgbadger_target
badgerTemplateFields.PGBadgerPort = spec.PGBadgerPort
badgerTemplateFields.CCPImagePrefix = util.GetValueOrDefault(spec.CCPImagePrefix, Pgo.Cluster.CCPImagePrefix)
diff --git a/internal/util/util.go b/internal/util/util.go
index 40991290d8..e25334d71f 100644
--- a/internal/util/util.go
+++ b/internal/util/util.go
@@ -20,6 +20,7 @@ import (
"errors"
"fmt"
"math/rand"
+ "regexp"
"strings"
"time"
@@ -44,6 +45,10 @@ type JSONPatchOperation struct {
Value interface{} `json:"value"`
}
+// gisImageTagRegex is a regular expression designed to match the standard image tag for
+// the crunchy-postgres-gis-ha container
+var gisImageTagRegex = regexp.MustCompile(`(.+-[\d|\.]+)-[\d|\.]+?(-[\d|\.]+.*)`)
+
func init() {
rand.Seed(time.Now().UnixNano())
@@ -208,6 +213,20 @@ func GetSecretPassword(clientset kubernetes.Interface, db, suffix, Namespace str
}
+// GetStandardImageTag takes the current image name and the image tag value
+// stored in the pgcluster CRD and, if the image being used is the
+// crunchy-postgres-gis-ha container with the corresponding tag, it returns
+// the tag without the addition of the GIS version. This tag value can then
+// be used when provisioning containers using the standard containers tag.
+func GetStandardImageTag(imageName, imageTag string) string {
+
+ if imageName == "crunchy-postgres-gis-ha" && strings.Count(imageTag, "-") > 2 {
+ return gisImageTagRegex.ReplaceAllString(imageTag, "$1$2")
+ }
+
+ return imageTag
+}
+
// RandStringBytesRmndr ...
func RandStringBytesRmndr(n int) string {
b := make([]byte, n)
diff --git a/internal/util/util_test.go b/internal/util/util_test.go
new file mode 100644
index 0000000000..30d6d8b65d
--- /dev/null
+++ b/internal/util/util_test.go
@@ -0,0 +1,75 @@
+package util
+
+import "testing"
+
+func TestGetStandardImageTag(t *testing.T) {
+
+ assertCorrectMessage := func(t testing.TB, got, want string) {
+ t.Helper()
+ if got != want {
+ t.Errorf("got %q want %q", got, want)
+ }
+ }
+
+ imageTagTests := []struct {
+ description string
+ imageName string
+ imageTag string
+ expected string
+ }{
+ {
+ "image: crunchy-postgres-ha, tag: centos7-12.4-4.5.0",
+ "crunchy-postgres-ha",
+ "centos7-12.4-4.5.0",
+ "centos7-12.4-4.5.0",
+ }, {
+ "image: crunchy-postgres-gis-ha, tag: centos7-12.4-3.0-4.5.0",
+ "crunchy-postgres-gis-ha",
+ "centos7-12.4-3.0-4.5.0",
+ "centos7-12.4-4.5.0",
+ }, {
+ "image: crunchy-postgres-ha, tag: centos7-12.4-4.5.0-beta.1",
+ "crunchy-postgres-ha",
+ "centos7-12.4-4.5.0-beta.1",
+ "centos7-12.4-4.5.0-beta.1",
+ }, {
+ "image: crunchy-postgres-gis-ha, tag: centos7-12.4-3.0-4.5.0-beta.2",
+ "crunchy-postgres-gis-ha",
+ "centos7-12.4-3.0-4.5.0-beta.2",
+ "centos7-12.4-4.5.0-beta.2",
+ }, {
+ "image: crunchy-postgres-ha, tag: centos8-9.5.23-4.5.0-rc.1",
+ "crunchy-postgres-ha",
+ "centos8-9.5.23-4.5.0-rc.1",
+ "centos8-9.5.23-4.5.0-rc.1",
+ }, {
+ "image: crunchy-postgres-gis-ha, tag: centos8-9.5.23-2.4-4.5.0-rc.1",
+ "crunchy-postgres-gis-ha",
+ "centos8-9.5.23-2.4-4.5.0-rc.1",
+ "centos8-9.5.23-4.5.0-rc.1",
+ }, {
+ "image: crunchy-postgres-gis-ha, tag: centos8-13.0-3.0-4.5.0-rc.1",
+ "crunchy-postgres-gis-ha",
+ "centos8-13.0-3.0-4.5.0-rc.1",
+ "centos8-13.0-4.5.0-rc.1",
+ }, {
+ "image: crunchy-postgres-gis-ha, tag: centos8-custom123",
+ "crunchy-postgres-gis-ha",
+ "centos8-custom123",
+ "centos8-custom123",
+ }, {
+ "image: crunchy-postgres-gis-ha, tag: centos8-custom123-moreinfo-789",
+ "crunchy-postgres-gis-ha",
+ "centos8-custom123-moreinfo-789",
+ "centos8-custom123-moreinfo-789",
+ },
+ }
+
+ for _, itt := range imageTagTests {
+ t.Run(itt.description, func(t *testing.T) {
+ got := GetStandardImageTag(itt.imageName, itt.imageTag)
+ want := itt.expected
+ assertCorrectMessage(t, got, want)
+ })
+ }
+}
From 29686f4eefb8bed3d767eeb64230c32ab8b8ea33 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 26 Oct 2020 18:04:52 -0400
Subject: [PATCH 32/77] Update logic for pgbouncer password modification on
creation
If the AddPgBouncer call is invoked as the Operator attempts to
add a new pgBouncer and it is determined that a pgBouncer Secret
already exists, do not attempt to update the password within
PostgreSQL.
This also ensures that an existing Secret storing the pgbouncer
user credential is synchronized to be the password represented
for the pgbouncer user in the database itself.
Issue: [ch9457]
---
internal/operator/cluster/pgbouncer.go | 32 +++++++++++++++++++-------
1 file changed, 24 insertions(+), 8 deletions(-)
diff --git a/internal/operator/cluster/pgbouncer.go b/internal/operator/cluster/pgbouncer.go
index 1f5f6f33b2..c860ecb0e4 100644
--- a/internal/operator/cluster/pgbouncer.go
+++ b/internal/operator/cluster/pgbouncer.go
@@ -154,15 +154,30 @@ func AddPgbouncer(clientset kubernetes.Interface, restclient *rest.RESTClient, r
}
}
- // set the password that will be used for the "pgbouncer" PostgreSQL account
- pgBouncerPassword, err := generatePassword()
-
- if err != nil {
- return err
- }
-
// only attempt to set the password if the cluster is not in standby mode
+ // and the secret does not already exist. If GetPasswordFromSecret returns
+ // no errors, then we can assume that the Secret does not exist
if !cluster.Spec.Standby {
+ secretName := util.GeneratePgBouncerSecretName(cluster.Name)
+ pgBouncerPassword, err := util.GetPasswordFromSecret(clientset, cluster.Namespace, secretName)
+
+ if err != nil {
+ // set the password that will be used for the "pgbouncer" PostgreSQL account
+ newPassword, err := generatePassword()
+
+ if err != nil {
+ return err
+ }
+
+ pgBouncerPassword = newPassword
+
+ // create the secret that pgbouncer will include the pgBouncer
+ // credentials
+ if err := createPgbouncerSecret(clientset, cluster, pgBouncerPassword); err != nil {
+ return err
+ }
+ }
+
// attempt to update the password in PostgreSQL, as this is how pgBouncer
// will properly interface with PostgreSQL
if err := setPostgreSQLPassword(clientset, restconfig, pod, cluster.Spec.Port, pgBouncerPassword); err != nil {
@@ -218,7 +233,8 @@ func DeletePgbouncer(clientset kubernetes.Interface, restclient *rest.RESTClient
}
// next, delete the various Kubernetes objects associated with the pgbouncer
- // these include the Service, Deployment, and the pgBouncer secret
+ // these include the Service, Deployment, Secret and ConfigMap associated with
+ // pgbouncer
// If these fail, we'll just pass through
//
// First, delete the Service and Deployment, which share the same naem
From a79682a7e092d128691962b60dac78c3bdd39cd2 Mon Sep 17 00:00:00 2001
From: tjmoore4 <42497036+tjmoore4@users.noreply.github.com>
Date: Thu, 29 Oct 2020 09:41:52 -0400
Subject: [PATCH 33/77] Preserve cluster-level resources in a multi-Operator
environment
Currently, uninstalling an instance of the PostgreSQL Operator
from one namespace will remove all Kubernetes/Openshift cluster-
level resources as well. This impairs the functionality of any other
Operators that may be installed.
This update adds a check to see if there are any other PostgreSQL
Operators installed on the cluster and, if so, adds a flag to skip
the removal of cluster-level resources.
Issue: [ch9389]
---
.../roles/pgo-operator/tasks/cleanup.yml | 27 ++++++++++++++++---
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/installers/ansible/roles/pgo-operator/tasks/cleanup.yml b/installers/ansible/roles/pgo-operator/tasks/cleanup.yml
index ffe9626c56..2f7925afd2 100644
--- a/installers/ansible/roles/pgo-operator/tasks/cleanup.yml
+++ b/installers/ansible/roles/pgo-operator/tasks/cleanup.yml
@@ -6,6 +6,20 @@
- uninstall
- update
+- name: Get number of Operator instances in this cluster
+ shell: |
+ {{ kubectl_or_oc }} get deployment --field-selector=metadata.name=postgres-operator --selector=vendor=crunchydata --all-namespaces -o name | wc -l
+ register: num_operators
+ tags:
+ - uninstall
+ - update
+
+- name: Set boolean for multi-operator environment
+ set_fact: multi_operator_env="{{ 'true' if num_operators.stdout | int > 1 else 'false' }}"
+ tags:
+ - uninstall
+ - update
+
- name: Find watched namespaces
shell: |
{{ kubectl_or_oc }} get namespaces -o json --selector=vendor=crunchydata,pgo-installation-name={{ pgo_installation_name }}
@@ -152,7 +166,8 @@
tags:
- uninstall
- update
- when: create_rbac|bool
+ when: not multi_operator_env|bool and
+ create_rbac|bool
- name: Delete cluster-admin Cluster Role Binding for PGO Service Account
command: "{{ kubectl_or_oc }} delete clusterrolebinding pgo-cluster-admin"
@@ -161,7 +176,8 @@
tags:
- uninstall
- update
- when: create_rbac|bool
+ when: not multi_operator_env|bool and
+ create_rbac|bool
- name: Delete existing Cluster Roles
shell: |
@@ -173,7 +189,8 @@
tags:
- uninstall
- update
- when: create_rbac|bool
+ when: not multi_operator_env|bool and
+ create_rbac|bool
- name: Delete existing PGO Role Bindings (Watched Namespaces)
shell: |
@@ -233,6 +250,7 @@
pgpolicies.crunchydata.com pgreplicas.crunchydata.com pgtasks.crunchydata.com
ignore_errors: yes
no_log: false
+ when: not multi_operator_env|bool
tags: uninstall
- name: Remove Labels from Watched Namespaces
@@ -276,7 +294,8 @@
file:
state: absent
path: "/usr/local/bin/pgo"
- when: pgo_client_install == "true"
+ when: pgo_client_install == "true" and
+ not multi_operator_env|bool
ignore_errors: yes
no_log: false
tags: uninstall
From c8202cc000f67dc5fe10561adb61afcc1dc2bd24 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sun, 15 Nov 2020 14:14:49 -0500
Subject: [PATCH 34/77] Tighter check for replica service in `pgo test`
The check looked to see if the word "replica" existed in one
of the Service Labels, when really we shold be checking for a
suffix of "replica".
Issue: [ch9764]
Issue: #2047
---
internal/apiserver/clusterservice/clusterimpl.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/internal/apiserver/clusterservice/clusterimpl.go b/internal/apiserver/clusterservice/clusterimpl.go
index 2524a33b47..e201d313d0 100644
--- a/internal/apiserver/clusterservice/clusterimpl.go
+++ b/internal/apiserver/clusterservice/clusterimpl.go
@@ -488,7 +488,7 @@ func TestCluster(name, selector, ns, pgouser string, allFlag bool) msgs.ClusterT
switch {
default:
endpoint.InstanceType = msgs.ClusterTestInstanceTypePrimary
- case strings.Contains(service.Name, msgs.PodTypeReplica):
+ case strings.HasSuffix(service.Name, msgs.PodTypeReplica):
endpoint.InstanceType = msgs.ClusterTestInstanceTypeReplica
case service.Pgbouncer:
endpoint.InstanceType = msgs.ClusterTestInstanceTypePGBouncer
From 5530c23c92df287c0dbc034b933a7b91acf457ae Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Tue, 17 Nov 2020 21:48:16 -0500
Subject: [PATCH 35/77] Provide clarity on retrieving credentials for standbys
The `pgo show user` command has a `--show-system-accounts` flag
for retrieving the credentials of system accounts (e.g. superuser,
replication users, etc.), which can be helpful when setting up
standby clusters.
Issue: #2053
---
.../high-availability/multi-cluster-kubernetes.md | 11 +++++++++++
docs/content/pgo-client/common-tasks.md | 8 ++++++++
2 files changed, 19 insertions(+)
diff --git a/docs/content/architecture/high-availability/multi-cluster-kubernetes.md b/docs/content/architecture/high-availability/multi-cluster-kubernetes.md
index c6043adba4..f2be1e03c5 100644
--- a/docs/content/architecture/high-availability/multi-cluster-kubernetes.md
+++ b/docs/content/architecture/high-availability/multi-cluster-kubernetes.md
@@ -93,6 +93,14 @@ that matches that of the active cluster it is replicating.
- `--pgbackrest-s3-endpoint`: The S3 endpoint to use
- `--pgbackrest-s3-region`: The S3 region to use
+If you do not want to set the user credentials, you can retrieve them at a later
+time by using the [`pgo show user`]({{< relref "/pgo-client/reference/pgo_show_user.md" >}})
+command with the `--show-system-accounts` flag, e.g.
+
+```
+pgo show user --show-system-accounts hippo
+```
+
With respect to the credentials, it should be noted that when the standby
cluster is being created within the same Kubernetes cluster AND it has access to
the Kubernetes Secret created for the active cluster, one can use the
@@ -182,6 +190,9 @@ pgo create cluster hippo-standby --standby --pgbouncer --replica-count=2 \
--password=opensourcehippo
```
+(If you are unsure of your credentials, you can use
+`pgo show user hippo --show-system-accounts` to retrieve them).
+
Note the use of the `--pgbackrest-repo-path` flag as it points to the name of
the pgBackRest repository that is used for the original `hippo` cluster.
diff --git a/docs/content/pgo-client/common-tasks.md b/docs/content/pgo-client/common-tasks.md
index 87f08b2878..4c3ed07564 100644
--- a/docs/content/pgo-client/common-tasks.md
+++ b/docs/content/pgo-client/common-tasks.md
@@ -1314,6 +1314,14 @@ pgo create cluster hippo-standby --standby --replica-count=2 \
--password=opensourcehippo
```
+If you are unsure of your user credentials form the original `hippo` cluster,
+you can retrieve them using the [`pgo show user`]({{< relref "/pgo-client/reference/pgo_show_user.md" >}})
+command with the `--show-system-accounts` flag:
+
+```
+pgo show user hippo --show-system-accounts
+```
+
The standby cluster will take a few moments to bootstrap, but it is now set up!
### Promoting a Standby Cluster
From 4556643abe27d773246eac1a79d60a0fcb71a1ae Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Thu, 19 Nov 2020 12:24:12 -0500
Subject: [PATCH 36/77] Ensure compilation of Postgres Operator
The backpatch described in 29686f4e failed to remove one
particular block, which caused a compilation error.
---
internal/operator/cluster/pgbouncer.go | 5 -----
1 file changed, 5 deletions(-)
diff --git a/internal/operator/cluster/pgbouncer.go b/internal/operator/cluster/pgbouncer.go
index c860ecb0e4..74b0d0d437 100644
--- a/internal/operator/cluster/pgbouncer.go
+++ b/internal/operator/cluster/pgbouncer.go
@@ -185,11 +185,6 @@ func AddPgbouncer(clientset kubernetes.Interface, restclient *rest.RESTClient, r
}
}
- // next, create the secret that pgbouncer will use to be properly configure
- if err := createPgbouncerSecret(clientset, cluster, pgBouncerPassword); err != nil {
- return err
- }
-
// next, create the pgBouncer deployment
if err := createPgBouncerDeployment(clientset, cluster); err != nil {
return err
From cfe788c5be18b23ff9a8a6acc102e2fd9d2fa067 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 20 Nov 2020 13:35:37 -0500
Subject: [PATCH 37/77] Add command defaults to some of the examples
Given the variable name `$PGO_CMD` can involve a lot of context
and given that some of the examples may be run without the
precursor "envs" executable being run, this adds a sane default
of `kubectl` to some of the example scripts, while also indicating
what are acceptable values, should one introspect the scripts.
Issue: #1928
---
examples/create-by-resource/run.sh | 2 ++
examples/custom-config/create.sh | 7 ++-----
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/examples/create-by-resource/run.sh b/examples/create-by-resource/run.sh
index 1cdefdda77..12a0b757cf 100755
--- a/examples/create-by-resource/run.sh
+++ b/examples/create-by-resource/run.sh
@@ -18,6 +18,8 @@
#########
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+# PGO_CMD should either be "kubectl" or "oc" -- defaulting to kubectl
+PGO_CMD=${PGO_CMD:-kubectl}
# A namespace that exists in NAMESPACE env var - see examples/envs.sh
export NS=pgouser1
diff --git a/examples/custom-config/create.sh b/examples/custom-config/create.sh
index b0599f1b37..df6c701f2a 100755
--- a/examples/custom-config/create.sh
+++ b/examples/custom-config/create.sh
@@ -28,11 +28,8 @@ function echo_info() {
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-#Error if PGO_CMD not set
-if [[ -z ${PGO_CMD} ]]
-then
- echo_err "PGO_CMD is not set."
-fi
+# PGO_CMD should either be "kubectl" or "oc" -- defaulting to kubectl
+PGO_CMD=${PGO_CMD:-kubectl}
#Error is PGO_NAMESPACE not set
if [[ -z ${PGO_NAMESPACE} ]]
From bae37f6f8f38c5d97f6eaf94330eeeb18bc95018 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 23 Nov 2020 17:49:55 -0500
Subject: [PATCH 38/77] Bump v4.4.2
---
Makefile | 4 +--
README.md | 2 +-
bin/push-ccp-to-gcr.sh | 2 +-
conf/postgres-operator/pgo.yaml | 4 +--
docs/config.toml | 4 +--
docs/content/Configuration/compatibility.md | 6 ++++
docs/content/releases/4.4.2.md | 36 +++++++++++++++++++
examples/create-by-resource/fromcrd.json | 6 ++--
examples/envs.sh | 2 +-
examples/load/sample-json-load-config-sc.yaml | 2 +-
examples/load/sample-json-load-config.yaml | 2 +-
examples/load/sample-load-config.yaml | 2 +-
installers/ansible/README.md | 2 +-
installers/ansible/values.yaml | 6 ++--
installers/gcp-marketplace/Makefile | 2 +-
installers/gcp-marketplace/README.md | 2 +-
installers/gcp-marketplace/inventory.ini | 6 ++--
installers/helm/metrics/Chart.yaml | 2 +-
installers/helm/metrics/values.yaml | 6 ++--
installers/helm/postgres-operator/Chart.yaml | 2 +-
installers/helm/postgres-operator/values.yaml | 6 ++--
installers/kubectl/client-setup.sh | 2 +-
.../kubectl/postgres-operator-ocp311.yml | 8 ++---
installers/kubectl/postgres-operator.yml | 8 ++---
installers/olm/Makefile | 4 +--
internal/util/util_test.go | 24 ++++++-------
pkg/apis/crunchydata.com/v1/doc.go | 8 ++---
pkg/apiservermsgs/common.go | 2 +-
redhat/atomic/help.1 | 2 +-
redhat/atomic/help.md | 2 +-
30 files changed, 104 insertions(+), 62 deletions(-)
create mode 100644 docs/content/releases/4.4.2.md
diff --git a/Makefile b/Makefile
index e2b75516e6..d92ee0e944 100644
--- a/Makefile
+++ b/Makefile
@@ -9,9 +9,9 @@ PGO_CMD ?= kubectl
PGO_IMAGE_PREFIX ?= crunchydata
PGO_IMAGE_TAG ?= $(PGO_BASEOS)-$(PGO_VERSION)
PGO_OPERATOR_NAMESPACE ?= pgo
-PGO_VERSION ?= 4.4.1
+PGO_VERSION ?= 4.4.2
PGO_PG_VERSION ?= 12
-PGO_PG_FULLVERSION ?= 12.4
+PGO_PG_FULLVERSION ?= 12.5
PGO_BACKREST_VERSION ?= 2.27
RELTMPDIR=/tmp/release.$(PGO_VERSION)
diff --git a/README.md b/README.md
index a5879f0822..2e4bbb5cce 100644
--- a/README.md
+++ b/README.md
@@ -129,7 +129,7 @@ Based on your storage settings in your Kubernetes environment, you may be able t
```shell
kubectl create namespace pgo
-kubectl apply -f https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.4.1/installers/kubectl/postgres-operator.yml
+kubectl apply -f https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.4.2/installers/kubectl/postgres-operator.yml
```
Otherwise, we highly recommend following the instructions from our [Quickstart](https://access.crunchydata.com/documentation/postgres-operator/latest/quickstart/).
diff --git a/bin/push-ccp-to-gcr.sh b/bin/push-ccp-to-gcr.sh
index 8043d20317..68ccd9c3cd 100755
--- a/bin/push-ccp-to-gcr.sh
+++ b/bin/push-ccp-to-gcr.sh
@@ -16,7 +16,7 @@
GCR_IMAGE_PREFIX=gcr.io/crunchy-dev-test
CCP_IMAGE_PREFIX=crunchydata
-CCP_IMAGE_TAG=centos7-12.4-4.4.1
+CCP_IMAGE_TAG=centos7-12.5-4.4.2
IMAGES=(
crunchy-prometheus
diff --git a/conf/postgres-operator/pgo.yaml b/conf/postgres-operator/pgo.yaml
index 576b7aaf0c..2c60f86968 100644
--- a/conf/postgres-operator/pgo.yaml
+++ b/conf/postgres-operator/pgo.yaml
@@ -2,7 +2,7 @@ Cluster:
CCPImagePrefix: registry.developers.crunchydata.com/crunchydata
Metrics: false
Badger: false
- CCPImageTag: centos7-12.4-4.4.1
+ CCPImageTag: centos7-12.5-4.4.2
Port: 5432
PGBadgerPort: 10000
ExporterPort: 9187
@@ -81,4 +81,4 @@ Storage:
Pgo:
Audit: false
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
- PGOImageTag: centos7-4.4.1
+ PGOImageTag: centos7-4.4.2
diff --git a/docs/config.toml b/docs/config.toml
index b233d0eeaf..3e34daf864 100644
--- a/docs/config.toml
+++ b/docs/config.toml
@@ -25,8 +25,8 @@ disableNavChevron = false # set true to hide next/prev chevron, default is false
highlightClientSide = false # set true to use highlight.pack.js instead of the default hugo chroma highlighter
menushortcutsnewtab = true # set true to open shortcuts links to a new tab/window
enableGitInfo = true
-operatorVersion = "4.4.1"
-postgresVersion = "12.4"
+operatorVersion = "4.4.2"
+postgresVersion = "12.5"
postgisVersion = "3.0"
centosBase = "centos7"
diff --git a/docs/content/Configuration/compatibility.md b/docs/content/Configuration/compatibility.md
index 12fe2de0c1..669f94aceb 100644
--- a/docs/content/Configuration/compatibility.md
+++ b/docs/content/Configuration/compatibility.md
@@ -12,6 +12,12 @@ version dependencies between the two projects. Below are the operator releases a
| Operator Release | Container Release | Postgres | PgBackrest Version
|:----------|:-------------|:------------|:--------------
+| 4.4.2 | 4.4.2 | 12.5 | 2.27 |
+|||11.10|2.27|
+|||10.15|2.27|
+|||9.6.20|2.27|
+|||9.5.24|2.27|
+||||
| 4.4.1 | 4.4.1 | 12.4 | 2.27 |
|||11.9|2.27|
|||10.14|2.27|
diff --git a/docs/content/releases/4.4.2.md b/docs/content/releases/4.4.2.md
new file mode 100644
index 0000000000..06eb97de49
--- /dev/null
+++ b/docs/content/releases/4.4.2.md
@@ -0,0 +1,36 @@
+---
+title: "4.4.2"
+date:
+draft: false
+weight: 78
+---
+
+Crunchy Data announces the release of the [PostgreSQL Operator](https://www.crunchydata.com/products/crunchy-postgresql-operator/) 4.4.1 on November 25, 2020.
+
+The PostgreSQL Operator is released in conjunction with the [Crunchy Container Suite](https://github.com/CrunchyData/crunchy-containers/).
+
+The PostgreSQL Operator 4.4.2 release includes the following software versions upgrades:
+
+- The PostgreSQL containers now use versions 12.5, 11.10, 10.15, 9.6.20, and 9.5.24
+
+PostgreSQL Operator is tested with Kubernetes 1.13 - 1.18, OpenShift 3.11+, OpenShift 4.3+, Google Kubernetes Engine (GKE), and VMware Enterprise PKS 1.3+.
+
+## Fixes
+
+- Proper determination if a `pgcluster` custom resource creation has been processed by its corresponding Postgres Operator controller. This prevents the custom resource from being run by the creation logic multiple times.
+- The `pgo scaledown` now allows for the removal of replicas that are not actively running.
+- The `pgo scaledown --query` command now shows replicas that may not be in an active state.
+- Fix readiness check for a standby leader. Previously, the standby leader would not report as ready, even though it was. Reported by Alec Rooney (@alrooney).
+- pgBackRest commands can now be executed even if there are multiple pgBackRest Pods available in a Deployment, so long as there is only one "running" pgBackRest Pod. Reported by Rubin Simons (@rubin55).
+- Ensure pgBackRest S3 Secrets can be upgraded from PostgreSQL Operator 4.3.
+- Ensure pgBouncer Port is derived from the cluster's port, not the Operator configuration defaults.
+- External WAL PVCs are only removed for the replica they are targeted for on a scaledown. Reported by (@dakine1111).
+- Ensure `pgo show backup` will work regardless of state of any of the PostgreSQL clusters. This pulls the information directly from the pgBackRest Pod itself. Reported by (@saltenhub).
+- When deleting a cluster with the `--keep-backups` flag, ensure that backups that were created via `--backup-type=pgdump` are retained.
+- Return an error if a cluster is not found when using `pgo df` instead of timing out.
+- The `operator` container will no longer panic if all Deployments are scaled to `0` without using the `pgo update cluster --shutdown` command.
+- Ensure that sidecars (e.g. metrics collection, pgAdmin 4, pgBouncer) are deployable when using the PostGIS-enabled PostgreSQL image. Reported by Jean-Denis Giguère (@jdenisgiguere).
+- Allow for special characters in pgBackRest environmental variables. Reported by (@SockenSalat).
+- Ensure password for the `pgbouncer` administrative user stays synchronized between an existing Kubernetes Secret and PostgreSQL should the pgBouncer be recreated.
+- When uninstalling an instance of the Postgres Operator in a Kubernetes cluster that has multiple instances of the Postgres Operator, ensure that only the requested instance to be uninstalled is the one that's uninstalled.
+- The logger no longer defaults to using a log level of `DEBUG`.
diff --git a/examples/create-by-resource/fromcrd.json b/examples/create-by-resource/fromcrd.json
index 14f1a2c033..29d4ca4341 100644
--- a/examples/create-by-resource/fromcrd.json
+++ b/examples/create-by-resource/fromcrd.json
@@ -16,7 +16,7 @@
"pg-cluster": "fromcrd",
"pg-pod-anti-affinity": "",
"pgo-backrest": "true",
- "pgo-version": "4.4.1",
+ "pgo-version": "4.4.2",
"pgouser": "pgoadmin",
"primary": "true"
},
@@ -62,7 +62,7 @@
},
"backrestResources": {},
"ccpimage": "crunchy-postgres-ha",
- "ccpimagetag": "centos7-12.4-4.4.1",
+ "ccpimagetag": "centos7-12.5-4.4.2",
"clustername": "fromcrd",
"customconfig": "",
"database": "userdb",
@@ -95,7 +95,7 @@
"userlabels": {
"crunchy_collect": "false",
"pg-pod-anti-affinity": "",
- "pgo-version": "4.4.1",
+ "pgo-version": "4.4.2",
"pgouser": "pgoadmin",
"pgo-backrest": "true"
},
diff --git a/examples/envs.sh b/examples/envs.sh
index 4d439d682f..e6bb782306 100644
--- a/examples/envs.sh
+++ b/examples/envs.sh
@@ -20,7 +20,7 @@ export PGOROOT=$GOPATH/src/github.com/crunchydata/postgres-operator
# the version of the Operator you run is set by these vars
export PGO_IMAGE_PREFIX=registry.developers.crunchydata.com/crunchydata
export PGO_BASEOS=centos7
-export PGO_VERSION=4.4.1
+export PGO_VERSION=4.4.2
export PGO_IMAGE_TAG=$PGO_BASEOS-$PGO_VERSION
# for setting the pgo apiserver port, disabling TLS or not verifying TLS
diff --git a/examples/load/sample-json-load-config-sc.yaml b/examples/load/sample-json-load-config-sc.yaml
index 20e5c111ce..39c3e9d82b 100644
--- a/examples/load/sample-json-load-config-sc.yaml
+++ b/examples/load/sample-json-load-config-sc.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.1
+PGOImageTag: centos7-4.4.2
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/examples/load/sample-json-load-config.yaml b/examples/load/sample-json-load-config.yaml
index 24268fda1a..38f36497c3 100644
--- a/examples/load/sample-json-load-config.yaml
+++ b/examples/load/sample-json-load-config.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.1
+PGOImageTag: centos7-4.4.2
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/examples/load/sample-load-config.yaml b/examples/load/sample-load-config.yaml
index 1b75a5df4a..3e4700e850 100644
--- a/examples/load/sample-load-config.yaml
+++ b/examples/load/sample-load-config.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.1
+PGOImageTag: centos7-4.4.2
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/installers/ansible/README.md b/installers/ansible/README.md
index 4518aa3a52..dc62f5d4c5 100644
--- a/installers/ansible/README.md
+++ b/installers/ansible/README.md
@@ -4,7 +4,7 @@
-Latest Release: 4.4.1
+Latest Release: 4.4.2
## General
diff --git a/installers/ansible/values.yaml b/installers/ansible/values.yaml
index cb52a0fa4c..53e8b9b577 100644
--- a/installers/ansible/values.yaml
+++ b/installers/ansible/values.yaml
@@ -17,7 +17,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.4-4.4.1"
+ccp_image_tag: "centos7-12.5-4.4.2"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -58,14 +58,14 @@ pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
-pgo_client_version: "4.4.1"
+pgo_client_version: "4.4.2"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.1"
+pgo_image_tag: "centos7-4.4.2"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
diff --git a/installers/gcp-marketplace/Makefile b/installers/gcp-marketplace/Makefile
index a9591aa02e..232c4e06ee 100644
--- a/installers/gcp-marketplace/Makefile
+++ b/installers/gcp-marketplace/Makefile
@@ -6,7 +6,7 @@ MARKETPLACE_TOOLS ?= gcr.io/cloud-marketplace-tools/k8s/dev:$(MARKETPLACE_VERSIO
MARKETPLACE_VERSION ?= 0.9.4
KUBECONFIG ?= $(HOME)/.kube/config
PARAMETERS ?= {}
-PGO_VERSION ?= 4.4.1
+PGO_VERSION ?= 4.4.2
IMAGE_BUILD_ARGS = --build-arg MARKETPLACE_VERSION='$(MARKETPLACE_VERSION)' \
--build-arg PGO_VERSION='$(PGO_VERSION)'
diff --git a/installers/gcp-marketplace/README.md b/installers/gcp-marketplace/README.md
index 0f29b9af13..cdde5b8892 100644
--- a/installers/gcp-marketplace/README.md
+++ b/installers/gcp-marketplace/README.md
@@ -59,7 +59,7 @@ Google Cloud Marketplace.
```shell
IMAGE_REPOSITORY=gcr.io/crunchydata-public/postgres-operator
- export PGO_VERSION=4.4.1
+ export PGO_VERSION=4.4.2
export INSTALLER_IMAGE=${IMAGE_REPOSITORY}/deployer:${PGO_VERSION}
export OPERATOR_IMAGE=${IMAGE_REPOSITORY}:${PGO_VERSION}
export OPERATOR_IMAGE_API=${IMAGE_REPOSITORY}/pgo-apiserver:${PGO_VERSION}
diff --git a/installers/gcp-marketplace/inventory.ini b/installers/gcp-marketplace/inventory.ini
index ab8dac2486..023e5229c1 100644
--- a/installers/gcp-marketplace/inventory.ini
+++ b/installers/gcp-marketplace/inventory.ini
@@ -16,11 +16,11 @@ pgo_operator_namespace='${OPERATOR_NAMESPACE}'
namespace=''
ccp_image_prefix='registry.developers.crunchydata.com/crunchydata'
-ccp_image_tag='centos7-12.4-4.4.1'
+ccp_image_tag='centos7-12.5-4.4.2'
ccp_image_pull_secret=''
ccp_image_pull_secret_manifest=''
pgo_image_prefix='registry.developers.crunchydata.com/crunchydata'
-pgo_image_tag='centos7-4.4.1'
+pgo_image_tag='centos7-4.4.2'
pgo_image='${OPERATOR_IMAGE}'
pgo_event_image='${OPERATOR_IMAGE_EVENT}'
@@ -29,7 +29,7 @@ pgo_scheduler_image='${OPERATOR_IMAGE_SCHEDULER}'
# PGO Client Install
pgo_client_install='false'
-pgo_client_version='v4.4.1'
+pgo_client_version='v4.4.2'
badger='false'
metrics='${POSTGRES_METRICS}'
diff --git a/installers/helm/metrics/Chart.yaml b/installers/helm/metrics/Chart.yaml
index fbb7a92719..aa1a37f1bd 100644
--- a/installers/helm/metrics/Chart.yaml
+++ b/installers/helm/metrics/Chart.yaml
@@ -3,6 +3,6 @@ name: postgres-operator-metrics
description: Metrics Install for Crunchy PostgreSQL Operator
type: application
version: 0.1.0
-appVersion: 4.4.1
+appVersion: 4.4.2
home: https://github.com/CrunchyData/postgres-operator
icon: https://github.com/CrunchyData/postgres-operator/raw/master/crunchy_logo.png
\ No newline at end of file
diff --git a/installers/helm/metrics/values.yaml b/installers/helm/metrics/values.yaml
index 9a47f3baf1..b3118d7858 100644
--- a/installers/helm/metrics/values.yaml
+++ b/installers/helm/metrics/values.yaml
@@ -29,7 +29,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.4-4.4.1"
+ccp_image_tag: "centos7-12.5-4.4.2"
create_rbac: "true"
crunchy_debug: "false"
db_password_length: "24"
@@ -56,11 +56,11 @@ pgo_admin_password: "examplepassword"
pgo_admin_perms: "*"
pgo_admin_role_name: "pgoadmin"
pgo_admin_username: "admin"
-pgo_client_version: "4.4.1"
+pgo_client_version: "4.4.2"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.1"
+pgo_image_tag: "centos7-4.4.2"
pgo_installation_name: "devtest"
pgo_operator_namespace: "pgo"
prometheus_install: "false"
diff --git a/installers/helm/postgres-operator/Chart.yaml b/installers/helm/postgres-operator/Chart.yaml
index d2a005c5bc..6a388a3de6 100644
--- a/installers/helm/postgres-operator/Chart.yaml
+++ b/installers/helm/postgres-operator/Chart.yaml
@@ -3,7 +3,7 @@ name: postgres-operator
description: Crunchy PostgreSQL Operator Helm chart for Kubernetes
type: application
version: 0.1.0
-appVersion: 4.4.1
+appVersion: 4.4.2
home: https://github.com/CrunchyData/postgres-operator
icon: https://github.com/CrunchyData/postgres-operator/raw/master/crunchy_logo.png
keywords:
diff --git a/installers/helm/postgres-operator/values.yaml b/installers/helm/postgres-operator/values.yaml
index fcc609376a..988b9e6f80 100644
--- a/installers/helm/postgres-operator/values.yaml
+++ b/installers/helm/postgres-operator/values.yaml
@@ -37,7 +37,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.4-4.4.1"
+ccp_image_tag: "centos7-12.5-4.4.2"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -70,14 +70,14 @@ pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
-pgo_client_version: "4.4.1"
+pgo_client_version: "4.4.2"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.1"
+pgo_image_tag: "centos7-4.4.2"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
diff --git a/installers/kubectl/client-setup.sh b/installers/kubectl/client-setup.sh
index 4ae6f3f0f9..1fd3c85c31 100755
--- a/installers/kubectl/client-setup.sh
+++ b/installers/kubectl/client-setup.sh
@@ -14,7 +14,7 @@
# This script should be run after the operator has been deployed
PGO_OPERATOR_NAMESPACE="${PGO_OPERATOR_NAMESPACE:-pgo}"
PGO_USER_ADMIN="${PGO_USER_ADMIN:-pgouser-admin}"
-PGO_CLIENT_VERSION="${PGO_CLIENT_VERSION:-v4.4.1}"
+PGO_CLIENT_VERSION="${PGO_CLIENT_VERSION:-v4.4.2}"
PGO_CLIENT_URL="https://github.com/CrunchyData/postgres-operator/releases/download/${PGO_CLIENT_VERSION}"
PGO_CMD="${PGO_CMD-kubectl}"
diff --git a/installers/kubectl/postgres-operator-ocp311.yml b/installers/kubectl/postgres-operator-ocp311.yml
index 90f396ffef..8b80b430aa 100644
--- a/installers/kubectl/postgres-operator-ocp311.yml
+++ b/installers/kubectl/postgres-operator-ocp311.yml
@@ -44,7 +44,7 @@ data:
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
- ccp_image_tag: "centos7-12.4-4.4.1"
+ ccp_image_tag: "centos7-12.5-4.4.2"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -85,14 +85,14 @@ data:
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
- pgo_client_version: "4.4.1"
+ pgo_client_version: "4.4.2"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
- pgo_image_tag: "centos7-4.4.1"
+ pgo_image_tag: "centos7-4.4.2"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
@@ -174,7 +174,7 @@ spec:
restartPolicy: Never
containers:
- name: pgo-deploy
- image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.1
+ image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.2
imagePullPolicy: IfNotPresent
env:
- name: DEPLOY_ACTION
diff --git a/installers/kubectl/postgres-operator.yml b/installers/kubectl/postgres-operator.yml
index eeec9afce5..dd65c40804 100644
--- a/installers/kubectl/postgres-operator.yml
+++ b/installers/kubectl/postgres-operator.yml
@@ -138,7 +138,7 @@ data:
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
- ccp_image_tag: "centos7-12.4-4.4.1"
+ ccp_image_tag: "centos7-12.5-4.4.2"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -179,14 +179,14 @@ data:
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
- pgo_client_version: "4.4.1"
+ pgo_client_version: "4.4.2"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
- pgo_image_tag: "centos7-4.4.1"
+ pgo_image_tag: "centos7-4.4.2"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
@@ -281,7 +281,7 @@ spec:
restartPolicy: Never
containers:
- name: pgo-deploy
- image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.1
+ image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.2
imagePullPolicy: IfNotPresent
env:
- name: DEPLOY_ACTION
diff --git a/installers/olm/Makefile b/installers/olm/Makefile
index e6881c21c2..0ed6d4cdce 100644
--- a/installers/olm/Makefile
+++ b/installers/olm/Makefile
@@ -2,7 +2,7 @@
.SUFFIXES:
CCP_IMAGE_PREFIX ?= registry.developers.crunchydata.com/crunchydata
-CCP_PG_FULLVERSION ?= 12.4
+CCP_PG_FULLVERSION ?= 12.5
CCP_POSTGIS_VERSION ?= 3.0
KUBECONFIG ?= $(HOME)/.kube/config
OLM_SDK_VERSION ?= 0.13.0
@@ -10,7 +10,7 @@ OLM_TOOLS ?= registry.localhost:5000/postgres-operator-olm-tools:$(OLM_SDK_VERSI
OLM_VERSION ?= 0.14.2
PGO_BASEOS ?= centos7
PGO_IMAGE_PREFIX ?= registry.developers.crunchydata.com/crunchydata
-PGO_VERSION ?= 4.4.1
+PGO_VERSION ?= 4.4.2
PGO_IMAGE_TAG ?= $(PGO_BASEOS)-$(PGO_VERSION)
CCP_IMAGE_TAG ?= $(PGO_BASEOS)-$(CCP_PG_FULLVERSION)-$(PGO_VERSION)
CCP_POSTGIS_IMAGE_TAG ?= $(PGO_BASEOS)-$(CCP_PG_FULLVERSION)-$(CCP_POSTGIS_VERSION)-$(PGO_VERSION)
diff --git a/internal/util/util_test.go b/internal/util/util_test.go
index 30d6d8b65d..2527772df3 100644
--- a/internal/util/util_test.go
+++ b/internal/util/util_test.go
@@ -18,25 +18,25 @@ func TestGetStandardImageTag(t *testing.T) {
expected string
}{
{
- "image: crunchy-postgres-ha, tag: centos7-12.4-4.5.0",
+ "image: crunchy-postgres-ha, tag: centos7-12.5-4.5.0",
"crunchy-postgres-ha",
- "centos7-12.4-4.5.0",
- "centos7-12.4-4.5.0",
+ "centos7-12.5-4.5.0",
+ "centos7-12.5-4.5.0",
}, {
- "image: crunchy-postgres-gis-ha, tag: centos7-12.4-3.0-4.5.0",
+ "image: crunchy-postgres-gis-ha, tag: centos7-12.5-3.0-4.5.0",
"crunchy-postgres-gis-ha",
- "centos7-12.4-3.0-4.5.0",
- "centos7-12.4-4.5.0",
+ "centos7-12.5-3.0-4.5.0",
+ "centos7-12.5-4.5.0",
}, {
- "image: crunchy-postgres-ha, tag: centos7-12.4-4.5.0-beta.1",
+ "image: crunchy-postgres-ha, tag: centos7-12.5-4.5.0-beta.1",
"crunchy-postgres-ha",
- "centos7-12.4-4.5.0-beta.1",
- "centos7-12.4-4.5.0-beta.1",
+ "centos7-12.5-4.5.0-beta.1",
+ "centos7-12.5-4.5.0-beta.1",
}, {
- "image: crunchy-postgres-gis-ha, tag: centos7-12.4-3.0-4.5.0-beta.2",
+ "image: crunchy-postgres-gis-ha, tag: centos7-12.5-3.0-4.5.0-beta.2",
"crunchy-postgres-gis-ha",
- "centos7-12.4-3.0-4.5.0-beta.2",
- "centos7-12.4-4.5.0-beta.2",
+ "centos7-12.5-3.0-4.5.0-beta.2",
+ "centos7-12.5-4.5.0-beta.2",
}, {
"image: crunchy-postgres-ha, tag: centos8-9.5.23-4.5.0-rc.1",
"crunchy-postgres-ha",
diff --git a/pkg/apis/crunchydata.com/v1/doc.go b/pkg/apis/crunchydata.com/v1/doc.go
index 63b21d1c91..2992589526 100644
--- a/pkg/apis/crunchydata.com/v1/doc.go
+++ b/pkg/apis/crunchydata.com/v1/doc.go
@@ -53,7 +53,7 @@ cluster.
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.1",
+ '{"ClientVersion":"4.4.2",
"Namespace":"pgouser1",
"Name":"mycluster",
$PGO_APISERVER_URL/clusters
@@ -72,7 +72,7 @@ show all of the clusters that are in the given namespace.
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.1",
+ '{"ClientVersion":"4.4.2",
"Namespace":"pgouser1",
"Clustername":"mycluster"}' \
$PGO_APISERVER_URL/showclusters
@@ -82,7 +82,7 @@ $PGO_APISERVER_URL/showclusters
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.1",
+ '{"ClientVersion":"4.4.2",
"Namespace":"pgouser1",
"Clustername":"mycluster"}' \
$PGO_APISERVER_URL/clustersdelete
@@ -90,7 +90,7 @@ $PGO_APISERVER_URL/clustersdelete
Schemes: http, https
BasePath: /
- Version: 4.4.1
+ Version: 4.4.2
License: Apache 2.0 http://www.apache.org/licenses/LICENSE-2.0
Contact: Crunchy Data https://www.crunchydata.com/
diff --git a/pkg/apiservermsgs/common.go b/pkg/apiservermsgs/common.go
index 5c7ba74143..fccc1ff341 100644
--- a/pkg/apiservermsgs/common.go
+++ b/pkg/apiservermsgs/common.go
@@ -15,7 +15,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-const PGO_VERSION = "4.4.1"
+const PGO_VERSION = "4.4.2"
// Ok status
const Ok = "ok"
diff --git a/redhat/atomic/help.1 b/redhat/atomic/help.1
index 34735fc700..3790f3ee02 100644
--- a/redhat/atomic/help.1
+++ b/redhat/atomic/help.1
@@ -56,4 +56,4 @@ The Red Hat Enterprise Linux version from which the container was built. For exa
\fB\fCRelease=\fR
.PP
-The specific release number of the container. For example, Release="4.4.1"
+The specific release number of the container. For example, Release="4.4.2"
diff --git a/redhat/atomic/help.md b/redhat/atomic/help.md
index 6fd906b198..bd993a3b86 100644
--- a/redhat/atomic/help.md
+++ b/redhat/atomic/help.md
@@ -45,4 +45,4 @@ The Red Hat Enterprise Linux version from which the container was built. For exa
`Release=`
-The specific release number of the container. For example, Release="4.4.1"
+The specific release number of the container. For example, Release="4.4.2"
From fad89605ce7bf1355595f57c72f5e7011dc0d74d Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 27 Nov 2020 11:54:40 -0500
Subject: [PATCH 39/77] Fix crash in cluster shutdown logic
The Operator would crash if a shutdown was issued but there was
no in the cluster.
Issue: [ch9825]
Issue: #2073
---
internal/operator/cluster/clusterlogic.go | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/internal/operator/cluster/clusterlogic.go b/internal/operator/cluster/clusterlogic.go
index d18b71eb99..c28942863a 100644
--- a/internal/operator/cluster/clusterlogic.go
+++ b/internal/operator/cluster/clusterlogic.go
@@ -624,7 +624,10 @@ func ShutdownCluster(clientset kubernetes.Interface, restclient *rest.RESTClient
return err
}
- if len(pods.Items) > 1 {
+ if len(pods.Items) == 0 {
+ return fmt.Errorf("Cluster Operator: Could not find primary pod for shutdown of "+
+ "cluster %s", cluster.Name)
+ } else if len(pods.Items) > 1 {
return fmt.Errorf("Cluster Operator: Invalid number of primary pods (%d) found when "+
"shutting down cluster %s", len(pods.Items), cluster.Name)
}
From 0748231ced90e3ff1b09d988d3ea55df2e8e1da9 Mon Sep 17 00:00:00 2001
From: andrewlecuyer <43458182+andrewlecuyer@users.noreply.github.com>
Date: Wed, 2 Dec 2020 10:16:22 -0600
Subject: [PATCH 40/77] Remove disabling of autofailover from rmdata
The rmdata application no longer disables autofailover when deleting a
PostgreSQL cluster. In past versions of the PostgreSQL Operator, it
was necessary to first disable autofailover prior to cluster deletion
since the rmdata application itself would stop the PostgreSQL database
using 'pg_ctl stop'. However, since Patroni is now responsible for
cleanly shutting down the database (specifically upon receipt of a
SIGTERM signal), autofailver should no longer be disabled (if it is,
Patroni will not respond to the SIGTERM and will therefore not attempt
to cleanly shutdown the database).
This commit therefore ensures an attempt is made to cleanly shutdown
the database when deleting a PostgreSQL cluster. This, in turn, will
increase the likeliness that the cluster can later be recreated and
cleanly restarted.
Issue: [ch9856]
---
pgo-rmdata/rmdata/process.go | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/pgo-rmdata/rmdata/process.go b/pgo-rmdata/rmdata/process.go
index 361dbef021..66b2111a48 100644
--- a/pgo-rmdata/rmdata/process.go
+++ b/pgo-rmdata/rmdata/process.go
@@ -52,15 +52,6 @@ const (
func Delete(request Request) {
log.Infof("rmdata.Process %v", request)
- // if, check to see if this is a full cluster removal...i.e. "IsReplica"
- // and "IsBackup" is set to false
- //
- // if this is a full cluster removal, first disable autofailover
- if !(request.IsReplica || request.IsBackup) {
- log.Debug("disabling autofailover for cluster removal")
- util.ToggleAutoFailover(request.Clientset, false, request.ClusterPGHAScope, request.Namespace)
- }
-
//the case of 'pgo scaledown'
if request.IsReplica {
log.Info("rmdata.Process scaledown replica use case")
From 9726ab7be1f7373ebc8ba78e8b4897bffa328821 Mon Sep 17 00:00:00 2001
From: andrewlecuyer <43458182+andrewlecuyer@users.noreply.github.com>
Date: Tue, 8 Dec 2020 15:00:14 -0600
Subject: [PATCH 41/77] No post-failover backups for standby clusters
A post-failover backup is now only triggered for non-standby clusters.
Therefore, if a failover occurs within a standby cluster, and automatic
backup will no longer be run.
Issue: [ch9912]
Issue: #2102
---
internal/controller/pod/promotionhandler.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/internal/controller/pod/promotionhandler.go b/internal/controller/pod/promotionhandler.go
index 17a8b368f8..2a9404bab2 100644
--- a/internal/controller/pod/promotionhandler.go
+++ b/internal/controller/pod/promotionhandler.go
@@ -62,7 +62,8 @@ func (c *Controller) handlePostgresPodPromotion(newPod *apiv1.Pod, cluster crv1.
}
}
- if cluster.Status.State == crv1.PgclusterStateInitialized {
+ // create a post-failover backup if not a standby cluster
+ if !cluster.Spec.Standby && cluster.Status.State == crv1.PgclusterStateInitialized {
if err := cleanAndCreatePostFailoverBackup(c.PodClient, c.PodClientset,
cluster.Name, newPod.Namespace); err != nil {
log.Error(err)
From 1a62e737458d640c060cd257836461ebc6085b6d Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Tue, 8 Dec 2020 22:19:40 -0500
Subject: [PATCH 42/77] Do not consider bootstrap Pod in `pgo df`
The bootstrap Pod, a remnaint of a cluster restore, gets caught
up in the `pgo df` search, but unfortunately this is not a valid
Pod. This exlcude this Pod from being considered.
Issue: [ch2029]
Issue: #2029
---
internal/apiserver/dfservice/dfimpl.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/internal/apiserver/dfservice/dfimpl.go b/internal/apiserver/dfservice/dfimpl.go
index 08e104dc8c..e42ce9aa13 100644
--- a/internal/apiserver/dfservice/dfimpl.go
+++ b/internal/apiserver/dfservice/dfimpl.go
@@ -133,7 +133,8 @@ func getClaimCapacity(clientset kubernetes.Interface, pvcName, ns string) (strin
func getClusterDf(cluster *crv1.Pgcluster, clusterResultsChannel chan msgs.DfDetail, clusterProgressChannel chan bool, errorChannel chan error) {
log.Debugf("pod df: %s", cluster.Spec.Name)
- selector := fmt.Sprintf("%s=%s", config.LABEL_PG_CLUSTER, cluster.Spec.Name)
+ selector := fmt.Sprintf("%s=%s,!%s",
+ config.LABEL_PG_CLUSTER, cluster.Spec.Name, config.LABEL_PGHA_BOOTSTRAP)
pods, err := apiserver.Clientset.CoreV1().Pods(cluster.Spec.Namespace).List(metav1.ListOptions{LabelSelector: selector})
From 7c84fba12f327467ca45aeb63763d54d6c178986 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Tue, 8 Dec 2020 22:41:06 -0500
Subject: [PATCH 43/77] Delete bootstrap Job once it successfully completes
When the bootstrap Job completes successfully after a restore,
it contains information that ends up being consumed by other
parts of the Operator system, such as Patroni. As the logs
from the Job do not provide much, if any, helpful information
after a restore succeeds, it's best to have the Operator
eliminate the job.
As such, this changes the behavior so that the bootstrap Job
is removed.
As this has lead to some buggy behavior, this is being
considered as a bug fix, as regular operational work would
dictate that the Job is removed anyway.
Issue: [ch9919]
---
internal/controller/job/bootstraphandler.go | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/internal/controller/job/bootstraphandler.go b/internal/controller/job/bootstraphandler.go
index ad632867de..222fcba5fc 100644
--- a/internal/controller/job/bootstraphandler.go
+++ b/internal/controller/job/bootstraphandler.go
@@ -68,7 +68,7 @@ func (c *Controller) handleBootstrapUpdate(job *apiv1.Job) error {
// If the job was successful we updated the state of the pgcluster to a "bootstrapped" status.
// This will then trigger full initialization of the cluster. We also cleanup any resources
- // from the bootstrap job.
+ // from the bootstrap job and delete the job itself
if cluster.Status.State == crv1.PgclusterStateBootstrapping {
if err := c.cleanupBootstrapResources(job, cluster); err != nil {
@@ -82,6 +82,11 @@ func (c *Controller) handleBootstrapUpdate(job *apiv1.Job) error {
log.Error(err)
return err
}
+
+ // as it is no longer needed, delete the job
+ deletePropagation := metav1.DeletePropagationBackground
+ return c.JobClientset.BatchV1().Jobs(namespace).Delete(job.Name,
+ &metav1.DeleteOptions{PropagationPolicy: &deletePropagation})
}
return nil
From 82761ea24b21b83580fe98f18597e7e95e57db64 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Thu, 10 Dec 2020 12:38:36 -0500
Subject: [PATCH 44/77] Only consider running Pods for `pgo test`
By adding this limitation, Pods such as Evicted Pods would not
be considered as a part of `pgo test` output, as this could
present some odd scenarios, such as the presence of two primaries.
Issue: [ch9931]
Issue: #2095
---
.../apiserver/clusterservice/clusterimpl.go | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/internal/apiserver/clusterservice/clusterimpl.go b/internal/apiserver/clusterservice/clusterimpl.go
index e201d313d0..00f4abf430 100644
--- a/internal/apiserver/clusterservice/clusterimpl.go
+++ b/internal/apiserver/clusterservice/clusterimpl.go
@@ -38,6 +38,7 @@ import (
kerrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/client-go/kubernetes"
)
@@ -1933,10 +1934,15 @@ func GetPrimaryAndReplicaPods(cluster *crv1.Pgcluster, ns string) ([]msgs.ShowCl
output := make([]msgs.ShowClusterPod, 0)
+ // find all of the Pods that represent Postgres primary and replicas.
+ // only consider running Pods
selector := config.LABEL_SERVICE_NAME + "=" + cluster.Spec.Name + "," + config.LABEL_DEPLOYMENT_NAME
- log.Debugf("selector for GetPrimaryAndReplicaPods is %s", selector)
+ options := metav1.ListOptions{
+ FieldSelector: fields.OneTermEqualSelector("status.phase", string(v1.PodRunning)).String(),
+ LabelSelector: selector,
+ }
- pods, err := apiserver.Clientset.CoreV1().Pods(ns).List(metav1.ListOptions{LabelSelector: selector})
+ pods, err := apiserver.Clientset.CoreV1().Pods(ns).List(options)
if err != nil {
return output, err
}
@@ -1956,9 +1962,12 @@ func GetPrimaryAndReplicaPods(cluster *crv1.Pgcluster, ns string) ([]msgs.ShowCl
}
selector = config.LABEL_SERVICE_NAME + "=" + cluster.Spec.Name + "-replica" + "," + config.LABEL_DEPLOYMENT_NAME
- log.Debugf("selector for GetPrimaryAndReplicaPods is %s", selector)
+ options = metav1.ListOptions{
+ FieldSelector: fields.OneTermEqualSelector("status.phase", string(v1.PodRunning)).String(),
+ LabelSelector: selector,
+ }
- pods, err = apiserver.Clientset.CoreV1().Pods(ns).List(metav1.ListOptions{LabelSelector: selector})
+ pods, err = apiserver.Clientset.CoreV1().Pods(ns).List(options)
if err != nil {
return output, err
}
From 758fedda80a23e704fcb6168876ff77878de7f02 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Wed, 16 Dec 2020 09:43:40 -0500
Subject: [PATCH 45/77] Do not consider evicted Pods with `pgo df`
For a variety of reasons, including the need to exec into Pods
to get PVC status with `pgo df`, only running Pods should be
considered for this command and, in particular, no evicted Pods.
Issue: [ch9959]
Issue: #2129
---
internal/apiserver/dfservice/dfimpl.go | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/internal/apiserver/dfservice/dfimpl.go b/internal/apiserver/dfservice/dfimpl.go
index e42ce9aa13..1d18742f29 100644
--- a/internal/apiserver/dfservice/dfimpl.go
+++ b/internal/apiserver/dfservice/dfimpl.go
@@ -24,10 +24,12 @@ import (
"github.com/crunchydata/postgres-operator/internal/kubeapi"
crv1 "github.com/crunchydata/postgres-operator/pkg/apis/crunchydata.com/v1"
msgs "github.com/crunchydata/postgres-operator/pkg/apiservermsgs"
+
log "github.com/sirupsen/logrus"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/fields"
"k8s.io/client-go/kubernetes"
)
@@ -136,7 +138,12 @@ func getClusterDf(cluster *crv1.Pgcluster, clusterResultsChannel chan msgs.DfDet
selector := fmt.Sprintf("%s=%s,!%s",
config.LABEL_PG_CLUSTER, cluster.Spec.Name, config.LABEL_PGHA_BOOTSTRAP)
- pods, err := apiserver.Clientset.CoreV1().Pods(cluster.Spec.Namespace).List(metav1.ListOptions{LabelSelector: selector})
+ options := metav1.ListOptions{
+ FieldSelector: fields.OneTermEqualSelector("status.phase", string(v1.PodRunning)).String(),
+ LabelSelector: selector,
+ }
+
+ pods, err := apiserver.Clientset.CoreV1().Pods(cluster.Spec.Namespace).List(options)
// if there is an error attempting to get the pods, just return
if err != nil {
From 8ab663321e73551b5388361c0d6476f75d721aa4 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 18 Dec 2020 16:36:12 -0500
Subject: [PATCH 46/77] Modify syntax for checking for recovery status via SQL
(#2133)
There were cases where this was failing due to too many quotes
being used, so this should avoid said issues.
Issue: [ch9981]
Issue: #2108
---
internal/controller/pod/promotionhandler.go | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/internal/controller/pod/promotionhandler.go b/internal/controller/pod/promotionhandler.go
index 2a9404bab2..9083eb52f6 100644
--- a/internal/controller/pod/promotionhandler.go
+++ b/internal/controller/pod/promotionhandler.go
@@ -34,9 +34,14 @@ import (
"k8s.io/client-go/rest"
)
+const (
+ // recoverySQL is just the SQL to figure out if Postgres is in recovery mode
+ recoverySQL = "SELECT pg_is_in_recovery();"
+)
+
var (
// isInRecoveryCommand is the command run to determine if postgres is in recovery
- isInRecoveryCMD []string = []string{"psql", "-t", "-c", "'SELECT pg_is_in_recovery();'", "-p"}
+ isInRecoveryCMD []string = []string{"psql", "-t", "-c", recoverySQL, "-p"}
// leaderStatusCMD is the command run to get the Patroni status for the primary
leaderStatusCMD []string = []string{"curl", fmt.Sprintf("localhost:%s/master",
From 1e3b333ced9927c3daf75b40f91492ddb353e99f Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sun, 20 Dec 2020 11:37:57 -0500
Subject: [PATCH 47/77] Add missing `--no-prompt` flag to `pgo upgrade`
The mechanism for disabling the verification prompt for `pgo upgrade`
was always available, but the flag itself was not exposed.
Issue: [ch9988]
Issue: #2135
---
docs/content/pgo-client/reference/pgo_upgrade.md | 13 +++++++++----
pgo/cmd/upgrade.go | 10 ++++------
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/docs/content/pgo-client/reference/pgo_upgrade.md b/docs/content/pgo-client/reference/pgo_upgrade.md
index 8490a8d13e..7225e6be02 100644
--- a/docs/content/pgo-client/reference/pgo_upgrade.md
+++ b/docs/content/pgo-client/reference/pgo_upgrade.md
@@ -7,10 +7,10 @@ Perform a cluster upgrade.
### Synopsis
-UPGRADE allows you to perform a comprehensive PGCluster upgrade
- (for use after performing a Postgres Operator upgrade).
+UPGRADE allows you to perform a comprehensive PGCluster upgrade
+ (for use after performing a Postgres Operator upgrade).
For example:
-
+
pgo upgrade mycluster
Upgrades the cluster for use with the upgraded Postgres Operator version.
@@ -23,12 +23,13 @@ pgo upgrade [flags]
```
-h, --help help for upgrade
--ignore-validation Disables version checking against the image tags when performing an cluster upgrade.
+ --no-prompt No command line confirmation.
```
### Options inherited from parent commands
```
- --apiserver-url string The URL for the PostgreSQL Operator apiserver that will process the request from the pgo client.
+ --apiserver-url string The URL for the PostgreSQL Operator apiserver that will process the request from the pgo client. Note that the URL should **not** end in a '/'.
--debug Enable additional output for debugging.
--disable-tls Disable TLS authentication to the Postgres Operator.
--exclude-os-trust Exclude CA certs from OS default trust store
@@ -42,4 +43,8 @@ pgo upgrade [flags]
* [pgo](/pgo-client/reference/pgo/) - The pgo command line interface.
+<<<<<<< HEAD
###### Auto generated by spf13/cobra on 2-Jul-2020
+=======
+###### Auto generated by spf13/cobra on 20-Dec-2020
+>>>>>>> c8c29c3d0... Add missing `--no-prompt` flag to `pgo upgrade`
diff --git a/pgo/cmd/upgrade.go b/pgo/cmd/upgrade.go
index e6672f1aa8..a095dcde75 100644
--- a/pgo/cmd/upgrade.go
+++ b/pgo/cmd/upgrade.go
@@ -41,10 +41,10 @@ var UpgradeCCPImageTag string
var UpgradeCmd = &cobra.Command{
Use: "upgrade",
Short: "Perform a cluster upgrade.",
- Long: `UPGRADE allows you to perform a comprehensive PGCluster upgrade
- (for use after performing a Postgres Operator upgrade).
+ Long: `UPGRADE allows you to perform a comprehensive PGCluster upgrade
+ (for use after performing a Postgres Operator upgrade).
For example:
-
+
pgo upgrade mycluster
Upgrades the cluster for use with the upgraded Postgres Operator version.`,
Run: func(cmd *cobra.Command, args []string) {
@@ -69,8 +69,8 @@ func init() {
RootCmd.AddCommand(UpgradeCmd)
// flags for "pgo upgrade"
- UpgradeCmd.Flags().BoolVarP(&IgnoreValidation, "ignore-validation", "", false, "Disables version checking against the image tags when performing an cluster upgrade.")
UpgradeCmd.Flags().StringVarP(&UpgradeCCPImageTag, "ccp-image-tag", "", "", "The image tag to use for cluster creation. If specified, it overrides the default configuration setting and disables tag validation checking.")
+ UpgradeCmd.Flags().BoolVar(&NoPrompt, "no-prompt", false, "No command line confirmation.")
}
func createUpgrade(args []string, ns string) {
@@ -90,7 +90,6 @@ func createUpgrade(args []string, ns string) {
request.UpgradeCCPImageTag = UpgradeCCPImageTag
response, err := api.CreateUpgrade(httpclient, &SessionCredentials, &request)
-
if err != nil {
fmt.Println("Error: " + err.Error())
os.Exit(2)
@@ -104,5 +103,4 @@ func createUpgrade(args []string, ns string) {
fmt.Println("Error: " + response.Status.Msg)
os.Exit(2)
}
-
}
From 84f65ff3f7a91dde530455962e1f4d6363e81d71 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sun, 20 Dec 2020 12:30:26 -0500
Subject: [PATCH 48/77] Ensure consistent permissions for mounting repo Secret
While the Secret volume mount is set to be readonly for the
pgBackRest Secret information, the defaultMode on the volume itself
was set to be more permissive. While it appears that the vast
majority of Kubernetes distributions gie precedence to the value
of the volume mount, so flavors do use the values set on the volume.
As such, it's prudent to remove the more permissive settings, which
this patch does.
Issue: [ch9989]
Issue: #2140
---
.../pgo-operator/files/pgo-configs/cluster-bootstrap-job.json | 3 +--
.../pgo-operator/files/pgo-configs/cluster-deployment.json | 3 +--
.../files/pgo-configs/pgo-backrest-repo-template.json | 3 +--
3 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/installers/ansible/roles/pgo-operator/files/pgo-configs/cluster-bootstrap-job.json b/installers/ansible/roles/pgo-operator/files/pgo-configs/cluster-bootstrap-job.json
index 231dcb49e1..30a57cc5f6 100644
--- a/installers/ansible/roles/pgo-operator/files/pgo-configs/cluster-bootstrap-job.json
+++ b/installers/ansible/roles/pgo-operator/files/pgo-configs/cluster-bootstrap-job.json
@@ -163,8 +163,7 @@
}, {
"name": "sshd",
"secret": {
- "secretName": "{{.RestoreFrom}}-backrest-repo-config",
- "defaultMode": 511
+ "secretName": "{{.RestoreFrom}}-backrest-repo-config"
}
},
{{if .TLSEnabled}}
diff --git a/installers/ansible/roles/pgo-operator/files/pgo-configs/cluster-deployment.json b/installers/ansible/roles/pgo-operator/files/pgo-configs/cluster-deployment.json
index efc6e1947a..4a5e0952b6 100644
--- a/installers/ansible/roles/pgo-operator/files/pgo-configs/cluster-deployment.json
+++ b/installers/ansible/roles/pgo-operator/files/pgo-configs/cluster-deployment.json
@@ -247,8 +247,7 @@
}, {
"name": "sshd",
"secret": {
- "secretName": "{{.ClusterName}}-backrest-repo-config",
- "defaultMode": 511
+ "secretName": "{{.ClusterName}}-backrest-repo-config"
}
}, {
"name": "root-volume",
diff --git a/installers/ansible/roles/pgo-operator/files/pgo-configs/pgo-backrest-repo-template.json b/installers/ansible/roles/pgo-operator/files/pgo-configs/pgo-backrest-repo-template.json
index 511bbee7a8..0cf67d3f16 100644
--- a/installers/ansible/roles/pgo-operator/files/pgo-configs/pgo-backrest-repo-template.json
+++ b/installers/ansible/roles/pgo-operator/files/pgo-configs/pgo-backrest-repo-template.json
@@ -99,8 +99,7 @@
"volumes": [{
"name": "sshd",
"secret": {
- "secretName": "{{.SshdSecretsName}}",
- "defaultMode": 511
+ "secretName": "{{.SshdSecretsName}}"
}
}, {
"name": "backrestrepo",
From 43a41e5c173063d2706d0af33c5a592d9fa6398c Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sat, 26 Dec 2020 15:14:47 -0500
Subject: [PATCH 49/77] Modify character space for random password generation
This removes a couple of characters from consideration for
the randomly generated passwords, as these characters could pose
problems when applying them in shell environments. The character
entropy is still quite large even with this removal.
---
internal/util/secrets.go | 20 ++++++++++++++++----
internal/util/secrets_test.go | 12 +++++++++---
2 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/internal/util/secrets.go b/internal/util/secrets.go
index 1ef90e7bd6..ce7b69472f 100644
--- a/internal/util/secrets.go
+++ b/internal/util/secrets.go
@@ -45,6 +45,10 @@ const (
// passwordCharUpper is the highest ASCII character to use for generating a
// password, which is 126
passwordCharUpper = 126
+ // passwordCharExclude is a map of characters that we choose to exclude from
+ // the password to simplify usage in the shell. There is still enough entropy
+ // that exclusion of these characters is OK.
+ passwordCharExclude = "`\\"
)
// passwordCharSelector is a "big int" that we need to select the random ASCII
@@ -77,16 +81,24 @@ func CreateSecret(clientset kubernetes.Interface, db, secretName, username, pass
// ASCII characters suitable for a password
func GeneratePassword(length int) (string, error) {
password := make([]byte, length)
+ i := 0
- for i := 0; i < length; i++ {
- char, err := rand.Int(rand.Reader, passwordCharSelector)
-
+ for i < length {
+ val, err := rand.Int(rand.Reader, passwordCharSelector)
// if there is an error generating the random integer, return
if err != nil {
return "", err
}
- password[i] = byte(passwordCharLower + char.Int64())
+ char := byte(passwordCharLower + val.Int64())
+
+ // if the character is in the exclusion list, continue
+ if idx := strings.IndexAny(string(char), passwordCharExclude); idx > -1 {
+ continue
+ }
+
+ password[i] = char
+ i++
}
return string(password), nil
diff --git a/internal/util/secrets_test.go b/internal/util/secrets_test.go
index 89cbcebac9..423beb5e03 100644
--- a/internal/util/secrets_test.go
+++ b/internal/util/secrets_test.go
@@ -23,7 +23,7 @@ import (
func TestGeneratePassword(t *testing.T) {
// different lengths
- for _, length := range []int{1, 2, 3, 5, 20} {
+ for _, length := range []int{1, 2, 3, 5, 20, 200} {
password, err := GeneratePassword(length)
if err != nil {
t.Fatalf("expected no error, got %v", err)
@@ -31,9 +31,12 @@ func TestGeneratePassword(t *testing.T) {
if expected, actual := length, len(password); expected != actual {
t.Fatalf("expected length %v, got %v", expected, actual)
}
- if i := strings.IndexFunc(password, unicode.IsPrint); i > 0 {
+ if i := strings.IndexFunc(password, func(r rune) bool { return !unicode.IsPrint(r) }); i > -1 {
t.Fatalf("expected only printable characters, got %q in %q", password[i], password)
}
+ if i := strings.IndexAny(password, passwordCharExclude); i > -1 {
+ t.Fatalf("expected no exclude characters, got %q in %q", password[i], password)
+ }
}
// random contents
@@ -44,9 +47,12 @@ func TestGeneratePassword(t *testing.T) {
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
- if i := strings.IndexFunc(password, unicode.IsPrint); i > 0 {
+ if i := strings.IndexFunc(password, func(r rune) bool { return !unicode.IsPrint(r) }); i > -1 {
t.Fatalf("expected only printable characters, got %q in %q", password[i], password)
}
+ if i := strings.IndexAny(password, passwordCharExclude); i > -1 {
+ t.Fatalf("expected no exclude characters, got %q in %q", password[i], password)
+ }
for i := range previous {
if password == previous[i] {
From eec75dc05fc7dc203c0a9976baeda163e1728b50 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Tue, 29 Dec 2020 09:59:45 -0500
Subject: [PATCH 50/77] Ensure sync replication ConfigMap is deleted on delete
The deletion task was not checking for the existence of this
ConfigMap on delete, and as such it was being missed.
---
pgo-rmdata/rmdata/process.go | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/pgo-rmdata/rmdata/process.go b/pgo-rmdata/rmdata/process.go
index 66b2111a48..9e0f7a65cc 100644
--- a/pgo-rmdata/rmdata/process.go
+++ b/pgo-rmdata/rmdata/process.go
@@ -23,7 +23,6 @@ import (
"github.com/crunchydata/postgres-operator/internal/config"
"github.com/crunchydata/postgres-operator/internal/kubeapi"
- "github.com/crunchydata/postgres-operator/internal/util"
crv1 "github.com/crunchydata/postgres-operator/pkg/apis/crunchydata.com/v1"
log "github.com/sirupsen/logrus"
@@ -47,6 +46,7 @@ const (
configConfigMapSuffix = "config"
leaderConfigMapSuffix = "leader"
failoverConfigMapSuffix = "failover"
+ syncConfigMapSuffix = "sync"
)
func Delete(request Request) {
@@ -232,6 +232,8 @@ func removeClusterConfigmaps(request Request) {
// next, the name of the general configuration settings configmap, which is
// "`clusterName`-config"
fmt.Sprintf("%s-%s", request.ClusterName, configConfigMapSuffix),
+ // next, if there is a synchronous replication configmap, clean that up
+ fmt.Sprintf("%s-%s", request.ClusterName, syncConfigMapSuffix),
// finally, the name of the failover configmap, which is
// "`clusterName`-failover"
fmt.Sprintf("%s-%s", request.ClusterName, failoverConfigMapSuffix),
From 28d159a0f555e28471d0c4311f2b26f1753a3f79 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sat, 2 Jan 2021 11:58:10 -0500
Subject: [PATCH 51/77] Happy New Year!
Good riddance 2020, hello 2021.
---
LICENSE.md | 2 +-
apiserver.go | 2 +-
bin/get-deps.sh | 2 +-
bin/pgo-backrest-repo-sync/pgo-backrest-repo-sync.sh | 2 +-
bin/pgo-backrest-repo/pgo-backrest-repo.sh | 2 +-
bin/pgo-backrest-restore/pgo-backrest-restore.sh | 2 +-
bin/pgo-backrest/pgo-backrest.sh | 2 +-
bin/pgo-event/pgo-event.sh | 2 +-
bin/pgo-load/start.sh | 2 +-
bin/pgo-rmdata/start.sh | 2 +-
bin/pgo-scheduler/start.sh | 2 +-
bin/pgo-sqlrunner/start.sh | 2 +-
bin/pre-pull-crunchy-containers.sh | 2 +-
bin/pull-from-gcr.sh | 2 +-
bin/push-ccp-to-gcr.sh | 2 +-
bin/push-to-gcr.sh | 2 +-
bin/uid_daemon.sh | 2 +-
bin/upgrade-secret.sh | 2 +-
deploy/add-targeted-namespace-reconcile-rbac.sh | 2 +-
deploy/add-targeted-namespace.sh | 2 +-
deploy/cleannamespaces.sh | 2 +-
deploy/cleanup-rbac.sh | 2 +-
deploy/cleanup.sh | 2 +-
deploy/deploy.sh | 2 +-
deploy/gen-api-keys.sh | 2 +-
deploy/install-bootstrap-creds.sh | 2 +-
deploy/install-rbac.sh | 2 +-
deploy/remove-crd.sh | 2 +-
deploy/setupnamespaces.sh | 2 +-
deploy/show-crd.sh | 2 +-
deploy/upgrade-creds.sh | 2 +-
deploy/upgrade-pgo.sh | 2 +-
examples/create-by-resource/run.sh | 2 +-
examples/custom-config/create.sh | 2 +-
examples/custom-config/setup.sql | 2 +-
hack/boilerplate.go.txt | 2 +-
hack/config_sync.sh | 2 +-
hack/update-codegen.sh | 2 +-
hack/verify-codegen.sh | 2 +-
.../roles/pgo-operator/templates/add-targeted-namespace.sh.j2 | 2 +-
installers/image/bin/pgo-deploy.sh | 2 +-
installers/kubectl/client-setup.sh | 2 +-
internal/apiserver/backrestservice/backrestimpl.go | 2 +-
internal/apiserver/backrestservice/backrestservice.go | 2 +-
internal/apiserver/backupoptions/backupoptionsutil.go | 2 +-
internal/apiserver/backupoptions/pgbackrestoptions.go | 2 +-
internal/apiserver/backupoptions/pgdumpoptions.go | 2 +-
internal/apiserver/catservice/catimpl.go | 2 +-
internal/apiserver/catservice/catservice.go | 2 +-
internal/apiserver/cloneservice/cloneimpl.go | 2 +-
internal/apiserver/cloneservice/cloneservice.go | 2 +-
internal/apiserver/clusterservice/clusterimpl.go | 2 +-
internal/apiserver/clusterservice/clusterservice.go | 2 +-
internal/apiserver/clusterservice/scaleimpl.go | 2 +-
internal/apiserver/clusterservice/scaleservice.go | 2 +-
internal/apiserver/common.go | 2 +-
internal/apiserver/common_test.go | 2 +-
internal/apiserver/configservice/configimpl.go | 2 +-
internal/apiserver/configservice/configservice.go | 2 +-
internal/apiserver/dfservice/dfimpl.go | 2 +-
internal/apiserver/dfservice/dfservice.go | 2 +-
internal/apiserver/failoverservice/failoverimpl.go | 2 +-
internal/apiserver/failoverservice/failoverservice.go | 2 +-
internal/apiserver/labelservice/labelimpl.go | 2 +-
internal/apiserver/labelservice/labelservice.go | 2 +-
internal/apiserver/loadservice/loadconfig.go | 2 +-
internal/apiserver/loadservice/loadimpl.go | 2 +-
internal/apiserver/loadservice/loadservice.go | 2 +-
internal/apiserver/middleware.go | 2 +-
internal/apiserver/namespaceservice/namespaceimpl.go | 2 +-
internal/apiserver/namespaceservice/namespaceservice.go | 2 +-
internal/apiserver/perms.go | 2 +-
internal/apiserver/pgadminservice/pgadminimpl.go | 2 +-
internal/apiserver/pgadminservice/pgadminservice.go | 2 +-
internal/apiserver/pgbouncerservice/pgbouncerimpl.go | 2 +-
internal/apiserver/pgbouncerservice/pgbouncerservice.go | 2 +-
internal/apiserver/pgdumpservice/pgdumpimpl.go | 2 +-
internal/apiserver/pgdumpservice/pgdumpservice.go | 2 +-
internal/apiserver/pgoroleservice/pgoroleimpl.go | 2 +-
internal/apiserver/pgoroleservice/pgoroleservice.go | 2 +-
internal/apiserver/pgouserservice/pgouserimpl.go | 2 +-
internal/apiserver/pgouserservice/pgouserservice.go | 2 +-
internal/apiserver/policyservice/policyimpl.go | 2 +-
internal/apiserver/policyservice/policyservice.go | 2 +-
internal/apiserver/pvcservice/pvcimpl.go | 2 +-
internal/apiserver/pvcservice/pvcservice.go | 2 +-
internal/apiserver/reloadservice/reloadimpl.go | 2 +-
internal/apiserver/reloadservice/reloadservice.go | 2 +-
internal/apiserver/restartservice/restartimpl.go | 2 +-
internal/apiserver/restartservice/restartservice.go | 2 +-
internal/apiserver/root.go | 2 +-
internal/apiserver/routing/doc.go | 2 +-
internal/apiserver/routing/routes.go | 2 +-
internal/apiserver/scheduleservice/scheduleimpl.go | 2 +-
internal/apiserver/scheduleservice/scheduleservice.go | 2 +-
internal/apiserver/statusservice/statusimpl.go | 2 +-
internal/apiserver/statusservice/statusservice.go | 2 +-
internal/apiserver/upgradeservice/upgradeimpl.go | 2 +-
internal/apiserver/upgradeservice/upgradeservice.go | 2 +-
internal/apiserver/userservice/userimpl.go | 2 +-
internal/apiserver/userservice/userimpl_test.go | 2 +-
internal/apiserver/userservice/userservice.go | 2 +-
internal/apiserver/versionservice/versionimpl.go | 2 +-
internal/apiserver/versionservice/versionservice.go | 2 +-
internal/apiserver/workflowservice/workflowimpl.go | 2 +-
internal/apiserver/workflowservice/workflowservice.go | 2 +-
internal/config/annotations.go | 2 +-
internal/config/defaults.go | 2 +-
internal/config/images.go | 2 +-
internal/config/labels.go | 2 +-
internal/config/pgoconfig.go | 2 +-
internal/config/volumes.go | 2 +-
internal/controller/configmap/configmapcontroller.go | 2 +-
internal/controller/configmap/synchandler.go | 2 +-
internal/controller/controllerutil.go | 2 +-
internal/controller/job/backresthandler.go | 2 +-
internal/controller/job/bootstraphandler.go | 2 +-
internal/controller/job/jobcontroller.go | 2 +-
internal/controller/job/jobevents.go | 2 +-
internal/controller/job/jobutil.go | 2 +-
internal/controller/job/loadhandler.go | 2 +-
internal/controller/job/pgdumphandler.go | 2 +-
internal/controller/job/reposynchandler.go | 2 +-
internal/controller/job/rmdatahandler.go | 2 +-
internal/controller/manager/controllermanager.go | 2 +-
internal/controller/manager/rbac.go | 2 +-
internal/controller/namespace/namespacecontroller.go | 2 +-
internal/controller/pgcluster/pgclustercontroller.go | 2 +-
internal/controller/pgpolicy/pgpolicycontroller.go | 2 +-
internal/controller/pgreplica/pgreplicacontroller.go | 2 +-
internal/controller/pgtask/pgtaskcontroller.go | 2 +-
internal/controller/pod/inithandler.go | 2 +-
internal/controller/pod/podcontroller.go | 2 +-
internal/controller/pod/podevents.go | 2 +-
internal/controller/pod/promotionhandler.go | 2 +-
internal/kubeapi/client_config.go | 2 +-
internal/kubeapi/deployment.go | 2 +-
internal/kubeapi/endpoints.go | 2 +-
internal/kubeapi/errors.go | 2 +-
internal/kubeapi/exec.go | 2 +-
internal/kubeapi/pgcluster.go | 2 +-
internal/kubeapi/pgpolicy.go | 2 +-
internal/kubeapi/pgreplica.go | 2 +-
internal/kubeapi/pgtask.go | 2 +-
internal/kubeapi/pod.go | 2 +-
internal/kubeapi/pointer.go | 2 +-
internal/logging/loglib.go | 2 +-
internal/ns/nslogic.go | 2 +-
internal/operator/backrest/backup.go | 2 +-
internal/operator/backrest/repo.go | 2 +-
internal/operator/backrest/restore.go | 2 +-
internal/operator/backrest/stanza.go | 2 +-
internal/operator/cluster/clone.go | 2 +-
internal/operator/cluster/cluster.go | 2 +-
internal/operator/cluster/clusterlogic.go | 2 +-
internal/operator/cluster/failover.go | 2 +-
internal/operator/cluster/failoverlogic.go | 2 +-
internal/operator/cluster/pgadmin.go | 2 +-
internal/operator/cluster/pgbouncer.go | 2 +-
internal/operator/cluster/pgbouncer_test.go | 2 +-
internal/operator/cluster/rmdata.go | 2 +-
internal/operator/cluster/service.go | 2 +-
internal/operator/cluster/standby.go | 2 +-
internal/operator/cluster/upgrade.go | 2 +-
internal/operator/clusterutilities.go | 2 +-
internal/operator/clusterutilities_test.go | 2 +-
internal/operator/common.go | 2 +-
internal/operator/config/configutil.go | 2 +-
internal/operator/config/dcs.go | 2 +-
internal/operator/config/localdb.go | 2 +-
internal/operator/operatorupgrade/version-check.go | 2 +-
internal/operator/pgdump/dump.go | 2 +-
internal/operator/pgdump/restore.go | 2 +-
internal/operator/pvc/pvc.go | 2 +-
internal/operator/storage.go | 2 +-
internal/operator/storage_test.go | 2 +-
internal/operator/task/applypolicies.go | 2 +-
internal/operator/task/rmbackups.go | 2 +-
internal/operator/task/rmdata.go | 2 +-
internal/operator/task/workflow.go | 2 +-
internal/operator/wal.go | 2 +-
internal/patroni/doc.go | 2 +-
internal/patroni/patroni.go | 2 +-
internal/pgadmin/backoff.go | 2 +-
internal/pgadmin/backoff_test.go | 2 +-
internal/pgadmin/crypto.go | 2 +-
internal/pgadmin/crypto_test.go | 2 +-
internal/pgadmin/doc.go | 2 +-
internal/pgadmin/hash.go | 2 +-
internal/pgadmin/logic.go | 2 +-
internal/pgadmin/runner.go | 2 +-
internal/pgadmin/server.go | 2 +-
internal/postgres/doc.go | 2 +-
internal/postgres/password/doc.go | 2 +-
internal/postgres/password/md5.go | 2 +-
internal/postgres/password/md5_test.go | 2 +-
internal/postgres/password/password.go | 2 +-
internal/postgres/password/password_test.go | 2 +-
internal/postgres/password/scram.go | 2 +-
internal/postgres/password/scram_test.go | 2 +-
internal/tlsutil/primitives.go | 2 +-
internal/tlsutil/primitives_test.go | 2 +-
internal/util/backrest.go | 2 +-
internal/util/clone.go | 2 +-
internal/util/cluster.go | 2 +-
internal/util/failover.go | 2 +-
internal/util/pgbouncer.go | 2 +-
internal/util/policy.go | 2 +-
internal/util/secrets.go | 2 +-
internal/util/secrets_test.go | 2 +-
internal/util/ssh.go | 2 +-
internal/util/util.go | 2 +-
pgo-backrest/pgo-backrest.go | 2 +-
pgo-rmdata/pgo-rmdata.go | 2 +-
pgo-rmdata/rmdata/process.go | 2 +-
pgo-rmdata/rmdata/types.go | 2 +-
pgo-scheduler/pgo-scheduler.go | 2 +-
pgo-scheduler/scheduler/configmapcontroller.go | 2 +-
pgo-scheduler/scheduler/controllermanager.go | 2 +-
pgo-scheduler/scheduler/pgbackrest.go | 2 +-
pgo-scheduler/scheduler/policy.go | 2 +-
pgo-scheduler/scheduler/scheduler.go | 2 +-
pgo-scheduler/scheduler/tasks.go | 2 +-
pgo-scheduler/scheduler/types.go | 2 +-
pgo-scheduler/scheduler/validate.go | 2 +-
pgo-scheduler/scheduler/validate_test.go | 2 +-
pgo/api/backrest.go | 2 +-
pgo/api/cat.go | 2 +-
pgo/api/clone.go | 2 +-
pgo/api/cluster.go | 2 +-
pgo/api/common.go | 2 +-
pgo/api/config.go | 2 +-
pgo/api/df.go | 2 +-
pgo/api/failover.go | 2 +-
pgo/api/label.go | 2 +-
pgo/api/load.go | 2 +-
pgo/api/namespace.go | 2 +-
pgo/api/pgadmin.go | 2 +-
pgo/api/pgbouncer.go | 2 +-
pgo/api/pgdump.go | 2 +-
pgo/api/pgorole.go | 2 +-
pgo/api/pgouser.go | 2 +-
pgo/api/policy.go | 2 +-
pgo/api/pvc.go | 2 +-
pgo/api/reload.go | 2 +-
pgo/api/restart.go | 2 +-
pgo/api/restore.go | 2 +-
pgo/api/restoreDump.go | 2 +-
pgo/api/scale.go | 2 +-
pgo/api/scaledown.go | 2 +-
pgo/api/schedule.go | 2 +-
pgo/api/status.go | 2 +-
pgo/api/test.go | 2 +-
pgo/api/upgrade.go | 2 +-
pgo/api/user.go | 2 +-
pgo/api/version.go | 2 +-
pgo/api/workflow.go | 2 +-
pgo/cmd/auth.go | 2 +-
pgo/cmd/backrest.go | 2 +-
pgo/cmd/backup.go | 2 +-
pgo/cmd/cat.go | 2 +-
pgo/cmd/clone.go | 2 +-
pgo/cmd/cluster.go | 2 +-
pgo/cmd/common.go | 2 +-
pgo/cmd/config.go | 2 +-
pgo/cmd/create.go | 2 +-
pgo/cmd/delete.go | 2 +-
pgo/cmd/df.go | 2 +-
pgo/cmd/failover.go | 2 +-
pgo/cmd/flags.go | 2 +-
pgo/cmd/label.go | 2 +-
pgo/cmd/load.go | 2 +-
pgo/cmd/namespace.go | 2 +-
pgo/cmd/pgadmin.go | 2 +-
pgo/cmd/pgbouncer.go | 2 +-
pgo/cmd/pgdump.go | 2 +-
pgo/cmd/pgorole.go | 2 +-
pgo/cmd/pgouser.go | 2 +-
pgo/cmd/policy.go | 2 +-
pgo/cmd/pvc.go | 2 +-
pgo/cmd/reload.go | 2 +-
pgo/cmd/restart.go | 2 +-
pgo/cmd/restore.go | 2 +-
pgo/cmd/root.go | 2 +-
pgo/cmd/scale.go | 2 +-
pgo/cmd/scaledown.go | 2 +-
pgo/cmd/schedule.go | 2 +-
pgo/cmd/show.go | 2 +-
pgo/cmd/status.go | 2 +-
pgo/cmd/test.go | 2 +-
pgo/cmd/update.go | 2 +-
pgo/cmd/upgrade.go | 2 +-
pgo/cmd/user.go | 2 +-
pgo/cmd/version.go | 2 +-
pgo/cmd/watch.go | 2 +-
pgo/cmd/workflow.go | 2 +-
pgo/generatedocs.go | 2 +-
pgo/pgo.go | 2 +-
pgo/util/confirmation.go | 2 +-
pgo/util/pad.go | 2 +-
pgo/util/validation.go | 2 +-
pkg/apis/crunchydata.com/v1/cluster.go | 2 +-
pkg/apis/crunchydata.com/v1/common.go | 2 +-
pkg/apis/crunchydata.com/v1/common_test.go | 2 +-
pkg/apis/crunchydata.com/v1/doc.go | 2 +-
pkg/apis/crunchydata.com/v1/policy.go | 2 +-
pkg/apis/crunchydata.com/v1/register.go | 2 +-
pkg/apis/crunchydata.com/v1/replica.go | 2 +-
pkg/apis/crunchydata.com/v1/task.go | 2 +-
pkg/apis/crunchydata.com/v1/zz_generated.deepcopy.go | 2 +-
pkg/apiservermsgs/backrestmsgs.go | 2 +-
pkg/apiservermsgs/catmsgs.go | 2 +-
pkg/apiservermsgs/clonemsgs.go | 2 +-
pkg/apiservermsgs/clustermsgs.go | 2 +-
pkg/apiservermsgs/common.go | 2 +-
pkg/apiservermsgs/configmsgs.go | 2 +-
pkg/apiservermsgs/dfmsgs.go | 2 +-
pkg/apiservermsgs/failovermsgs.go | 2 +-
pkg/apiservermsgs/labelmsgs.go | 2 +-
pkg/apiservermsgs/loadmsgs.go | 2 +-
pkg/apiservermsgs/namespacemsgs.go | 2 +-
pkg/apiservermsgs/pgadminmsgs.go | 2 +-
pkg/apiservermsgs/pgbouncermsgs.go | 2 +-
pkg/apiservermsgs/pgdumpmsgs.go | 2 +-
pkg/apiservermsgs/pgorolemsgs.go | 2 +-
pkg/apiservermsgs/pgousermsgs.go | 2 +-
pkg/apiservermsgs/policymsgs.go | 2 +-
pkg/apiservermsgs/pvcmsgs.go | 2 +-
pkg/apiservermsgs/reloadmsgs.go | 2 +-
pkg/apiservermsgs/restartmsgs.go | 2 +-
pkg/apiservermsgs/schedulemsgs.go | 2 +-
pkg/apiservermsgs/statusmsgs.go | 2 +-
pkg/apiservermsgs/upgrademsgs.go | 2 +-
pkg/apiservermsgs/usermsgs.go | 2 +-
pkg/apiservermsgs/usermsgs_test.go | 2 +-
pkg/apiservermsgs/versionmsgs.go | 2 +-
pkg/apiservermsgs/watchmsgs.go | 2 +-
pkg/apiservermsgs/workflowmsgs.go | 2 +-
pkg/events/eventing.go | 2 +-
pkg/events/eventtype.go | 2 +-
pkg/events/pgoeventtype.go | 2 +-
pkg/generated/clientset/versioned/clientset.go | 2 +-
pkg/generated/clientset/versioned/doc.go | 2 +-
pkg/generated/clientset/versioned/fake/clientset_generated.go | 2 +-
pkg/generated/clientset/versioned/fake/doc.go | 2 +-
pkg/generated/clientset/versioned/fake/register.go | 2 +-
pkg/generated/clientset/versioned/scheme/doc.go | 2 +-
pkg/generated/clientset/versioned/scheme/register.go | 2 +-
.../typed/crunchydata.com/v1/crunchydata.com_client.go | 2 +-
.../clientset/versioned/typed/crunchydata.com/v1/doc.go | 2 +-
.../clientset/versioned/typed/crunchydata.com/v1/fake/doc.go | 2 +-
.../crunchydata.com/v1/fake/fake_crunchydata.com_client.go | 2 +-
.../versioned/typed/crunchydata.com/v1/fake/fake_pgcluster.go | 2 +-
.../versioned/typed/crunchydata.com/v1/fake/fake_pgpolicy.go | 2 +-
.../versioned/typed/crunchydata.com/v1/fake/fake_pgreplica.go | 2 +-
.../versioned/typed/crunchydata.com/v1/fake/fake_pgtask.go | 2 +-
.../versioned/typed/crunchydata.com/v1/generated_expansion.go | 2 +-
.../clientset/versioned/typed/crunchydata.com/v1/pgcluster.go | 2 +-
.../clientset/versioned/typed/crunchydata.com/v1/pgpolicy.go | 2 +-
.../clientset/versioned/typed/crunchydata.com/v1/pgreplica.go | 2 +-
.../clientset/versioned/typed/crunchydata.com/v1/pgtask.go | 2 +-
.../informers/externalversions/crunchydata.com/interface.go | 2 +-
.../informers/externalversions/crunchydata.com/v1/interface.go | 2 +-
.../informers/externalversions/crunchydata.com/v1/pgcluster.go | 2 +-
.../informers/externalversions/crunchydata.com/v1/pgpolicy.go | 2 +-
.../informers/externalversions/crunchydata.com/v1/pgreplica.go | 2 +-
.../informers/externalversions/crunchydata.com/v1/pgtask.go | 2 +-
pkg/generated/informers/externalversions/factory.go | 2 +-
pkg/generated/informers/externalversions/generic.go | 2 +-
.../externalversions/internalinterfaces/factory_interfaces.go | 2 +-
pkg/generated/listers/crunchydata.com/v1/expansion_generated.go | 2 +-
pkg/generated/listers/crunchydata.com/v1/pgcluster.go | 2 +-
pkg/generated/listers/crunchydata.com/v1/pgpolicy.go | 2 +-
pkg/generated/listers/crunchydata.com/v1/pgreplica.go | 2 +-
pkg/generated/listers/crunchydata.com/v1/pgtask.go | 2 +-
postgres-operator.go | 2 +-
pv/create-pv-nfs-label.sh | 2 +-
pv/create-pv-nfs-legacy.sh | 2 +-
pv/create-pv-nfs.sh | 2 +-
pv/create-pv.sh | 2 +-
pv/delete-pv.sh | 2 +-
testing/pgo_cli/cluster_backup_test.go | 2 +-
testing/pgo_cli/cluster_cat_test.go | 2 +-
testing/pgo_cli/cluster_clone_test.go | 2 +-
testing/pgo_cli/cluster_create_test.go | 2 +-
testing/pgo_cli/cluster_delete_test.go | 2 +-
testing/pgo_cli/cluster_df_test.go | 2 +-
testing/pgo_cli/cluster_failover_test.go | 2 +-
testing/pgo_cli/cluster_label_test.go | 2 +-
testing/pgo_cli/cluster_pgbouncer_test.go | 2 +-
testing/pgo_cli/cluster_policy_test.go | 2 +-
testing/pgo_cli/cluster_pvc_test.go | 2 +-
testing/pgo_cli/cluster_reload_test.go | 2 +-
testing/pgo_cli/cluster_restart_test.go | 2 +-
testing/pgo_cli/cluster_scale_test.go | 2 +-
testing/pgo_cli/cluster_scaledown_test.go | 2 +-
testing/pgo_cli/cluster_test_test.go | 2 +-
testing/pgo_cli/cluster_user_test.go | 2 +-
testing/pgo_cli/operator_namespace_test.go | 2 +-
testing/pgo_cli/operator_rbac_test.go | 2 +-
testing/pgo_cli/operator_test.go | 2 +-
testing/pgo_cli/suite_helpers_test.go | 2 +-
testing/pgo_cli/suite_pgo_cmd_test.go | 2 +-
testing/pgo_cli/suite_test.go | 2 +-
404 files changed, 404 insertions(+), 404 deletions(-)
diff --git a/LICENSE.md b/LICENSE.md
index 90fe0562e2..f8ebe3dacd 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -176,7 +176,7 @@
END OF TERMS AND CONDITIONS
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/apiserver.go b/apiserver.go
index 2c3858bb63..3df9608796 100644
--- a/apiserver.go
+++ b/apiserver.go
@@ -1,7 +1,7 @@
package main
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/bin/get-deps.sh b/bin/get-deps.sh
index 8816aa3635..28bc5d4937 100755
--- a/bin/get-deps.sh
+++ b/bin/get-deps.sh
@@ -1,6 +1,6 @@
#!/bin/bash -e
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-backrest-repo-sync/pgo-backrest-repo-sync.sh b/bin/pgo-backrest-repo-sync/pgo-backrest-repo-sync.sh
index 53e98e3a2e..f4bf1f1709 100644
--- a/bin/pgo-backrest-repo-sync/pgo-backrest-repo-sync.sh
+++ b/bin/pgo-backrest-repo-sync/pgo-backrest-repo-sync.sh
@@ -1,6 +1,6 @@
#!/bin/bash -x
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-backrest-repo/pgo-backrest-repo.sh b/bin/pgo-backrest-repo/pgo-backrest-repo.sh
index 25fdec5f69..925e5808a3 100755
--- a/bin/pgo-backrest-repo/pgo-backrest-repo.sh
+++ b/bin/pgo-backrest-repo/pgo-backrest-repo.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-backrest-restore/pgo-backrest-restore.sh b/bin/pgo-backrest-restore/pgo-backrest-restore.sh
index 89f3888fff..a0373b7a96 100755
--- a/bin/pgo-backrest-restore/pgo-backrest-restore.sh
+++ b/bin/pgo-backrest-restore/pgo-backrest-restore.sh
@@ -1,6 +1,6 @@
#!/bin/bash -x
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-backrest/pgo-backrest.sh b/bin/pgo-backrest/pgo-backrest.sh
index fda20af57c..86f758a50a 100755
--- a/bin/pgo-backrest/pgo-backrest.sh
+++ b/bin/pgo-backrest/pgo-backrest.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-event/pgo-event.sh b/bin/pgo-event/pgo-event.sh
index cddcb2e708..1602e56193 100755
--- a/bin/pgo-event/pgo-event.sh
+++ b/bin/pgo-event/pgo-event.sh
@@ -1,6 +1,6 @@
#!/bin/bash -x
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-load/start.sh b/bin/pgo-load/start.sh
index 894c65a11c..34a2d4d0e1 100755
--- a/bin/pgo-load/start.sh
+++ b/bin/pgo-load/start.sh
@@ -1,6 +1,6 @@
#!/bin/bash -x
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-rmdata/start.sh b/bin/pgo-rmdata/start.sh
index 95a4903289..228f891694 100755
--- a/bin/pgo-rmdata/start.sh
+++ b/bin/pgo-rmdata/start.sh
@@ -1,6 +1,6 @@
#!/bin/bash -x
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-scheduler/start.sh b/bin/pgo-scheduler/start.sh
index 4a32cf8bc3..4549d82d57 100755
--- a/bin/pgo-scheduler/start.sh
+++ b/bin/pgo-scheduler/start.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pgo-sqlrunner/start.sh b/bin/pgo-sqlrunner/start.sh
index 0b2eb6d417..01422d26d7 100755
--- a/bin/pgo-sqlrunner/start.sh
+++ b/bin/pgo-sqlrunner/start.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pre-pull-crunchy-containers.sh b/bin/pre-pull-crunchy-containers.sh
index c45c4bfb8f..de30d03554 100755
--- a/bin/pre-pull-crunchy-containers.sh
+++ b/bin/pre-pull-crunchy-containers.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/pull-from-gcr.sh b/bin/pull-from-gcr.sh
index 6c2c511aa8..49c611d059 100755
--- a/bin/pull-from-gcr.sh
+++ b/bin/pull-from-gcr.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/push-ccp-to-gcr.sh b/bin/push-ccp-to-gcr.sh
index 68ccd9c3cd..f8b08b88db 100755
--- a/bin/push-ccp-to-gcr.sh
+++ b/bin/push-ccp-to-gcr.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/push-to-gcr.sh b/bin/push-to-gcr.sh
index 3ccc0518e2..809d997ef0 100755
--- a/bin/push-to-gcr.sh
+++ b/bin/push-to-gcr.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/uid_daemon.sh b/bin/uid_daemon.sh
index 83d8aca5e2..bc988bae79 100755
--- a/bin/uid_daemon.sh
+++ b/bin/uid_daemon.sh
@@ -1,6 +1,6 @@
#!/usr/bin/bash
-# Copyright 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/bin/upgrade-secret.sh b/bin/upgrade-secret.sh
index ee93af1377..f852008890 100755
--- a/bin/upgrade-secret.sh
+++ b/bin/upgrade-secret.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/add-targeted-namespace-reconcile-rbac.sh b/deploy/add-targeted-namespace-reconcile-rbac.sh
index d76c25ecdc..2bf780816a 100755
--- a/deploy/add-targeted-namespace-reconcile-rbac.sh
+++ b/deploy/add-targeted-namespace-reconcile-rbac.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/add-targeted-namespace.sh b/deploy/add-targeted-namespace.sh
index b274f6fe7d..c11eb092a8 100755
--- a/deploy/add-targeted-namespace.sh
+++ b/deploy/add-targeted-namespace.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/cleannamespaces.sh b/deploy/cleannamespaces.sh
index 66cd693863..169bae6853 100755
--- a/deploy/cleannamespaces.sh
+++ b/deploy/cleannamespaces.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/cleanup-rbac.sh b/deploy/cleanup-rbac.sh
index 50f52bbc5f..df60c14500 100755
--- a/deploy/cleanup-rbac.sh
+++ b/deploy/cleanup-rbac.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/cleanup.sh b/deploy/cleanup.sh
index afe13f98c7..711e276823 100755
--- a/deploy/cleanup.sh
+++ b/deploy/cleanup.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/deploy.sh b/deploy/deploy.sh
index 7d4c3fd997..add3c0d46c 100755
--- a/deploy/deploy.sh
+++ b/deploy/deploy.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/gen-api-keys.sh b/deploy/gen-api-keys.sh
index 8aece10000..a5444a9020 100755
--- a/deploy/gen-api-keys.sh
+++ b/deploy/gen-api-keys.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/install-bootstrap-creds.sh b/deploy/install-bootstrap-creds.sh
index 1b446824d3..e25253104c 100755
--- a/deploy/install-bootstrap-creds.sh
+++ b/deploy/install-bootstrap-creds.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/install-rbac.sh b/deploy/install-rbac.sh
index 9e8cb6d11c..83b4ab833f 100755
--- a/deploy/install-rbac.sh
+++ b/deploy/install-rbac.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/remove-crd.sh b/deploy/remove-crd.sh
index f4c422cdb6..0fa326e7bb 100755
--- a/deploy/remove-crd.sh
+++ b/deploy/remove-crd.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/setupnamespaces.sh b/deploy/setupnamespaces.sh
index 9d2188a56f..08aade3518 100755
--- a/deploy/setupnamespaces.sh
+++ b/deploy/setupnamespaces.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/show-crd.sh b/deploy/show-crd.sh
index 7f40285c5d..091c2b6810 100755
--- a/deploy/show-crd.sh
+++ b/deploy/show-crd.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/upgrade-creds.sh b/deploy/upgrade-creds.sh
index eff0cc9700..08e429cbc4 100755
--- a/deploy/upgrade-creds.sh
+++ b/deploy/upgrade-creds.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/deploy/upgrade-pgo.sh b/deploy/upgrade-pgo.sh
index 66f61639eb..0999cd9b79 100755
--- a/deploy/upgrade-pgo.sh
+++ b/deploy/upgrade-pgo.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/examples/create-by-resource/run.sh b/examples/create-by-resource/run.sh
index 12a0b757cf..f5e0cd5d58 100755
--- a/examples/create-by-resource/run.sh
+++ b/examples/create-by-resource/run.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/examples/custom-config/create.sh b/examples/custom-config/create.sh
index df6c701f2a..5900132568 100755
--- a/examples/custom-config/create.sh
+++ b/examples/custom-config/create.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/examples/custom-config/setup.sql b/examples/custom-config/setup.sql
index 206005eb8a..1a05bce487 100644
--- a/examples/custom-config/setup.sql
+++ b/examples/custom-config/setup.sql
@@ -1,5 +1,5 @@
/*
- * Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ * Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/hack/boilerplate.go.txt b/hack/boilerplate.go.txt
index 8aabc9a12b..e681957476 100644
--- a/hack/boilerplate.go.txt
+++ b/hack/boilerplate.go.txt
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/hack/config_sync.sh b/hack/config_sync.sh
index 14f7e9c811..06f8ec1498 100755
--- a/hack/config_sync.sh
+++ b/hack/config_sync.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh
index c9795398ae..97fb0aa383 100755
--- a/hack/update-codegen.sh
+++ b/hack/update-codegen.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/hack/verify-codegen.sh b/hack/verify-codegen.sh
index c096654ca9..27eccb0eb1 100755
--- a/hack/verify-codegen.sh
+++ b/hack/verify-codegen.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/installers/ansible/roles/pgo-operator/templates/add-targeted-namespace.sh.j2 b/installers/ansible/roles/pgo-operator/templates/add-targeted-namespace.sh.j2
index 380a8a80b7..ec5e9e82d6 100644
--- a/installers/ansible/roles/pgo-operator/templates/add-targeted-namespace.sh.j2
+++ b/installers/ansible/roles/pgo-operator/templates/add-targeted-namespace.sh.j2
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/installers/image/bin/pgo-deploy.sh b/installers/image/bin/pgo-deploy.sh
index 76a02c6646..c6490a05d7 100755
--- a/installers/image/bin/pgo-deploy.sh
+++ b/installers/image/bin/pgo-deploy.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/installers/kubectl/client-setup.sh b/installers/kubectl/client-setup.sh
index 1fd3c85c31..b4f9e4bdb9 100755
--- a/installers/kubectl/client-setup.sh
+++ b/installers/kubectl/client-setup.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2020 Crunchy Data Solutions, Inc.
+# Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/internal/apiserver/backrestservice/backrestimpl.go b/internal/apiserver/backrestservice/backrestimpl.go
index e19389016e..00280732cc 100644
--- a/internal/apiserver/backrestservice/backrestimpl.go
+++ b/internal/apiserver/backrestservice/backrestimpl.go
@@ -1,7 +1,7 @@
package backrestservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/backrestservice/backrestservice.go b/internal/apiserver/backrestservice/backrestservice.go
index e436afb878..00f4aba481 100644
--- a/internal/apiserver/backrestservice/backrestservice.go
+++ b/internal/apiserver/backrestservice/backrestservice.go
@@ -1,7 +1,7 @@
package backrestservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/backupoptions/backupoptionsutil.go b/internal/apiserver/backupoptions/backupoptionsutil.go
index 196d0f1fa1..c1c3c69f1b 100644
--- a/internal/apiserver/backupoptions/backupoptionsutil.go
+++ b/internal/apiserver/backupoptions/backupoptionsutil.go
@@ -1,7 +1,7 @@
package backupoptions
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/backupoptions/pgbackrestoptions.go b/internal/apiserver/backupoptions/pgbackrestoptions.go
index 2c7a1e356e..ea932de517 100644
--- a/internal/apiserver/backupoptions/pgbackrestoptions.go
+++ b/internal/apiserver/backupoptions/pgbackrestoptions.go
@@ -1,7 +1,7 @@
package backupoptions
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/backupoptions/pgdumpoptions.go b/internal/apiserver/backupoptions/pgdumpoptions.go
index 268aa42412..bfbae16c23 100644
--- a/internal/apiserver/backupoptions/pgdumpoptions.go
+++ b/internal/apiserver/backupoptions/pgdumpoptions.go
@@ -1,7 +1,7 @@
package backupoptions
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/catservice/catimpl.go b/internal/apiserver/catservice/catimpl.go
index b01bc4b618..ddd6a58b12 100644
--- a/internal/apiserver/catservice/catimpl.go
+++ b/internal/apiserver/catservice/catimpl.go
@@ -1,7 +1,7 @@
package catservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/catservice/catservice.go b/internal/apiserver/catservice/catservice.go
index 439274271e..9c34db38db 100644
--- a/internal/apiserver/catservice/catservice.go
+++ b/internal/apiserver/catservice/catservice.go
@@ -1,7 +1,7 @@
package catservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/cloneservice/cloneimpl.go b/internal/apiserver/cloneservice/cloneimpl.go
index b095f45289..5361300233 100644
--- a/internal/apiserver/cloneservice/cloneimpl.go
+++ b/internal/apiserver/cloneservice/cloneimpl.go
@@ -1,7 +1,7 @@
package cloneservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/cloneservice/cloneservice.go b/internal/apiserver/cloneservice/cloneservice.go
index f98a5f439d..7bf035e94f 100644
--- a/internal/apiserver/cloneservice/cloneservice.go
+++ b/internal/apiserver/cloneservice/cloneservice.go
@@ -1,7 +1,7 @@
package cloneservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/clusterservice/clusterimpl.go b/internal/apiserver/clusterservice/clusterimpl.go
index 00f4abf430..6ff04384fa 100644
--- a/internal/apiserver/clusterservice/clusterimpl.go
+++ b/internal/apiserver/clusterservice/clusterimpl.go
@@ -1,7 +1,7 @@
package clusterservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/clusterservice/clusterservice.go b/internal/apiserver/clusterservice/clusterservice.go
index d0f31df636..eac046a580 100644
--- a/internal/apiserver/clusterservice/clusterservice.go
+++ b/internal/apiserver/clusterservice/clusterservice.go
@@ -1,7 +1,7 @@
package clusterservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/clusterservice/scaleimpl.go b/internal/apiserver/clusterservice/scaleimpl.go
index 802cc61c18..2d108d17ba 100644
--- a/internal/apiserver/clusterservice/scaleimpl.go
+++ b/internal/apiserver/clusterservice/scaleimpl.go
@@ -1,7 +1,7 @@
package clusterservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/clusterservice/scaleservice.go b/internal/apiserver/clusterservice/scaleservice.go
index 92db853216..bb742691e7 100644
--- a/internal/apiserver/clusterservice/scaleservice.go
+++ b/internal/apiserver/clusterservice/scaleservice.go
@@ -1,7 +1,7 @@
package clusterservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/common.go b/internal/apiserver/common.go
index e1a0e0260f..fcc8e3c545 100644
--- a/internal/apiserver/common.go
+++ b/internal/apiserver/common.go
@@ -1,7 +1,7 @@
package apiserver
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/common_test.go b/internal/apiserver/common_test.go
index da909d2ba6..6ec95b7066 100644
--- a/internal/apiserver/common_test.go
+++ b/internal/apiserver/common_test.go
@@ -1,7 +1,7 @@
package apiserver
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/configservice/configimpl.go b/internal/apiserver/configservice/configimpl.go
index 76d891d5ed..dc7ec2274c 100644
--- a/internal/apiserver/configservice/configimpl.go
+++ b/internal/apiserver/configservice/configimpl.go
@@ -1,7 +1,7 @@
package configservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/configservice/configservice.go b/internal/apiserver/configservice/configservice.go
index 1f70934888..92a296ac3f 100644
--- a/internal/apiserver/configservice/configservice.go
+++ b/internal/apiserver/configservice/configservice.go
@@ -1,7 +1,7 @@
package configservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/dfservice/dfimpl.go b/internal/apiserver/dfservice/dfimpl.go
index 1d18742f29..b3f4ed7c3b 100644
--- a/internal/apiserver/dfservice/dfimpl.go
+++ b/internal/apiserver/dfservice/dfimpl.go
@@ -1,7 +1,7 @@
package dfservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/dfservice/dfservice.go b/internal/apiserver/dfservice/dfservice.go
index 325e20257a..3a71e9feab 100644
--- a/internal/apiserver/dfservice/dfservice.go
+++ b/internal/apiserver/dfservice/dfservice.go
@@ -1,7 +1,7 @@
package dfservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/failoverservice/failoverimpl.go b/internal/apiserver/failoverservice/failoverimpl.go
index c347a024d9..afec8cabf1 100644
--- a/internal/apiserver/failoverservice/failoverimpl.go
+++ b/internal/apiserver/failoverservice/failoverimpl.go
@@ -1,7 +1,7 @@
package failoverservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/failoverservice/failoverservice.go b/internal/apiserver/failoverservice/failoverservice.go
index 164d7b1545..e80d7e05de 100644
--- a/internal/apiserver/failoverservice/failoverservice.go
+++ b/internal/apiserver/failoverservice/failoverservice.go
@@ -1,7 +1,7 @@
package failoverservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/labelservice/labelimpl.go b/internal/apiserver/labelservice/labelimpl.go
index 672757a1cd..47282ca487 100644
--- a/internal/apiserver/labelservice/labelimpl.go
+++ b/internal/apiserver/labelservice/labelimpl.go
@@ -1,7 +1,7 @@
package labelservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/labelservice/labelservice.go b/internal/apiserver/labelservice/labelservice.go
index f13054fd17..5921a7633b 100644
--- a/internal/apiserver/labelservice/labelservice.go
+++ b/internal/apiserver/labelservice/labelservice.go
@@ -1,7 +1,7 @@
package labelservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/loadservice/loadconfig.go b/internal/apiserver/loadservice/loadconfig.go
index c5351796d7..e5de7df536 100644
--- a/internal/apiserver/loadservice/loadconfig.go
+++ b/internal/apiserver/loadservice/loadconfig.go
@@ -1,7 +1,7 @@
package loadservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/loadservice/loadimpl.go b/internal/apiserver/loadservice/loadimpl.go
index 0cdf723bd9..20b4632d9d 100644
--- a/internal/apiserver/loadservice/loadimpl.go
+++ b/internal/apiserver/loadservice/loadimpl.go
@@ -1,7 +1,7 @@
package loadservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/loadservice/loadservice.go b/internal/apiserver/loadservice/loadservice.go
index 068821ea87..036dd5c66c 100644
--- a/internal/apiserver/loadservice/loadservice.go
+++ b/internal/apiserver/loadservice/loadservice.go
@@ -1,7 +1,7 @@
package loadservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/middleware.go b/internal/apiserver/middleware.go
index fc7e60e8e2..58a1fcd77d 100644
--- a/internal/apiserver/middleware.go
+++ b/internal/apiserver/middleware.go
@@ -1,7 +1,7 @@
package apiserver
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/namespaceservice/namespaceimpl.go b/internal/apiserver/namespaceservice/namespaceimpl.go
index 04b6671f26..281bb5d085 100644
--- a/internal/apiserver/namespaceservice/namespaceimpl.go
+++ b/internal/apiserver/namespaceservice/namespaceimpl.go
@@ -1,7 +1,7 @@
package namespaceservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/namespaceservice/namespaceservice.go b/internal/apiserver/namespaceservice/namespaceservice.go
index 1e27294c96..1e348218fa 100644
--- a/internal/apiserver/namespaceservice/namespaceservice.go
+++ b/internal/apiserver/namespaceservice/namespaceservice.go
@@ -1,7 +1,7 @@
package namespaceservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/perms.go b/internal/apiserver/perms.go
index 74204dfc80..e702a5a9d8 100644
--- a/internal/apiserver/perms.go
+++ b/internal/apiserver/perms.go
@@ -1,7 +1,7 @@
package apiserver
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgadminservice/pgadminimpl.go b/internal/apiserver/pgadminservice/pgadminimpl.go
index a3c0712c68..8c31c7dd34 100644
--- a/internal/apiserver/pgadminservice/pgadminimpl.go
+++ b/internal/apiserver/pgadminservice/pgadminimpl.go
@@ -1,7 +1,7 @@
package pgadminservice
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgadminservice/pgadminservice.go b/internal/apiserver/pgadminservice/pgadminservice.go
index 90378868ca..44fe32f6b7 100644
--- a/internal/apiserver/pgadminservice/pgadminservice.go
+++ b/internal/apiserver/pgadminservice/pgadminservice.go
@@ -1,7 +1,7 @@
package pgadminservice
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgbouncerservice/pgbouncerimpl.go b/internal/apiserver/pgbouncerservice/pgbouncerimpl.go
index 8f0b17d370..5c3d00269b 100644
--- a/internal/apiserver/pgbouncerservice/pgbouncerimpl.go
+++ b/internal/apiserver/pgbouncerservice/pgbouncerimpl.go
@@ -1,7 +1,7 @@
package pgbouncerservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgbouncerservice/pgbouncerservice.go b/internal/apiserver/pgbouncerservice/pgbouncerservice.go
index 969aabd205..54fa6b3dae 100644
--- a/internal/apiserver/pgbouncerservice/pgbouncerservice.go
+++ b/internal/apiserver/pgbouncerservice/pgbouncerservice.go
@@ -1,7 +1,7 @@
package pgbouncerservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgdumpservice/pgdumpimpl.go b/internal/apiserver/pgdumpservice/pgdumpimpl.go
index 031c559cee..df4e5dcf92 100644
--- a/internal/apiserver/pgdumpservice/pgdumpimpl.go
+++ b/internal/apiserver/pgdumpservice/pgdumpimpl.go
@@ -1,7 +1,7 @@
package pgdumpservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgdumpservice/pgdumpservice.go b/internal/apiserver/pgdumpservice/pgdumpservice.go
index 755a9bbd98..a31a2a788a 100644
--- a/internal/apiserver/pgdumpservice/pgdumpservice.go
+++ b/internal/apiserver/pgdumpservice/pgdumpservice.go
@@ -1,7 +1,7 @@
package pgdumpservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgoroleservice/pgoroleimpl.go b/internal/apiserver/pgoroleservice/pgoroleimpl.go
index 633d0c3660..5d9e1c7c2c 100644
--- a/internal/apiserver/pgoroleservice/pgoroleimpl.go
+++ b/internal/apiserver/pgoroleservice/pgoroleimpl.go
@@ -1,7 +1,7 @@
package pgoroleservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgoroleservice/pgoroleservice.go b/internal/apiserver/pgoroleservice/pgoroleservice.go
index b3e3413e09..9b9c70b061 100644
--- a/internal/apiserver/pgoroleservice/pgoroleservice.go
+++ b/internal/apiserver/pgoroleservice/pgoroleservice.go
@@ -1,7 +1,7 @@
package pgoroleservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgouserservice/pgouserimpl.go b/internal/apiserver/pgouserservice/pgouserimpl.go
index 6e0c061467..f7627c47cf 100644
--- a/internal/apiserver/pgouserservice/pgouserimpl.go
+++ b/internal/apiserver/pgouserservice/pgouserimpl.go
@@ -1,7 +1,7 @@
package pgouserservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pgouserservice/pgouserservice.go b/internal/apiserver/pgouserservice/pgouserservice.go
index ccf1b1ce8f..1abaf309d6 100644
--- a/internal/apiserver/pgouserservice/pgouserservice.go
+++ b/internal/apiserver/pgouserservice/pgouserservice.go
@@ -1,7 +1,7 @@
package pgouserservice
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/policyservice/policyimpl.go b/internal/apiserver/policyservice/policyimpl.go
index b78e0aa34b..bed7e1e5ee 100644
--- a/internal/apiserver/policyservice/policyimpl.go
+++ b/internal/apiserver/policyservice/policyimpl.go
@@ -1,7 +1,7 @@
package policyservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/policyservice/policyservice.go b/internal/apiserver/policyservice/policyservice.go
index 35917a64c9..897d2dbff0 100644
--- a/internal/apiserver/policyservice/policyservice.go
+++ b/internal/apiserver/policyservice/policyservice.go
@@ -1,7 +1,7 @@
package policyservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pvcservice/pvcimpl.go b/internal/apiserver/pvcservice/pvcimpl.go
index 734c21fa4c..ca07a3e8d9 100644
--- a/internal/apiserver/pvcservice/pvcimpl.go
+++ b/internal/apiserver/pvcservice/pvcimpl.go
@@ -1,7 +1,7 @@
package pvcservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/pvcservice/pvcservice.go b/internal/apiserver/pvcservice/pvcservice.go
index a12979cb3c..de24ab7616 100644
--- a/internal/apiserver/pvcservice/pvcservice.go
+++ b/internal/apiserver/pvcservice/pvcservice.go
@@ -1,7 +1,7 @@
package pvcservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/reloadservice/reloadimpl.go b/internal/apiserver/reloadservice/reloadimpl.go
index 5268147602..2023feba21 100644
--- a/internal/apiserver/reloadservice/reloadimpl.go
+++ b/internal/apiserver/reloadservice/reloadimpl.go
@@ -1,7 +1,7 @@
package reloadservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/reloadservice/reloadservice.go b/internal/apiserver/reloadservice/reloadservice.go
index 9d1096c3c9..e464a7991e 100644
--- a/internal/apiserver/reloadservice/reloadservice.go
+++ b/internal/apiserver/reloadservice/reloadservice.go
@@ -1,7 +1,7 @@
package reloadservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/restartservice/restartimpl.go b/internal/apiserver/restartservice/restartimpl.go
index 9da501fc2b..7e67881c98 100644
--- a/internal/apiserver/restartservice/restartimpl.go
+++ b/internal/apiserver/restartservice/restartimpl.go
@@ -1,7 +1,7 @@
package restartservice
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/restartservice/restartservice.go b/internal/apiserver/restartservice/restartservice.go
index a1bfb97194..460635bec1 100644
--- a/internal/apiserver/restartservice/restartservice.go
+++ b/internal/apiserver/restartservice/restartservice.go
@@ -1,7 +1,7 @@
package restartservice
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/root.go b/internal/apiserver/root.go
index f9dfec42dc..0b1e1004b1 100644
--- a/internal/apiserver/root.go
+++ b/internal/apiserver/root.go
@@ -1,7 +1,7 @@
package apiserver
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/routing/doc.go b/internal/apiserver/routing/doc.go
index e985fd4280..2807dfb978 100644
--- a/internal/apiserver/routing/doc.go
+++ b/internal/apiserver/routing/doc.go
@@ -1,5 +1,5 @@
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/routing/routes.go b/internal/apiserver/routing/routes.go
index c98848b6c9..9774eec41c 100644
--- a/internal/apiserver/routing/routes.go
+++ b/internal/apiserver/routing/routes.go
@@ -1,7 +1,7 @@
package routing
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/scheduleservice/scheduleimpl.go b/internal/apiserver/scheduleservice/scheduleimpl.go
index 92d0e1fd46..1fa60c974c 100644
--- a/internal/apiserver/scheduleservice/scheduleimpl.go
+++ b/internal/apiserver/scheduleservice/scheduleimpl.go
@@ -1,7 +1,7 @@
package scheduleservice
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/scheduleservice/scheduleservice.go b/internal/apiserver/scheduleservice/scheduleservice.go
index b88fa16d7e..52f00bbe14 100644
--- a/internal/apiserver/scheduleservice/scheduleservice.go
+++ b/internal/apiserver/scheduleservice/scheduleservice.go
@@ -1,7 +1,7 @@
package scheduleservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/statusservice/statusimpl.go b/internal/apiserver/statusservice/statusimpl.go
index 3dfdb40836..2e4f859b74 100644
--- a/internal/apiserver/statusservice/statusimpl.go
+++ b/internal/apiserver/statusservice/statusimpl.go
@@ -1,7 +1,7 @@
package statusservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/statusservice/statusservice.go b/internal/apiserver/statusservice/statusservice.go
index ecab0047c2..2dd232dc4c 100644
--- a/internal/apiserver/statusservice/statusservice.go
+++ b/internal/apiserver/statusservice/statusservice.go
@@ -1,7 +1,7 @@
package statusservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/upgradeservice/upgradeimpl.go b/internal/apiserver/upgradeservice/upgradeimpl.go
index 0389defcfb..d2cbd1f395 100644
--- a/internal/apiserver/upgradeservice/upgradeimpl.go
+++ b/internal/apiserver/upgradeservice/upgradeimpl.go
@@ -1,7 +1,7 @@
package upgradeservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/upgradeservice/upgradeservice.go b/internal/apiserver/upgradeservice/upgradeservice.go
index dee9c68dc2..7f6e1cd350 100644
--- a/internal/apiserver/upgradeservice/upgradeservice.go
+++ b/internal/apiserver/upgradeservice/upgradeservice.go
@@ -1,7 +1,7 @@
package upgradeservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/userservice/userimpl.go b/internal/apiserver/userservice/userimpl.go
index 77c89b78e8..b0d51253a4 100644
--- a/internal/apiserver/userservice/userimpl.go
+++ b/internal/apiserver/userservice/userimpl.go
@@ -1,7 +1,7 @@
package userservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/userservice/userimpl_test.go b/internal/apiserver/userservice/userimpl_test.go
index 71d3aa5fcf..ba6f378c0d 100644
--- a/internal/apiserver/userservice/userimpl_test.go
+++ b/internal/apiserver/userservice/userimpl_test.go
@@ -1,7 +1,7 @@
package userservice
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/userservice/userservice.go b/internal/apiserver/userservice/userservice.go
index 83994c90fa..709105daae 100644
--- a/internal/apiserver/userservice/userservice.go
+++ b/internal/apiserver/userservice/userservice.go
@@ -1,7 +1,7 @@
package userservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/versionservice/versionimpl.go b/internal/apiserver/versionservice/versionimpl.go
index d2341d4e93..959cfae669 100644
--- a/internal/apiserver/versionservice/versionimpl.go
+++ b/internal/apiserver/versionservice/versionimpl.go
@@ -1,7 +1,7 @@
package versionservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/versionservice/versionservice.go b/internal/apiserver/versionservice/versionservice.go
index 49735dff1a..5affd301dd 100644
--- a/internal/apiserver/versionservice/versionservice.go
+++ b/internal/apiserver/versionservice/versionservice.go
@@ -1,7 +1,7 @@
package versionservice
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/workflowservice/workflowimpl.go b/internal/apiserver/workflowservice/workflowimpl.go
index 2c588183af..8af15d5a86 100644
--- a/internal/apiserver/workflowservice/workflowimpl.go
+++ b/internal/apiserver/workflowservice/workflowimpl.go
@@ -1,7 +1,7 @@
package workflowservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/apiserver/workflowservice/workflowservice.go b/internal/apiserver/workflowservice/workflowservice.go
index 81aea9ff98..168937d31d 100644
--- a/internal/apiserver/workflowservice/workflowservice.go
+++ b/internal/apiserver/workflowservice/workflowservice.go
@@ -1,7 +1,7 @@
package workflowservice
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/config/annotations.go b/internal/config/annotations.go
index ddaa58d4cc..05bea9deac 100644
--- a/internal/config/annotations.go
+++ b/internal/config/annotations.go
@@ -1,7 +1,7 @@
package config
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/config/defaults.go b/internal/config/defaults.go
index 21e0dc417f..ba7648c667 100644
--- a/internal/config/defaults.go
+++ b/internal/config/defaults.go
@@ -1,7 +1,7 @@
package config
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/config/images.go b/internal/config/images.go
index 12405034b1..f09b4784f7 100644
--- a/internal/config/images.go
+++ b/internal/config/images.go
@@ -1,7 +1,7 @@
package config
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/config/labels.go b/internal/config/labels.go
index f2128e207b..f2351ddc7e 100644
--- a/internal/config/labels.go
+++ b/internal/config/labels.go
@@ -1,7 +1,7 @@
package config
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/config/pgoconfig.go b/internal/config/pgoconfig.go
index 833adfc280..04a0e33282 100644
--- a/internal/config/pgoconfig.go
+++ b/internal/config/pgoconfig.go
@@ -1,7 +1,7 @@
package config
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/config/volumes.go b/internal/config/volumes.go
index d21c2d6a4e..4738d682c1 100644
--- a/internal/config/volumes.go
+++ b/internal/config/volumes.go
@@ -1,7 +1,7 @@
package config
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/configmap/configmapcontroller.go b/internal/controller/configmap/configmapcontroller.go
index e07068bfc2..e19744b614 100644
--- a/internal/controller/configmap/configmapcontroller.go
+++ b/internal/controller/configmap/configmapcontroller.go
@@ -1,7 +1,7 @@
package configmap
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/configmap/synchandler.go b/internal/controller/configmap/synchandler.go
index ff45f17048..eae945775c 100644
--- a/internal/controller/configmap/synchandler.go
+++ b/internal/controller/configmap/synchandler.go
@@ -1,7 +1,7 @@
package configmap
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/controllerutil.go b/internal/controller/controllerutil.go
index ce0df82510..31f956b3e7 100644
--- a/internal/controller/controllerutil.go
+++ b/internal/controller/controllerutil.go
@@ -1,7 +1,7 @@
package controller
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/backresthandler.go b/internal/controller/job/backresthandler.go
index 1c1cf51802..173de9b734 100644
--- a/internal/controller/job/backresthandler.go
+++ b/internal/controller/job/backresthandler.go
@@ -1,7 +1,7 @@
package job
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/bootstraphandler.go b/internal/controller/job/bootstraphandler.go
index 222fcba5fc..35af805f2c 100644
--- a/internal/controller/job/bootstraphandler.go
+++ b/internal/controller/job/bootstraphandler.go
@@ -1,7 +1,7 @@
package job
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/jobcontroller.go b/internal/controller/job/jobcontroller.go
index 2e2dffcb6b..4684f2c066 100644
--- a/internal/controller/job/jobcontroller.go
+++ b/internal/controller/job/jobcontroller.go
@@ -1,7 +1,7 @@
package job
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/jobevents.go b/internal/controller/job/jobevents.go
index ef4f1a1760..05e1d0d0fe 100644
--- a/internal/controller/job/jobevents.go
+++ b/internal/controller/job/jobevents.go
@@ -1,7 +1,7 @@
package job
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/jobutil.go b/internal/controller/job/jobutil.go
index 78d6bb6e34..e7a3113469 100644
--- a/internal/controller/job/jobutil.go
+++ b/internal/controller/job/jobutil.go
@@ -1,7 +1,7 @@
package job
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/loadhandler.go b/internal/controller/job/loadhandler.go
index d83a643c4a..47183ee240 100644
--- a/internal/controller/job/loadhandler.go
+++ b/internal/controller/job/loadhandler.go
@@ -6,7 +6,7 @@ import (
)
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/pgdumphandler.go b/internal/controller/job/pgdumphandler.go
index 9025426491..c723cf407f 100644
--- a/internal/controller/job/pgdumphandler.go
+++ b/internal/controller/job/pgdumphandler.go
@@ -1,7 +1,7 @@
package job
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/reposynchandler.go b/internal/controller/job/reposynchandler.go
index dbf56f89a1..cc885f1733 100644
--- a/internal/controller/job/reposynchandler.go
+++ b/internal/controller/job/reposynchandler.go
@@ -1,7 +1,7 @@
package job
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/job/rmdatahandler.go b/internal/controller/job/rmdatahandler.go
index bfc7874a11..6187d015e1 100644
--- a/internal/controller/job/rmdatahandler.go
+++ b/internal/controller/job/rmdatahandler.go
@@ -1,7 +1,7 @@
package job
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/manager/controllermanager.go b/internal/controller/manager/controllermanager.go
index 5991c3ccd7..e1822bbbaa 100644
--- a/internal/controller/manager/controllermanager.go
+++ b/internal/controller/manager/controllermanager.go
@@ -1,7 +1,7 @@
package manager
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/manager/rbac.go b/internal/controller/manager/rbac.go
index 4e960e1cd5..d7865722a5 100644
--- a/internal/controller/manager/rbac.go
+++ b/internal/controller/manager/rbac.go
@@ -1,7 +1,7 @@
package manager
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/namespace/namespacecontroller.go b/internal/controller/namespace/namespacecontroller.go
index 6fc85f644f..20db2e9534 100644
--- a/internal/controller/namespace/namespacecontroller.go
+++ b/internal/controller/namespace/namespacecontroller.go
@@ -1,7 +1,7 @@
package namespace
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/pgcluster/pgclustercontroller.go b/internal/controller/pgcluster/pgclustercontroller.go
index 018cb3cf75..56d059e334 100644
--- a/internal/controller/pgcluster/pgclustercontroller.go
+++ b/internal/controller/pgcluster/pgclustercontroller.go
@@ -1,7 +1,7 @@
package pgcluster
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/pgpolicy/pgpolicycontroller.go b/internal/controller/pgpolicy/pgpolicycontroller.go
index ba699c579c..a6ee5c7f29 100644
--- a/internal/controller/pgpolicy/pgpolicycontroller.go
+++ b/internal/controller/pgpolicy/pgpolicycontroller.go
@@ -1,7 +1,7 @@
package pgpolicy
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/pgreplica/pgreplicacontroller.go b/internal/controller/pgreplica/pgreplicacontroller.go
index 43ae0878fe..7325d714b0 100644
--- a/internal/controller/pgreplica/pgreplicacontroller.go
+++ b/internal/controller/pgreplica/pgreplicacontroller.go
@@ -1,7 +1,7 @@
package pgreplica
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/pgtask/pgtaskcontroller.go b/internal/controller/pgtask/pgtaskcontroller.go
index 979cc64f75..ceca886899 100644
--- a/internal/controller/pgtask/pgtaskcontroller.go
+++ b/internal/controller/pgtask/pgtaskcontroller.go
@@ -1,7 +1,7 @@
package pgtask
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/pod/inithandler.go b/internal/controller/pod/inithandler.go
index 5335653bce..802e1fae3f 100644
--- a/internal/controller/pod/inithandler.go
+++ b/internal/controller/pod/inithandler.go
@@ -1,7 +1,7 @@
package pod
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/pod/podcontroller.go b/internal/controller/pod/podcontroller.go
index 0ae1342188..92cf7ae085 100644
--- a/internal/controller/pod/podcontroller.go
+++ b/internal/controller/pod/podcontroller.go
@@ -1,7 +1,7 @@
package pod
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/pod/podevents.go b/internal/controller/pod/podevents.go
index dc0b53766b..7aa3c8da3a 100644
--- a/internal/controller/pod/podevents.go
+++ b/internal/controller/pod/podevents.go
@@ -1,7 +1,7 @@
package pod
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/controller/pod/promotionhandler.go b/internal/controller/pod/promotionhandler.go
index 9083eb52f6..fd3feea7c5 100644
--- a/internal/controller/pod/promotionhandler.go
+++ b/internal/controller/pod/promotionhandler.go
@@ -1,7 +1,7 @@
package pod
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/client_config.go b/internal/kubeapi/client_config.go
index 64a544c3bc..f91a8cfb1f 100644
--- a/internal/kubeapi/client_config.go
+++ b/internal/kubeapi/client_config.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/deployment.go b/internal/kubeapi/deployment.go
index ec13795e09..5e9a665480 100644
--- a/internal/kubeapi/deployment.go
+++ b/internal/kubeapi/deployment.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/endpoints.go b/internal/kubeapi/endpoints.go
index b4cd8ece62..d655ba1484 100644
--- a/internal/kubeapi/endpoints.go
+++ b/internal/kubeapi/endpoints.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/errors.go b/internal/kubeapi/errors.go
index 829ca9f097..ab5e9c07aa 100644
--- a/internal/kubeapi/errors.go
+++ b/internal/kubeapi/errors.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/exec.go b/internal/kubeapi/exec.go
index b2e994d84d..c154ba1fa3 100644
--- a/internal/kubeapi/exec.go
+++ b/internal/kubeapi/exec.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/pgcluster.go b/internal/kubeapi/pgcluster.go
index 983138fdd4..5d554ed747 100644
--- a/internal/kubeapi/pgcluster.go
+++ b/internal/kubeapi/pgcluster.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/pgpolicy.go b/internal/kubeapi/pgpolicy.go
index 5d9bc30029..f2d92c679d 100644
--- a/internal/kubeapi/pgpolicy.go
+++ b/internal/kubeapi/pgpolicy.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/pgreplica.go b/internal/kubeapi/pgreplica.go
index 62095f4f78..c4e4c6c474 100644
--- a/internal/kubeapi/pgreplica.go
+++ b/internal/kubeapi/pgreplica.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/pgtask.go b/internal/kubeapi/pgtask.go
index d5468495fa..7e06f91028 100644
--- a/internal/kubeapi/pgtask.go
+++ b/internal/kubeapi/pgtask.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/pod.go b/internal/kubeapi/pod.go
index 1dc5539089..bedae52adf 100644
--- a/internal/kubeapi/pod.go
+++ b/internal/kubeapi/pod.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/kubeapi/pointer.go b/internal/kubeapi/pointer.go
index 21109e61f1..dbf5d6db27 100644
--- a/internal/kubeapi/pointer.go
+++ b/internal/kubeapi/pointer.go
@@ -1,7 +1,7 @@
package kubeapi
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/logging/loglib.go b/internal/logging/loglib.go
index b443e47b4d..6205760a4e 100644
--- a/internal/logging/loglib.go
+++ b/internal/logging/loglib.go
@@ -2,7 +2,7 @@
package logging
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/ns/nslogic.go b/internal/ns/nslogic.go
index e579b6d47b..b9bb8da878 100644
--- a/internal/ns/nslogic.go
+++ b/internal/ns/nslogic.go
@@ -1,7 +1,7 @@
package ns
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/backrest/backup.go b/internal/operator/backrest/backup.go
index 006ee81d03..e4cc827fad 100644
--- a/internal/operator/backrest/backup.go
+++ b/internal/operator/backrest/backup.go
@@ -1,7 +1,7 @@
package backrest
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/backrest/repo.go b/internal/operator/backrest/repo.go
index 8893d2e416..8e003f020c 100644
--- a/internal/operator/backrest/repo.go
+++ b/internal/operator/backrest/repo.go
@@ -1,7 +1,7 @@
package backrest
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/backrest/restore.go b/internal/operator/backrest/restore.go
index 882a249e26..9318e7bb98 100644
--- a/internal/operator/backrest/restore.go
+++ b/internal/operator/backrest/restore.go
@@ -1,7 +1,7 @@
package backrest
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/backrest/stanza.go b/internal/operator/backrest/stanza.go
index 1ec57f0ee5..de770b84cd 100644
--- a/internal/operator/backrest/stanza.go
+++ b/internal/operator/backrest/stanza.go
@@ -1,7 +1,7 @@
package backrest
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/clone.go b/internal/operator/cluster/clone.go
index 7014c26b86..fd98071eb9 100644
--- a/internal/operator/cluster/clone.go
+++ b/internal/operator/cluster/clone.go
@@ -1,7 +1,7 @@
package cluster
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/cluster.go b/internal/operator/cluster/cluster.go
index 6249ad7337..f283f6b4ad 100644
--- a/internal/operator/cluster/cluster.go
+++ b/internal/operator/cluster/cluster.go
@@ -4,7 +4,7 @@
package cluster
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/clusterlogic.go b/internal/operator/cluster/clusterlogic.go
index c28942863a..9fb6320436 100644
--- a/internal/operator/cluster/clusterlogic.go
+++ b/internal/operator/cluster/clusterlogic.go
@@ -4,7 +4,7 @@
package cluster
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/failover.go b/internal/operator/cluster/failover.go
index f3dfc17a2b..cb77f66bd3 100644
--- a/internal/operator/cluster/failover.go
+++ b/internal/operator/cluster/failover.go
@@ -4,7 +4,7 @@
package cluster
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/failoverlogic.go b/internal/operator/cluster/failoverlogic.go
index a25c90802c..97a65e9665 100644
--- a/internal/operator/cluster/failoverlogic.go
+++ b/internal/operator/cluster/failoverlogic.go
@@ -4,7 +4,7 @@
package cluster
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/pgadmin.go b/internal/operator/cluster/pgadmin.go
index 7356c73ded..31a421dbb8 100644
--- a/internal/operator/cluster/pgadmin.go
+++ b/internal/operator/cluster/pgadmin.go
@@ -1,7 +1,7 @@
package cluster
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/pgbouncer.go b/internal/operator/cluster/pgbouncer.go
index 74b0d0d437..bde5efc7ce 100644
--- a/internal/operator/cluster/pgbouncer.go
+++ b/internal/operator/cluster/pgbouncer.go
@@ -1,7 +1,7 @@
package cluster
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/pgbouncer_test.go b/internal/operator/cluster/pgbouncer_test.go
index 06ff30d8b6..2407da50a0 100644
--- a/internal/operator/cluster/pgbouncer_test.go
+++ b/internal/operator/cluster/pgbouncer_test.go
@@ -1,7 +1,7 @@
package cluster
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/rmdata.go b/internal/operator/cluster/rmdata.go
index b25d260ca4..bf0a8ce365 100644
--- a/internal/operator/cluster/rmdata.go
+++ b/internal/operator/cluster/rmdata.go
@@ -4,7 +4,7 @@
package cluster
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/service.go b/internal/operator/cluster/service.go
index 2812a88389..f192be92cf 100644
--- a/internal/operator/cluster/service.go
+++ b/internal/operator/cluster/service.go
@@ -4,7 +4,7 @@
package cluster
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/standby.go b/internal/operator/cluster/standby.go
index 224431df40..0515cdafef 100644
--- a/internal/operator/cluster/standby.go
+++ b/internal/operator/cluster/standby.go
@@ -1,7 +1,7 @@
package cluster
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/cluster/upgrade.go b/internal/operator/cluster/upgrade.go
index fad958ea4e..991e02c5ed 100644
--- a/internal/operator/cluster/upgrade.go
+++ b/internal/operator/cluster/upgrade.go
@@ -1,7 +1,7 @@
package cluster
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/clusterutilities.go b/internal/operator/clusterutilities.go
index b606f10465..df2160013f 100644
--- a/internal/operator/clusterutilities.go
+++ b/internal/operator/clusterutilities.go
@@ -1,7 +1,7 @@
package operator
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/clusterutilities_test.go b/internal/operator/clusterutilities_test.go
index 499719343e..2b9bf8e427 100644
--- a/internal/operator/clusterutilities_test.go
+++ b/internal/operator/clusterutilities_test.go
@@ -1,7 +1,7 @@
package operator
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/common.go b/internal/operator/common.go
index 2d4360deb7..03d69d5329 100644
--- a/internal/operator/common.go
+++ b/internal/operator/common.go
@@ -1,7 +1,7 @@
package operator
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/config/configutil.go b/internal/operator/config/configutil.go
index af6bc62f35..0b4d594f27 100644
--- a/internal/operator/config/configutil.go
+++ b/internal/operator/config/configutil.go
@@ -1,7 +1,7 @@
package config
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/config/dcs.go b/internal/operator/config/dcs.go
index 7b5c721c5f..99c383d904 100644
--- a/internal/operator/config/dcs.go
+++ b/internal/operator/config/dcs.go
@@ -1,7 +1,7 @@
package config
/*
- Copyright 2020 Crunchy Data Solutions, Ind.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Ind.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/config/localdb.go b/internal/operator/config/localdb.go
index f1c837169c..8c6391ee4b 100644
--- a/internal/operator/config/localdb.go
+++ b/internal/operator/config/localdb.go
@@ -1,7 +1,7 @@
package config
/*
- Copyright 2020 Crunchy Data Solutions, Inl.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inl.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/operatorupgrade/version-check.go b/internal/operator/operatorupgrade/version-check.go
index 034999469c..2bcb53491f 100644
--- a/internal/operator/operatorupgrade/version-check.go
+++ b/internal/operator/operatorupgrade/version-check.go
@@ -1,7 +1,7 @@
package operatorupgrade
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/pgdump/dump.go b/internal/operator/pgdump/dump.go
index 8aa2ae1094..b25327e4d9 100644
--- a/internal/operator/pgdump/dump.go
+++ b/internal/operator/pgdump/dump.go
@@ -1,7 +1,7 @@
package pgdump
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/pgdump/restore.go b/internal/operator/pgdump/restore.go
index 93b362b1d2..897ae5c931 100644
--- a/internal/operator/pgdump/restore.go
+++ b/internal/operator/pgdump/restore.go
@@ -1,7 +1,7 @@
package pgdump
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/pvc/pvc.go b/internal/operator/pvc/pvc.go
index 0c37e8d27c..b557514511 100644
--- a/internal/operator/pvc/pvc.go
+++ b/internal/operator/pvc/pvc.go
@@ -1,7 +1,7 @@
package pvc
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/storage.go b/internal/operator/storage.go
index da06087deb..2b1e3053b4 100644
--- a/internal/operator/storage.go
+++ b/internal/operator/storage.go
@@ -1,7 +1,7 @@
package operator
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/storage_test.go b/internal/operator/storage_test.go
index 280b1c6cd0..dacaaf78d3 100644
--- a/internal/operator/storage_test.go
+++ b/internal/operator/storage_test.go
@@ -1,7 +1,7 @@
package operator
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/task/applypolicies.go b/internal/operator/task/applypolicies.go
index 550e681b9c..086bdbe740 100644
--- a/internal/operator/task/applypolicies.go
+++ b/internal/operator/task/applypolicies.go
@@ -1,7 +1,7 @@
package task
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/task/rmbackups.go b/internal/operator/task/rmbackups.go
index 928a8cb977..8c9744181c 100644
--- a/internal/operator/task/rmbackups.go
+++ b/internal/operator/task/rmbackups.go
@@ -1,7 +1,7 @@
package task
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/task/rmdata.go b/internal/operator/task/rmdata.go
index 875abef328..9664dec8d5 100644
--- a/internal/operator/task/rmdata.go
+++ b/internal/operator/task/rmdata.go
@@ -1,7 +1,7 @@
package task
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/task/workflow.go b/internal/operator/task/workflow.go
index 1b5b51ad52..71b8808fe6 100644
--- a/internal/operator/task/workflow.go
+++ b/internal/operator/task/workflow.go
@@ -1,7 +1,7 @@
package task
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/operator/wal.go b/internal/operator/wal.go
index 1b679755fb..b9a14c3219 100644
--- a/internal/operator/wal.go
+++ b/internal/operator/wal.go
@@ -1,7 +1,7 @@
package operator
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/patroni/doc.go b/internal/patroni/doc.go
index 63a42c84d3..6311d1e653 100644
--- a/internal/patroni/doc.go
+++ b/internal/patroni/doc.go
@@ -4,7 +4,7 @@
package patroni
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/patroni/patroni.go b/internal/patroni/patroni.go
index e1bc58a01a..83d2772839 100644
--- a/internal/patroni/patroni.go
+++ b/internal/patroni/patroni.go
@@ -1,7 +1,7 @@
package patroni
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/backoff.go b/internal/pgadmin/backoff.go
index d1df68c80d..7fe83c72b6 100644
--- a/internal/pgadmin/backoff.go
+++ b/internal/pgadmin/backoff.go
@@ -1,7 +1,7 @@
package pgadmin
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/backoff_test.go b/internal/pgadmin/backoff_test.go
index aeae16f7a5..ec24f360fe 100644
--- a/internal/pgadmin/backoff_test.go
+++ b/internal/pgadmin/backoff_test.go
@@ -1,7 +1,7 @@
package pgadmin
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/crypto.go b/internal/pgadmin/crypto.go
index 55ebc8b771..e2db5beb5d 100644
--- a/internal/pgadmin/crypto.go
+++ b/internal/pgadmin/crypto.go
@@ -1,7 +1,7 @@
package pgadmin
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/crypto_test.go b/internal/pgadmin/crypto_test.go
index 36f8468379..8c78611501 100644
--- a/internal/pgadmin/crypto_test.go
+++ b/internal/pgadmin/crypto_test.go
@@ -1,7 +1,7 @@
package pgadmin
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/doc.go b/internal/pgadmin/doc.go
index 97900b0227..58bf983ab5 100644
--- a/internal/pgadmin/doc.go
+++ b/internal/pgadmin/doc.go
@@ -4,7 +4,7 @@ database which powers pgadmin */
package pgadmin
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/hash.go b/internal/pgadmin/hash.go
index b73222fb8b..64bc3df471 100644
--- a/internal/pgadmin/hash.go
+++ b/internal/pgadmin/hash.go
@@ -1,7 +1,7 @@
package pgadmin
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/logic.go b/internal/pgadmin/logic.go
index 2a3fdf0c30..5481f69dc6 100644
--- a/internal/pgadmin/logic.go
+++ b/internal/pgadmin/logic.go
@@ -1,7 +1,7 @@
package pgadmin
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/runner.go b/internal/pgadmin/runner.go
index 233dc092be..e4cb8a8ece 100644
--- a/internal/pgadmin/runner.go
+++ b/internal/pgadmin/runner.go
@@ -1,7 +1,7 @@
package pgadmin
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/pgadmin/server.go b/internal/pgadmin/server.go
index 26568e8806..b5ab3b6ef5 100644
--- a/internal/pgadmin/server.go
+++ b/internal/pgadmin/server.go
@@ -1,7 +1,7 @@
package pgadmin
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/postgres/doc.go b/internal/postgres/doc.go
index 974cb7c8df..2a2155a2cd 100644
--- a/internal/postgres/doc.go
+++ b/internal/postgres/doc.go
@@ -5,7 +5,7 @@
package postgres
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/postgres/password/doc.go b/internal/postgres/password/doc.go
index 6ea6563873..b0e22372f6 100644
--- a/internal/postgres/password/doc.go
+++ b/internal/postgres/password/doc.go
@@ -4,7 +4,7 @@
package password
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/postgres/password/md5.go b/internal/postgres/password/md5.go
index ae93d2cc56..7541d05a70 100644
--- a/internal/postgres/password/md5.go
+++ b/internal/postgres/password/md5.go
@@ -1,7 +1,7 @@
package password
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/postgres/password/md5_test.go b/internal/postgres/password/md5_test.go
index c77c8abf43..5f810d884d 100644
--- a/internal/postgres/password/md5_test.go
+++ b/internal/postgres/password/md5_test.go
@@ -1,7 +1,7 @@
package password
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/postgres/password/password.go b/internal/postgres/password/password.go
index b70112a4c3..c0ad603a14 100644
--- a/internal/postgres/password/password.go
+++ b/internal/postgres/password/password.go
@@ -1,7 +1,7 @@
package password
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/postgres/password/password_test.go b/internal/postgres/password/password_test.go
index b9b7094dbc..1cf7e6f09f 100644
--- a/internal/postgres/password/password_test.go
+++ b/internal/postgres/password/password_test.go
@@ -1,7 +1,7 @@
package password
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/postgres/password/scram.go b/internal/postgres/password/scram.go
index aa6eee3df8..a28b187b90 100644
--- a/internal/postgres/password/scram.go
+++ b/internal/postgres/password/scram.go
@@ -1,7 +1,7 @@
package password
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/postgres/password/scram_test.go b/internal/postgres/password/scram_test.go
index f7c74f8483..070c12e46f 100644
--- a/internal/postgres/password/scram_test.go
+++ b/internal/postgres/password/scram_test.go
@@ -1,7 +1,7 @@
package password
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/tlsutil/primitives.go b/internal/tlsutil/primitives.go
index 03fb73f744..a2c8da3187 100644
--- a/internal/tlsutil/primitives.go
+++ b/internal/tlsutil/primitives.go
@@ -1,7 +1,7 @@
package tlsutil
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/tlsutil/primitives_test.go b/internal/tlsutil/primitives_test.go
index 22676e9fbc..0805621f57 100644
--- a/internal/tlsutil/primitives_test.go
+++ b/internal/tlsutil/primitives_test.go
@@ -1,7 +1,7 @@
package tlsutil
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/backrest.go b/internal/util/backrest.go
index 66e3a2dec6..eae2e62bfb 100644
--- a/internal/util/backrest.go
+++ b/internal/util/backrest.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/clone.go b/internal/util/clone.go
index a1d563262c..e01e34e670 100644
--- a/internal/util/clone.go
+++ b/internal/util/clone.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/cluster.go b/internal/util/cluster.go
index 91c7cfec95..ed81d27cad 100644
--- a/internal/util/cluster.go
+++ b/internal/util/cluster.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/failover.go b/internal/util/failover.go
index 78f96a8664..98d34fea66 100644
--- a/internal/util/failover.go
+++ b/internal/util/failover.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/pgbouncer.go b/internal/util/pgbouncer.go
index a31ecd3a9c..96d6c23bb5 100644
--- a/internal/util/pgbouncer.go
+++ b/internal/util/pgbouncer.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/policy.go b/internal/util/policy.go
index 867c5706aa..633398a0a8 100644
--- a/internal/util/policy.go
+++ b/internal/util/policy.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/secrets.go b/internal/util/secrets.go
index ce7b69472f..43300706a1 100644
--- a/internal/util/secrets.go
+++ b/internal/util/secrets.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/secrets_test.go b/internal/util/secrets_test.go
index 423beb5e03..8dca7649bb 100644
--- a/internal/util/secrets_test.go
+++ b/internal/util/secrets_test.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/ssh.go b/internal/util/ssh.go
index aa886bbca7..e72eb77cdd 100644
--- a/internal/util/ssh.go
+++ b/internal/util/ssh.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/internal/util/util.go b/internal/util/util.go
index e25334d71f..db8bdb8852 100644
--- a/internal/util/util.go
+++ b/internal/util/util.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-backrest/pgo-backrest.go b/pgo-backrest/pgo-backrest.go
index aeb688be31..882def5a1e 100644
--- a/pgo-backrest/pgo-backrest.go
+++ b/pgo-backrest/pgo-backrest.go
@@ -1,7 +1,7 @@
package main
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-rmdata/pgo-rmdata.go b/pgo-rmdata/pgo-rmdata.go
index c8f70894bf..097cd7685d 100644
--- a/pgo-rmdata/pgo-rmdata.go
+++ b/pgo-rmdata/pgo-rmdata.go
@@ -1,7 +1,7 @@
package main
/*
-Copyright 2019 - 2020 Crunchy Data
+Copyright 2019 - 2021 Crunchy Data
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-rmdata/rmdata/process.go b/pgo-rmdata/rmdata/process.go
index 9e0f7a65cc..2848e82eab 100644
--- a/pgo-rmdata/rmdata/process.go
+++ b/pgo-rmdata/rmdata/process.go
@@ -1,7 +1,7 @@
package rmdata
/*
-Copyright 2019 - 2020 Crunchy Data
+Copyright 2019 - 2021 Crunchy Data
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-rmdata/rmdata/types.go b/pgo-rmdata/rmdata/types.go
index a7e0ea14de..39bbb147ae 100644
--- a/pgo-rmdata/rmdata/types.go
+++ b/pgo-rmdata/rmdata/types.go
@@ -1,7 +1,7 @@
package rmdata
/*
-Copyright 2019 - 2020 Crunchy Data
+Copyright 2019 - 2021 Crunchy Data
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/pgo-scheduler.go b/pgo-scheduler/pgo-scheduler.go
index 0a8162fb78..94552c4470 100644
--- a/pgo-scheduler/pgo-scheduler.go
+++ b/pgo-scheduler/pgo-scheduler.go
@@ -1,7 +1,7 @@
package main
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/configmapcontroller.go b/pgo-scheduler/scheduler/configmapcontroller.go
index f8e08dfa0c..0b20e2a9dc 100644
--- a/pgo-scheduler/scheduler/configmapcontroller.go
+++ b/pgo-scheduler/scheduler/configmapcontroller.go
@@ -1,7 +1,7 @@
package scheduler
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/controllermanager.go b/pgo-scheduler/scheduler/controllermanager.go
index f95ee67679..dabd98c468 100644
--- a/pgo-scheduler/scheduler/controllermanager.go
+++ b/pgo-scheduler/scheduler/controllermanager.go
@@ -1,7 +1,7 @@
package scheduler
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/pgbackrest.go b/pgo-scheduler/scheduler/pgbackrest.go
index 9b16865295..97d55672c6 100644
--- a/pgo-scheduler/scheduler/pgbackrest.go
+++ b/pgo-scheduler/scheduler/pgbackrest.go
@@ -1,7 +1,7 @@
package scheduler
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/policy.go b/pgo-scheduler/scheduler/policy.go
index dd53e5d3c9..f5e1409f23 100644
--- a/pgo-scheduler/scheduler/policy.go
+++ b/pgo-scheduler/scheduler/policy.go
@@ -1,7 +1,7 @@
package scheduler
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/scheduler.go b/pgo-scheduler/scheduler/scheduler.go
index f86299bbcc..e8043fada7 100644
--- a/pgo-scheduler/scheduler/scheduler.go
+++ b/pgo-scheduler/scheduler/scheduler.go
@@ -1,7 +1,7 @@
package scheduler
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/tasks.go b/pgo-scheduler/scheduler/tasks.go
index a2c715d3be..a8374bfbe7 100644
--- a/pgo-scheduler/scheduler/tasks.go
+++ b/pgo-scheduler/scheduler/tasks.go
@@ -1,7 +1,7 @@
package scheduler
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/types.go b/pgo-scheduler/scheduler/types.go
index 13f6feaaa9..e23a14e78d 100644
--- a/pgo-scheduler/scheduler/types.go
+++ b/pgo-scheduler/scheduler/types.go
@@ -1,7 +1,7 @@
package scheduler
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/validate.go b/pgo-scheduler/scheduler/validate.go
index 37c24dc7ab..29e923c716 100644
--- a/pgo-scheduler/scheduler/validate.go
+++ b/pgo-scheduler/scheduler/validate.go
@@ -1,7 +1,7 @@
package scheduler
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo-scheduler/scheduler/validate_test.go b/pgo-scheduler/scheduler/validate_test.go
index 6abe1a7396..9cc7b4864e 100644
--- a/pgo-scheduler/scheduler/validate_test.go
+++ b/pgo-scheduler/scheduler/validate_test.go
@@ -1,7 +1,7 @@
package scheduler
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/backrest.go b/pgo/api/backrest.go
index 13e2ff702b..08c74e1ac5 100644
--- a/pgo/api/backrest.go
+++ b/pgo/api/backrest.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/cat.go b/pgo/api/cat.go
index 00d17c7fb6..9e06936153 100644
--- a/pgo/api/cat.go
+++ b/pgo/api/cat.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/clone.go b/pgo/api/clone.go
index 2e7ebfccba..ae09c01553 100644
--- a/pgo/api/clone.go
+++ b/pgo/api/clone.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/cluster.go b/pgo/api/cluster.go
index 74407c0dbc..d3d543ba08 100644
--- a/pgo/api/cluster.go
+++ b/pgo/api/cluster.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/common.go b/pgo/api/common.go
index 6fcd876ebf..327bbce98e 100644
--- a/pgo/api/common.go
+++ b/pgo/api/common.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/config.go b/pgo/api/config.go
index 90848edcfd..c3c580cc4c 100644
--- a/pgo/api/config.go
+++ b/pgo/api/config.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/df.go b/pgo/api/df.go
index fa993051aa..6ed90c9643 100644
--- a/pgo/api/df.go
+++ b/pgo/api/df.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/failover.go b/pgo/api/failover.go
index 4ebbab9471..1ee9bf3694 100644
--- a/pgo/api/failover.go
+++ b/pgo/api/failover.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/label.go b/pgo/api/label.go
index e083f998a8..9ce0456812 100644
--- a/pgo/api/label.go
+++ b/pgo/api/label.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/load.go b/pgo/api/load.go
index 8d8f1a8bd8..4c7a373964 100644
--- a/pgo/api/load.go
+++ b/pgo/api/load.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/namespace.go b/pgo/api/namespace.go
index 96f10ba8d7..391fb75816 100644
--- a/pgo/api/namespace.go
+++ b/pgo/api/namespace.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/pgadmin.go b/pgo/api/pgadmin.go
index 0d410355cd..56858a6be4 100644
--- a/pgo/api/pgadmin.go
+++ b/pgo/api/pgadmin.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/pgbouncer.go b/pgo/api/pgbouncer.go
index efee86ca53..58ae62d7ee 100644
--- a/pgo/api/pgbouncer.go
+++ b/pgo/api/pgbouncer.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/pgdump.go b/pgo/api/pgdump.go
index 3bc0804c7b..2d6e0f3fd7 100644
--- a/pgo/api/pgdump.go
+++ b/pgo/api/pgdump.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/pgorole.go b/pgo/api/pgorole.go
index 804f0c1eb2..c9d9716b0b 100644
--- a/pgo/api/pgorole.go
+++ b/pgo/api/pgorole.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/pgouser.go b/pgo/api/pgouser.go
index e0026d20ca..a17804d61e 100644
--- a/pgo/api/pgouser.go
+++ b/pgo/api/pgouser.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/policy.go b/pgo/api/policy.go
index b7e9cf5d6f..9e56993dc9 100644
--- a/pgo/api/policy.go
+++ b/pgo/api/policy.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/pvc.go b/pgo/api/pvc.go
index f4fac4ceb4..0498967561 100644
--- a/pgo/api/pvc.go
+++ b/pgo/api/pvc.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/reload.go b/pgo/api/reload.go
index 9235cc1ea9..9dbe07a5f4 100644
--- a/pgo/api/reload.go
+++ b/pgo/api/reload.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/restart.go b/pgo/api/restart.go
index 13dc205972..3fba6f112f 100644
--- a/pgo/api/restart.go
+++ b/pgo/api/restart.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/restore.go b/pgo/api/restore.go
index e22cea904b..f8816e3c6c 100644
--- a/pgo/api/restore.go
+++ b/pgo/api/restore.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/restoreDump.go b/pgo/api/restoreDump.go
index bd911c1b75..cb7aa573d7 100644
--- a/pgo/api/restoreDump.go
+++ b/pgo/api/restoreDump.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/scale.go b/pgo/api/scale.go
index 6defb09127..b64133653f 100644
--- a/pgo/api/scale.go
+++ b/pgo/api/scale.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/scaledown.go b/pgo/api/scaledown.go
index 1cc6691b72..f4c8de0f6e 100644
--- a/pgo/api/scaledown.go
+++ b/pgo/api/scaledown.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/schedule.go b/pgo/api/schedule.go
index 4007e77e1b..02de41ba2d 100644
--- a/pgo/api/schedule.go
+++ b/pgo/api/schedule.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/status.go b/pgo/api/status.go
index ad70bd2f96..31ee0f7c70 100644
--- a/pgo/api/status.go
+++ b/pgo/api/status.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/test.go b/pgo/api/test.go
index 887d67b056..30bbeafd69 100644
--- a/pgo/api/test.go
+++ b/pgo/api/test.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/upgrade.go b/pgo/api/upgrade.go
index 6079a29023..9f00a2c2d5 100644
--- a/pgo/api/upgrade.go
+++ b/pgo/api/upgrade.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/user.go b/pgo/api/user.go
index 38424ab17b..4334acd186 100644
--- a/pgo/api/user.go
+++ b/pgo/api/user.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/version.go b/pgo/api/version.go
index 9ca743add1..bef166c93a 100644
--- a/pgo/api/version.go
+++ b/pgo/api/version.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/api/workflow.go b/pgo/api/workflow.go
index 3289329aa1..6b4ef05f67 100644
--- a/pgo/api/workflow.go
+++ b/pgo/api/workflow.go
@@ -1,7 +1,7 @@
package api
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/auth.go b/pgo/cmd/auth.go
index 322e5f5e9c..7b1b54ca04 100644
--- a/pgo/cmd/auth.go
+++ b/pgo/cmd/auth.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/backrest.go b/pgo/cmd/backrest.go
index a0a183fa86..c4c39a3af7 100644
--- a/pgo/cmd/backrest.go
+++ b/pgo/cmd/backrest.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/backup.go b/pgo/cmd/backup.go
index 61225cc3ea..719ea55712 100644
--- a/pgo/cmd/backup.go
+++ b/pgo/cmd/backup.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/cat.go b/pgo/cmd/cat.go
index e97301d40d..b213777843 100644
--- a/pgo/cmd/cat.go
+++ b/pgo/cmd/cat.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/clone.go b/pgo/cmd/clone.go
index 5f544e52e3..463ccfca96 100644
--- a/pgo/cmd/clone.go
+++ b/pgo/cmd/clone.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/cluster.go b/pgo/cmd/cluster.go
index 3ba9ca373b..ebbff8e6e7 100644
--- a/pgo/cmd/cluster.go
+++ b/pgo/cmd/cluster.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/common.go b/pgo/cmd/common.go
index daa268484c..da977a2661 100644
--- a/pgo/cmd/common.go
+++ b/pgo/cmd/common.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/config.go b/pgo/cmd/config.go
index 16a29d0603..0a1a4ba773 100644
--- a/pgo/cmd/config.go
+++ b/pgo/cmd/config.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/create.go b/pgo/cmd/create.go
index 507b77f9a1..1d747a97b0 100644
--- a/pgo/cmd/create.go
+++ b/pgo/cmd/create.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/delete.go b/pgo/cmd/delete.go
index d29341355e..eae34e471c 100644
--- a/pgo/cmd/delete.go
+++ b/pgo/cmd/delete.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/df.go b/pgo/cmd/df.go
index 576376d1bc..ec4bdc81b1 100644
--- a/pgo/cmd/df.go
+++ b/pgo/cmd/df.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/failover.go b/pgo/cmd/failover.go
index 4a667429a7..f55c98d8a8 100644
--- a/pgo/cmd/failover.go
+++ b/pgo/cmd/failover.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/flags.go b/pgo/cmd/flags.go
index bb831e4006..89d55e4f97 100644
--- a/pgo/cmd/flags.go
+++ b/pgo/cmd/flags.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/label.go b/pgo/cmd/label.go
index 3a888663b6..f06e8fdac6 100644
--- a/pgo/cmd/label.go
+++ b/pgo/cmd/label.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/load.go b/pgo/cmd/load.go
index 3cf808835f..a0df076fec 100644
--- a/pgo/cmd/load.go
+++ b/pgo/cmd/load.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/namespace.go b/pgo/cmd/namespace.go
index 1065193ad8..5dd1fdc81e 100644
--- a/pgo/cmd/namespace.go
+++ b/pgo/cmd/namespace.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/pgadmin.go b/pgo/cmd/pgadmin.go
index 52412324d4..336ab4ab40 100644
--- a/pgo/cmd/pgadmin.go
+++ b/pgo/cmd/pgadmin.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/pgbouncer.go b/pgo/cmd/pgbouncer.go
index 9d302a8cdb..3771047e9d 100644
--- a/pgo/cmd/pgbouncer.go
+++ b/pgo/cmd/pgbouncer.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/pgdump.go b/pgo/cmd/pgdump.go
index 744ebe7274..e34036005c 100644
--- a/pgo/cmd/pgdump.go
+++ b/pgo/cmd/pgdump.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/pgorole.go b/pgo/cmd/pgorole.go
index 171b03e401..144f1fb108 100644
--- a/pgo/cmd/pgorole.go
+++ b/pgo/cmd/pgorole.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/pgouser.go b/pgo/cmd/pgouser.go
index 2ccc72d970..ff4b535a1c 100644
--- a/pgo/cmd/pgouser.go
+++ b/pgo/cmd/pgouser.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/policy.go b/pgo/cmd/policy.go
index 3afa306923..805bef66fd 100644
--- a/pgo/cmd/policy.go
+++ b/pgo/cmd/policy.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/pvc.go b/pgo/cmd/pvc.go
index 47bc481cb0..6fc4c5cdd7 100644
--- a/pgo/cmd/pvc.go
+++ b/pgo/cmd/pvc.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/reload.go b/pgo/cmd/reload.go
index cf6c5b647c..f006f1a7dd 100644
--- a/pgo/cmd/reload.go
+++ b/pgo/cmd/reload.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/restart.go b/pgo/cmd/restart.go
index 5303466f9b..d01e6dab80 100644
--- a/pgo/cmd/restart.go
+++ b/pgo/cmd/restart.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/restore.go b/pgo/cmd/restore.go
index ced111cd21..85174ef6a7 100644
--- a/pgo/cmd/restore.go
+++ b/pgo/cmd/restore.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/root.go b/pgo/cmd/root.go
index 075a9f13e8..3a233b484a 100644
--- a/pgo/cmd/root.go
+++ b/pgo/cmd/root.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/scale.go b/pgo/cmd/scale.go
index 831ec2ddf9..f6a5e10518 100644
--- a/pgo/cmd/scale.go
+++ b/pgo/cmd/scale.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/scaledown.go b/pgo/cmd/scaledown.go
index 20241c3d46..57b869a6a8 100644
--- a/pgo/cmd/scaledown.go
+++ b/pgo/cmd/scaledown.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/schedule.go b/pgo/cmd/schedule.go
index 5413001efb..018a5fdb52 100644
--- a/pgo/cmd/schedule.go
+++ b/pgo/cmd/schedule.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/show.go b/pgo/cmd/show.go
index b42ba2a7d9..9636f7615f 100644
--- a/pgo/cmd/show.go
+++ b/pgo/cmd/show.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/status.go b/pgo/cmd/status.go
index 681ad08d6c..f93c4a93bf 100644
--- a/pgo/cmd/status.go
+++ b/pgo/cmd/status.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/test.go b/pgo/cmd/test.go
index 111475fbed..38b2df6146 100644
--- a/pgo/cmd/test.go
+++ b/pgo/cmd/test.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/update.go b/pgo/cmd/update.go
index f24bf8b9d2..9059d3b96d 100644
--- a/pgo/cmd/update.go
+++ b/pgo/cmd/update.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/upgrade.go b/pgo/cmd/upgrade.go
index a095dcde75..24b10998d7 100644
--- a/pgo/cmd/upgrade.go
+++ b/pgo/cmd/upgrade.go
@@ -2,7 +2,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/user.go b/pgo/cmd/user.go
index 7216ce9e1d..a952aef402 100644
--- a/pgo/cmd/user.go
+++ b/pgo/cmd/user.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/version.go b/pgo/cmd/version.go
index 25e6253767..a5934cfb88 100644
--- a/pgo/cmd/version.go
+++ b/pgo/cmd/version.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/watch.go b/pgo/cmd/watch.go
index 69d288a1d8..9dd9d5cd41 100644
--- a/pgo/cmd/watch.go
+++ b/pgo/cmd/watch.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/cmd/workflow.go b/pgo/cmd/workflow.go
index 239fcd6ef2..c0fb0b8ca5 100644
--- a/pgo/cmd/workflow.go
+++ b/pgo/cmd/workflow.go
@@ -1,7 +1,7 @@
package cmd
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/generatedocs.go b/pgo/generatedocs.go
index daafa3224c..8d2b2a2833 100644
--- a/pgo/generatedocs.go
+++ b/pgo/generatedocs.go
@@ -1,7 +1,7 @@
package main
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/pgo.go b/pgo/pgo.go
index 6895b7863a..49bdb9fde5 100644
--- a/pgo/pgo.go
+++ b/pgo/pgo.go
@@ -1,7 +1,7 @@
package main
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/util/confirmation.go b/pgo/util/confirmation.go
index c227055cb1..4d15e0ae83 100644
--- a/pgo/util/confirmation.go
+++ b/pgo/util/confirmation.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/util/pad.go b/pgo/util/pad.go
index 276469471a..fee08615ed 100644
--- a/pgo/util/pad.go
+++ b/pgo/util/pad.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pgo/util/validation.go b/pgo/util/validation.go
index 7d90f6a6ac..17d29b8eac 100644
--- a/pgo/util/validation.go
+++ b/pgo/util/validation.go
@@ -1,7 +1,7 @@
package util
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apis/crunchydata.com/v1/cluster.go b/pkg/apis/crunchydata.com/v1/cluster.go
index 120cc15f5c..89e6697a83 100644
--- a/pkg/apis/crunchydata.com/v1/cluster.go
+++ b/pkg/apis/crunchydata.com/v1/cluster.go
@@ -1,7 +1,7 @@
package v1
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apis/crunchydata.com/v1/common.go b/pkg/apis/crunchydata.com/v1/common.go
index 541c3ff426..90e9427fe8 100644
--- a/pkg/apis/crunchydata.com/v1/common.go
+++ b/pkg/apis/crunchydata.com/v1/common.go
@@ -1,7 +1,7 @@
package v1
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apis/crunchydata.com/v1/common_test.go b/pkg/apis/crunchydata.com/v1/common_test.go
index 8ad909e64f..cde6832420 100644
--- a/pkg/apis/crunchydata.com/v1/common_test.go
+++ b/pkg/apis/crunchydata.com/v1/common_test.go
@@ -1,7 +1,7 @@
package v1
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apis/crunchydata.com/v1/doc.go b/pkg/apis/crunchydata.com/v1/doc.go
index 2992589526..90085ef52b 100644
--- a/pkg/apis/crunchydata.com/v1/doc.go
+++ b/pkg/apis/crunchydata.com/v1/doc.go
@@ -108,7 +108,7 @@ package v1
// +k8s:deepcopy-gen=package,register
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apis/crunchydata.com/v1/policy.go b/pkg/apis/crunchydata.com/v1/policy.go
index 28347f9950..f3ac077cf4 100644
--- a/pkg/apis/crunchydata.com/v1/policy.go
+++ b/pkg/apis/crunchydata.com/v1/policy.go
@@ -1,7 +1,7 @@
package v1
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apis/crunchydata.com/v1/register.go b/pkg/apis/crunchydata.com/v1/register.go
index 00db119bda..10e79dc7fc 100644
--- a/pkg/apis/crunchydata.com/v1/register.go
+++ b/pkg/apis/crunchydata.com/v1/register.go
@@ -1,7 +1,7 @@
package v1
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/pkg/apis/crunchydata.com/v1/replica.go b/pkg/apis/crunchydata.com/v1/replica.go
index 386fa033d0..c5e17f4697 100644
--- a/pkg/apis/crunchydata.com/v1/replica.go
+++ b/pkg/apis/crunchydata.com/v1/replica.go
@@ -1,7 +1,7 @@
package v1
/*
- Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apis/crunchydata.com/v1/task.go b/pkg/apis/crunchydata.com/v1/task.go
index 5e54d97ab3..e898b548fd 100644
--- a/pkg/apis/crunchydata.com/v1/task.go
+++ b/pkg/apis/crunchydata.com/v1/task.go
@@ -1,7 +1,7 @@
package v1
/*
- Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apis/crunchydata.com/v1/zz_generated.deepcopy.go b/pkg/apis/crunchydata.com/v1/zz_generated.deepcopy.go
index ba5b0af842..418d4d3979 100644
--- a/pkg/apis/crunchydata.com/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/crunchydata.com/v1/zz_generated.deepcopy.go
@@ -1,7 +1,7 @@
// +build !ignore_autogenerated
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/backrestmsgs.go b/pkg/apiservermsgs/backrestmsgs.go
index 8944df9186..0e48475c49 100644
--- a/pkg/apiservermsgs/backrestmsgs.go
+++ b/pkg/apiservermsgs/backrestmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/catmsgs.go b/pkg/apiservermsgs/catmsgs.go
index ded313371f..15f7d5cf85 100644
--- a/pkg/apiservermsgs/catmsgs.go
+++ b/pkg/apiservermsgs/catmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/clonemsgs.go b/pkg/apiservermsgs/clonemsgs.go
index 7f78139af1..c8ff454904 100644
--- a/pkg/apiservermsgs/clonemsgs.go
+++ b/pkg/apiservermsgs/clonemsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/clustermsgs.go b/pkg/apiservermsgs/clustermsgs.go
index 65f32eddd1..240abaacc5 100644
--- a/pkg/apiservermsgs/clustermsgs.go
+++ b/pkg/apiservermsgs/clustermsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/common.go b/pkg/apiservermsgs/common.go
index fccc1ff341..e560721dfe 100644
--- a/pkg/apiservermsgs/common.go
+++ b/pkg/apiservermsgs/common.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/configmsgs.go b/pkg/apiservermsgs/configmsgs.go
index 06ed680008..325e2281e5 100644
--- a/pkg/apiservermsgs/configmsgs.go
+++ b/pkg/apiservermsgs/configmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/dfmsgs.go b/pkg/apiservermsgs/dfmsgs.go
index 22541840e7..8d947768ef 100644
--- a/pkg/apiservermsgs/dfmsgs.go
+++ b/pkg/apiservermsgs/dfmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/failovermsgs.go b/pkg/apiservermsgs/failovermsgs.go
index bfeefcb49a..b51b11c3e4 100644
--- a/pkg/apiservermsgs/failovermsgs.go
+++ b/pkg/apiservermsgs/failovermsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/labelmsgs.go b/pkg/apiservermsgs/labelmsgs.go
index eabf3e8ecf..d0a914840e 100644
--- a/pkg/apiservermsgs/labelmsgs.go
+++ b/pkg/apiservermsgs/labelmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/loadmsgs.go b/pkg/apiservermsgs/loadmsgs.go
index ddfcde3af5..ececc01229 100644
--- a/pkg/apiservermsgs/loadmsgs.go
+++ b/pkg/apiservermsgs/loadmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/namespacemsgs.go b/pkg/apiservermsgs/namespacemsgs.go
index 3921604a00..5fc4665a9b 100644
--- a/pkg/apiservermsgs/namespacemsgs.go
+++ b/pkg/apiservermsgs/namespacemsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/pgadminmsgs.go b/pkg/apiservermsgs/pgadminmsgs.go
index 5d68b9352d..73e4475294 100644
--- a/pkg/apiservermsgs/pgadminmsgs.go
+++ b/pkg/apiservermsgs/pgadminmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/pgbouncermsgs.go b/pkg/apiservermsgs/pgbouncermsgs.go
index 0feab5f15e..2c575b8f0c 100644
--- a/pkg/apiservermsgs/pgbouncermsgs.go
+++ b/pkg/apiservermsgs/pgbouncermsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/pgdumpmsgs.go b/pkg/apiservermsgs/pgdumpmsgs.go
index e247fca304..34bc123127 100644
--- a/pkg/apiservermsgs/pgdumpmsgs.go
+++ b/pkg/apiservermsgs/pgdumpmsgs.go
@@ -5,7 +5,7 @@ import (
)
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/pgorolemsgs.go b/pkg/apiservermsgs/pgorolemsgs.go
index 1f62efa1ab..6aae3494d0 100644
--- a/pkg/apiservermsgs/pgorolemsgs.go
+++ b/pkg/apiservermsgs/pgorolemsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/pgousermsgs.go b/pkg/apiservermsgs/pgousermsgs.go
index 815f8f1fdf..4690c1f888 100644
--- a/pkg/apiservermsgs/pgousermsgs.go
+++ b/pkg/apiservermsgs/pgousermsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/policymsgs.go b/pkg/apiservermsgs/policymsgs.go
index ec3e7cf2f9..54fb12d52a 100644
--- a/pkg/apiservermsgs/policymsgs.go
+++ b/pkg/apiservermsgs/policymsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/pvcmsgs.go b/pkg/apiservermsgs/pvcmsgs.go
index f59ddd7983..da902da96b 100644
--- a/pkg/apiservermsgs/pvcmsgs.go
+++ b/pkg/apiservermsgs/pvcmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/reloadmsgs.go b/pkg/apiservermsgs/reloadmsgs.go
index 34a3738399..11c4293980 100644
--- a/pkg/apiservermsgs/reloadmsgs.go
+++ b/pkg/apiservermsgs/reloadmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/restartmsgs.go b/pkg/apiservermsgs/restartmsgs.go
index c0b32d3d00..bf6b9faa1d 100644
--- a/pkg/apiservermsgs/restartmsgs.go
+++ b/pkg/apiservermsgs/restartmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/schedulemsgs.go b/pkg/apiservermsgs/schedulemsgs.go
index 4b037a5992..47e9f90ca8 100644
--- a/pkg/apiservermsgs/schedulemsgs.go
+++ b/pkg/apiservermsgs/schedulemsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/statusmsgs.go b/pkg/apiservermsgs/statusmsgs.go
index 94994c75b9..72a6c79aab 100644
--- a/pkg/apiservermsgs/statusmsgs.go
+++ b/pkg/apiservermsgs/statusmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/upgrademsgs.go b/pkg/apiservermsgs/upgrademsgs.go
index ab7fecc47a..a360c036c7 100644
--- a/pkg/apiservermsgs/upgrademsgs.go
+++ b/pkg/apiservermsgs/upgrademsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/usermsgs.go b/pkg/apiservermsgs/usermsgs.go
index 1f0ba56295..bf67358abe 100644
--- a/pkg/apiservermsgs/usermsgs.go
+++ b/pkg/apiservermsgs/usermsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/usermsgs_test.go b/pkg/apiservermsgs/usermsgs_test.go
index d2f70388fc..0f6d39b754 100644
--- a/pkg/apiservermsgs/usermsgs_test.go
+++ b/pkg/apiservermsgs/usermsgs_test.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/versionmsgs.go b/pkg/apiservermsgs/versionmsgs.go
index 7685221c44..38ab640cdb 100644
--- a/pkg/apiservermsgs/versionmsgs.go
+++ b/pkg/apiservermsgs/versionmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/watchmsgs.go b/pkg/apiservermsgs/watchmsgs.go
index 9d50a81ccd..02c1472b90 100644
--- a/pkg/apiservermsgs/watchmsgs.go
+++ b/pkg/apiservermsgs/watchmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/apiservermsgs/workflowmsgs.go b/pkg/apiservermsgs/workflowmsgs.go
index 2908d75347..3d4c44353a 100644
--- a/pkg/apiservermsgs/workflowmsgs.go
+++ b/pkg/apiservermsgs/workflowmsgs.go
@@ -1,7 +1,7 @@
package apiservermsgs
/*
-Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/events/eventing.go b/pkg/events/eventing.go
index 66fc353117..3ea0e68044 100644
--- a/pkg/events/eventing.go
+++ b/pkg/events/eventing.go
@@ -1,7 +1,7 @@
package events
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/events/eventtype.go b/pkg/events/eventtype.go
index 18f0e78ab9..cf632191ae 100644
--- a/pkg/events/eventtype.go
+++ b/pkg/events/eventtype.go
@@ -1,7 +1,7 @@
package events
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/events/pgoeventtype.go b/pkg/events/pgoeventtype.go
index 75c076b311..4e4f114868 100644
--- a/pkg/events/pgoeventtype.go
+++ b/pkg/events/pgoeventtype.go
@@ -1,7 +1,7 @@
package events
/*
- Copyright 2019 - 2020 Crunchy Data Solutions, Inc.
+ Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/clientset.go b/pkg/generated/clientset/versioned/clientset.go
index 7c5e89774a..bc2b61e5e0 100644
--- a/pkg/generated/clientset/versioned/clientset.go
+++ b/pkg/generated/clientset/versioned/clientset.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/doc.go b/pkg/generated/clientset/versioned/doc.go
index e2534c0fe7..f862afa1b0 100644
--- a/pkg/generated/clientset/versioned/doc.go
+++ b/pkg/generated/clientset/versioned/doc.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/fake/clientset_generated.go b/pkg/generated/clientset/versioned/fake/clientset_generated.go
index 384d0e7737..5f9ec9bbbb 100644
--- a/pkg/generated/clientset/versioned/fake/clientset_generated.go
+++ b/pkg/generated/clientset/versioned/fake/clientset_generated.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/fake/doc.go b/pkg/generated/clientset/versioned/fake/doc.go
index 6318a06f3c..e9300efbfe 100644
--- a/pkg/generated/clientset/versioned/fake/doc.go
+++ b/pkg/generated/clientset/versioned/fake/doc.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/fake/register.go b/pkg/generated/clientset/versioned/fake/register.go
index 26c69c1594..7d57cf4437 100644
--- a/pkg/generated/clientset/versioned/fake/register.go
+++ b/pkg/generated/clientset/versioned/fake/register.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/scheme/doc.go b/pkg/generated/clientset/versioned/scheme/doc.go
index 462fec5e30..49cfafd10d 100644
--- a/pkg/generated/clientset/versioned/scheme/doc.go
+++ b/pkg/generated/clientset/versioned/scheme/doc.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/scheme/register.go b/pkg/generated/clientset/versioned/scheme/register.go
index 4850f74045..2ce45ab80b 100644
--- a/pkg/generated/clientset/versioned/scheme/register.go
+++ b/pkg/generated/clientset/versioned/scheme/register.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/crunchydata.com_client.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/crunchydata.com_client.go
index aac71b2aa3..4c862528fa 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/crunchydata.com_client.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/crunchydata.com_client.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/doc.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/doc.go
index b7311c21af..21c249ea20 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/doc.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/doc.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/doc.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/doc.go
index 759d8fff95..14f506a6fb 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/doc.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/doc.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_crunchydata.com_client.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_crunchydata.com_client.go
index f8d6b6b350..33ad7a5550 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_crunchydata.com_client.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_crunchydata.com_client.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgcluster.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgcluster.go
index 516955d577..01bb2a2f00 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgcluster.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgcluster.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgpolicy.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgpolicy.go
index f44e8a4ebb..43a0a0a1fc 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgpolicy.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgpolicy.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgreplica.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgreplica.go
index d6dc4fbd40..b1a3ea105e 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgreplica.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgreplica.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgtask.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgtask.go
index 2db70f152f..d4c2e511a1 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgtask.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/fake/fake_pgtask.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/generated_expansion.go
index 066f811e51..5ea3a63db1 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/generated_expansion.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/generated_expansion.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgcluster.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgcluster.go
index 035712a6ef..d87c091f29 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgcluster.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgcluster.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgpolicy.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgpolicy.go
index 402b99f523..31d0ddd8b7 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgpolicy.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgpolicy.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgreplica.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgreplica.go
index 88fb060a69..5df06c39a4 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgreplica.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgreplica.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgtask.go b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgtask.go
index 25b2cd1055..cbed3e2468 100644
--- a/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgtask.go
+++ b/pkg/generated/clientset/versioned/typed/crunchydata.com/v1/pgtask.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/crunchydata.com/interface.go b/pkg/generated/informers/externalversions/crunchydata.com/interface.go
index dfe44a0fcb..698763aff3 100644
--- a/pkg/generated/informers/externalversions/crunchydata.com/interface.go
+++ b/pkg/generated/informers/externalversions/crunchydata.com/interface.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/crunchydata.com/v1/interface.go b/pkg/generated/informers/externalversions/crunchydata.com/v1/interface.go
index c34a37f8e7..b30e24b239 100644
--- a/pkg/generated/informers/externalversions/crunchydata.com/v1/interface.go
+++ b/pkg/generated/informers/externalversions/crunchydata.com/v1/interface.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/crunchydata.com/v1/pgcluster.go b/pkg/generated/informers/externalversions/crunchydata.com/v1/pgcluster.go
index 92f0d9a6a9..3be680bc29 100644
--- a/pkg/generated/informers/externalversions/crunchydata.com/v1/pgcluster.go
+++ b/pkg/generated/informers/externalversions/crunchydata.com/v1/pgcluster.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/crunchydata.com/v1/pgpolicy.go b/pkg/generated/informers/externalversions/crunchydata.com/v1/pgpolicy.go
index ea70fa720d..4383e0914c 100644
--- a/pkg/generated/informers/externalversions/crunchydata.com/v1/pgpolicy.go
+++ b/pkg/generated/informers/externalversions/crunchydata.com/v1/pgpolicy.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/crunchydata.com/v1/pgreplica.go b/pkg/generated/informers/externalversions/crunchydata.com/v1/pgreplica.go
index 99332793ac..840efd6b0a 100644
--- a/pkg/generated/informers/externalversions/crunchydata.com/v1/pgreplica.go
+++ b/pkg/generated/informers/externalversions/crunchydata.com/v1/pgreplica.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/crunchydata.com/v1/pgtask.go b/pkg/generated/informers/externalversions/crunchydata.com/v1/pgtask.go
index bf1cbd60a8..c25536e459 100644
--- a/pkg/generated/informers/externalversions/crunchydata.com/v1/pgtask.go
+++ b/pkg/generated/informers/externalversions/crunchydata.com/v1/pgtask.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/factory.go b/pkg/generated/informers/externalversions/factory.go
index 56886a005a..65c18752b4 100644
--- a/pkg/generated/informers/externalversions/factory.go
+++ b/pkg/generated/informers/externalversions/factory.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/generic.go b/pkg/generated/informers/externalversions/generic.go
index 130dd5ad37..48e7491d80 100644
--- a/pkg/generated/informers/externalversions/generic.go
+++ b/pkg/generated/informers/externalversions/generic.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/informers/externalversions/internalinterfaces/factory_interfaces.go b/pkg/generated/informers/externalversions/internalinterfaces/factory_interfaces.go
index 4086ab3a09..130bc043a8 100644
--- a/pkg/generated/informers/externalversions/internalinterfaces/factory_interfaces.go
+++ b/pkg/generated/informers/externalversions/internalinterfaces/factory_interfaces.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/listers/crunchydata.com/v1/expansion_generated.go b/pkg/generated/listers/crunchydata.com/v1/expansion_generated.go
index ca6b77b1a3..369c56b717 100644
--- a/pkg/generated/listers/crunchydata.com/v1/expansion_generated.go
+++ b/pkg/generated/listers/crunchydata.com/v1/expansion_generated.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/listers/crunchydata.com/v1/pgcluster.go b/pkg/generated/listers/crunchydata.com/v1/pgcluster.go
index 10db1c63a2..eb059beb06 100644
--- a/pkg/generated/listers/crunchydata.com/v1/pgcluster.go
+++ b/pkg/generated/listers/crunchydata.com/v1/pgcluster.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/listers/crunchydata.com/v1/pgpolicy.go b/pkg/generated/listers/crunchydata.com/v1/pgpolicy.go
index d996df08ee..d73fef8e45 100644
--- a/pkg/generated/listers/crunchydata.com/v1/pgpolicy.go
+++ b/pkg/generated/listers/crunchydata.com/v1/pgpolicy.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/listers/crunchydata.com/v1/pgreplica.go b/pkg/generated/listers/crunchydata.com/v1/pgreplica.go
index 23632d1ee4..db450cee51 100644
--- a/pkg/generated/listers/crunchydata.com/v1/pgreplica.go
+++ b/pkg/generated/listers/crunchydata.com/v1/pgreplica.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pkg/generated/listers/crunchydata.com/v1/pgtask.go b/pkg/generated/listers/crunchydata.com/v1/pgtask.go
index 94a405754c..2042db9581 100644
--- a/pkg/generated/listers/crunchydata.com/v1/pgtask.go
+++ b/pkg/generated/listers/crunchydata.com/v1/pgtask.go
@@ -1,5 +1,5 @@
/*
-Copyright 2020 Crunchy Data Solutions, Inc.
+Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/postgres-operator.go b/postgres-operator.go
index 37cda4bde4..2bd877d973 100644
--- a/postgres-operator.go
+++ b/postgres-operator.go
@@ -1,7 +1,7 @@
package main
/*
-Copyright 2017 - 2020 Crunchy Data
+Copyright 2017 - 2021 Crunchy Data
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/pv/create-pv-nfs-label.sh b/pv/create-pv-nfs-label.sh
index a77e3e68e3..a347a907fd 100755
--- a/pv/create-pv-nfs-label.sh
+++ b/pv/create-pv-nfs-label.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2018 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2018 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/pv/create-pv-nfs-legacy.sh b/pv/create-pv-nfs-legacy.sh
index 4850e73652..96d698e159 100644
--- a/pv/create-pv-nfs-legacy.sh
+++ b/pv/create-pv-nfs-legacy.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/pv/create-pv-nfs.sh b/pv/create-pv-nfs.sh
index 3b5b96b31b..5381548160 100755
--- a/pv/create-pv-nfs.sh
+++ b/pv/create-pv-nfs.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/pv/create-pv.sh b/pv/create-pv.sh
index 46bbf4dbe8..6d9ede0b71 100755
--- a/pv/create-pv.sh
+++ b/pv/create-pv.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/pv/delete-pv.sh b/pv/delete-pv.sh
index cd653a1778..b3d7422ff2 100755
--- a/pv/delete-pv.sh
+++ b/pv/delete-pv.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 2017 - 2020 Crunchy Data Solutions, Inc.
+# Copyright 2017 - 2021 Crunchy Data Solutions, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_backup_test.go b/testing/pgo_cli/cluster_backup_test.go
index a5f0ae33ff..ca434ae218 100644
--- a/testing/pgo_cli/cluster_backup_test.go
+++ b/testing/pgo_cli/cluster_backup_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_cat_test.go b/testing/pgo_cli/cluster_cat_test.go
index 4cb159be8d..aea958fb15 100644
--- a/testing/pgo_cli/cluster_cat_test.go
+++ b/testing/pgo_cli/cluster_cat_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_clone_test.go b/testing/pgo_cli/cluster_clone_test.go
index 606139e820..24154c2f05 100644
--- a/testing/pgo_cli/cluster_clone_test.go
+++ b/testing/pgo_cli/cluster_clone_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_create_test.go b/testing/pgo_cli/cluster_create_test.go
index 26f0c2be4f..f0579de8cd 100644
--- a/testing/pgo_cli/cluster_create_test.go
+++ b/testing/pgo_cli/cluster_create_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_delete_test.go b/testing/pgo_cli/cluster_delete_test.go
index cba99408f7..1285b6026e 100644
--- a/testing/pgo_cli/cluster_delete_test.go
+++ b/testing/pgo_cli/cluster_delete_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_df_test.go b/testing/pgo_cli/cluster_df_test.go
index 8171a7aa45..91ae0b8092 100644
--- a/testing/pgo_cli/cluster_df_test.go
+++ b/testing/pgo_cli/cluster_df_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_failover_test.go b/testing/pgo_cli/cluster_failover_test.go
index d35a6d87f5..ac4f2a40c6 100644
--- a/testing/pgo_cli/cluster_failover_test.go
+++ b/testing/pgo_cli/cluster_failover_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_label_test.go b/testing/pgo_cli/cluster_label_test.go
index 0f54f7af93..ccf4a17461 100644
--- a/testing/pgo_cli/cluster_label_test.go
+++ b/testing/pgo_cli/cluster_label_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_pgbouncer_test.go b/testing/pgo_cli/cluster_pgbouncer_test.go
index 9c5b72ba66..b0f9199881 100644
--- a/testing/pgo_cli/cluster_pgbouncer_test.go
+++ b/testing/pgo_cli/cluster_pgbouncer_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_policy_test.go b/testing/pgo_cli/cluster_policy_test.go
index df7197deb4..66db7c6080 100644
--- a/testing/pgo_cli/cluster_policy_test.go
+++ b/testing/pgo_cli/cluster_policy_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_pvc_test.go b/testing/pgo_cli/cluster_pvc_test.go
index bd91b28435..0009225e4a 100644
--- a/testing/pgo_cli/cluster_pvc_test.go
+++ b/testing/pgo_cli/cluster_pvc_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_reload_test.go b/testing/pgo_cli/cluster_reload_test.go
index e2900ee4fb..02cf63a479 100644
--- a/testing/pgo_cli/cluster_reload_test.go
+++ b/testing/pgo_cli/cluster_reload_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_restart_test.go b/testing/pgo_cli/cluster_restart_test.go
index 3f438b6570..2a106fbd41 100644
--- a/testing/pgo_cli/cluster_restart_test.go
+++ b/testing/pgo_cli/cluster_restart_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_scale_test.go b/testing/pgo_cli/cluster_scale_test.go
index 11ce9a9c21..219e44f582 100644
--- a/testing/pgo_cli/cluster_scale_test.go
+++ b/testing/pgo_cli/cluster_scale_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_scaledown_test.go b/testing/pgo_cli/cluster_scaledown_test.go
index f1926a4d4d..5e9dc16b28 100644
--- a/testing/pgo_cli/cluster_scaledown_test.go
+++ b/testing/pgo_cli/cluster_scaledown_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_test_test.go b/testing/pgo_cli/cluster_test_test.go
index 153d47f467..76100eb9f0 100644
--- a/testing/pgo_cli/cluster_test_test.go
+++ b/testing/pgo_cli/cluster_test_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/cluster_user_test.go b/testing/pgo_cli/cluster_user_test.go
index 9e59757a9a..964bb6b58c 100644
--- a/testing/pgo_cli/cluster_user_test.go
+++ b/testing/pgo_cli/cluster_user_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/operator_namespace_test.go b/testing/pgo_cli/operator_namespace_test.go
index ef327c2ece..57bc685ea2 100644
--- a/testing/pgo_cli/operator_namespace_test.go
+++ b/testing/pgo_cli/operator_namespace_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/operator_rbac_test.go b/testing/pgo_cli/operator_rbac_test.go
index 8fa4609894..569f1bd090 100644
--- a/testing/pgo_cli/operator_rbac_test.go
+++ b/testing/pgo_cli/operator_rbac_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/operator_test.go b/testing/pgo_cli/operator_test.go
index 743b872614..09e8148c68 100644
--- a/testing/pgo_cli/operator_test.go
+++ b/testing/pgo_cli/operator_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/suite_helpers_test.go b/testing/pgo_cli/suite_helpers_test.go
index b714ce6107..77aa53c05e 100644
--- a/testing/pgo_cli/suite_helpers_test.go
+++ b/testing/pgo_cli/suite_helpers_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/suite_pgo_cmd_test.go b/testing/pgo_cli/suite_pgo_cmd_test.go
index 91aec62228..245d314aa7 100644
--- a/testing/pgo_cli/suite_pgo_cmd_test.go
+++ b/testing/pgo_cli/suite_pgo_cmd_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/testing/pgo_cli/suite_test.go b/testing/pgo_cli/suite_test.go
index 4f2056d08e..9429f28278 100644
--- a/testing/pgo_cli/suite_test.go
+++ b/testing/pgo_cli/suite_test.go
@@ -1,7 +1,7 @@
package pgo_cli_test
/*
- Copyright 2020 Crunchy Data Solutions, Inc.
+ Copyright 2020 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
From 78259178cb226a6335d56d5f658c7bbf92d3d555 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Thu, 7 Jan 2021 11:51:11 -0500
Subject: [PATCH 52/77] Modify roles for pgo-target-role
This moves the "replicasets" resource to be under the "apps"
group, where it really should have been all along (at least since
1.9). This also adds an explicit permission for viewing pods/logs.
Co-authored-by: Pramodh Mereddy
Issue: [ch10081]
---
deploy/cluster-roles.yaml | 11 ++++--
docs/content/architecture/namespace.md | 35 +++++++++++--------
.../files/pgo-configs/pgo-target-role.json | 18 ++++++++--
.../templates/cluster-rbac.yaml.j2 | 11 ++++--
installers/helm/metrics/templates/rbac.yaml | 3 +-
installers/kubectl/postgres-operator.yml | 1 +
6 files changed, 57 insertions(+), 22 deletions(-)
diff --git a/deploy/cluster-roles.yaml b/deploy/cluster-roles.yaml
index cb0bb85b41..d760492836 100644
--- a/deploy/cluster-roles.yaml
+++ b/deploy/cluster-roles.yaml
@@ -41,8 +41,6 @@ rules:
- endpoints
- pods
- pods/exec
- - pods/log
- - replicasets
- secrets
- services
- persistentvolumeclaims
@@ -55,10 +53,19 @@ rules:
- update
- delete
- deletecollection
+ - apiGroups:
+ - ''
+ resources:
+ - pods/log
+ verbs:
+ - get
+ - list
+ - watch
- apiGroups:
- apps
resources:
- deployments
+ - replicasets
verbs:
- get
- list
diff --git a/docs/content/architecture/namespace.md b/docs/content/architecture/namespace.md
index f6b4265723..1a551a8b91 100644
--- a/docs/content/architecture/namespace.md
+++ b/docs/content/architecture/namespace.md
@@ -34,8 +34,8 @@ settings.
Enables full dynamic namespace capabilities, in which the Operator can create, delete and update
any namespaces within a Kubernetes cluster. With `dynamic` mode enabled, the PostgreSQL Operator
-can respond to namespace events in a Kubernetes cluster, such as when a namespace is created, and
-take an appropriate action, such as adding the PostgreSQL Operator controllers for the newly
+can respond to namespace events in a Kubernetes cluster, such as when a namespace is created, and
+take an appropriate action, such as adding the PostgreSQL Operator controllers for the newly
created namespace.
The following defines the namespace permissions required for the `dynamic` mode to be enabled:
@@ -62,8 +62,8 @@ rules:
### `readonly`
-In `readonly` mode, the PostgreSQL Operator is still able to listen to namespace events within a
-Kubernetes cluster, but it can no longer modify (create, update, delete) namespaces. For example,
+In `readonly` mode, the PostgreSQL Operator is still able to listen to namespace events within a
+Kubernetes cluster, but it can no longer modify (create, update, delete) namespaces. For example,
if a Kubernetes administrator creates a namespace, the PostgreSQL Operator can respond and create
controllers for that namespace.
@@ -95,7 +95,7 @@ Operator is unable to dynamically respond to namespace events in the cluster, i
target namespaces are deleted or new target namespaces need to be added, the PostgreSQL Operator
will need to be re-deployed.
-Please note that it is important to redeploy the PostgreSQL Operator following the deletion of a
+Please note that it is important to redeploy the PostgreSQL Operator following the deletion of a
target namespace to ensure it no longer attempts to listen for events in that namespace.
The `disabled` mode is enabled the when the PostgreSQL Operator has not been assigned namespace
@@ -103,22 +103,22 @@ permissions.
## RBAC Reconciliation
-By default, the PostgreSQL Operator will attempt to reconcile RBAC resources (ServiceAccounts,
+By default, the PostgreSQL Operator will attempt to reconcile RBAC resources (ServiceAccounts,
Roles and RoleBindings) within each namespace configured for the PostgreSQL Operator installation.
This allows the PostgreSQL Operator to create, update and delete the various RBAC resources it
requires in order to properly create and manage PostgreSQL clusters within each targeted namespace
(this includes self-healing RBAC resources as needed if removed and/or misconfigured).
In order for RBAC reconciliation to function properly, the PostgreSQL Operator ServiceAccount must
-be assigned a certain set of permissions. While the PostgreSQL Operator is not concerned with
+be assigned a certain set of permissions. While the PostgreSQL Operator is not concerned with
exactly how it has been assigned the permissions required to reconcile RBAC in each target
-namespace, the various [installation methods]({{< relref "installation" >}}) supported by the
+namespace, the various [installation methods]({{< relref "installation" >}}) supported by the
PostgreSQL Operator install a recommended set permissions based on the specific Namespace Operating
Mode enabled (see section [Namespace Operating Modes]({{< relref "#namespace-operating-modes" >}})
above for more information regarding the various Namespace Operating Modes available).
-The following section defines the recommended set of permissions that should be assigned to the
-PostgreSQL Operator ServiceAccount in order to ensure proper RBAC reconciliation based on the
+The following section defines the recommended set of permissions that should be assigned to the
+PostgreSQL Operator ServiceAccount in order to ensure proper RBAC reconciliation based on the
specific Namespace Operating Mode enabled. Please note that each PostgreSQL Operator installation
method handles the initial configuration and setup of the permissions shown below based on the
Namespace Operating Mode configured during installation.
@@ -127,7 +127,7 @@ Namespace Operating Mode configured during installation.
When using the `dynamic` Namespace Operating Mode, it is recommended that the PostgreSQL Operator
ServiceAccount be granted permissions to manage RBAC inside any namespace in the Kubernetes cluster
-via a ClusterRole. This allows for a fully-hands off approach to managing RBAC within each
+via a ClusterRole. This allows for a fully-hands off approach to managing RBAC within each
targeted namespace space. In other words, as namespaces are added and removed post-installation of
the PostgreSQL Operator (e.g. using `pgo create namespace` or `pgo delete namespace`), the Operator
is able to automatically reconcile RBAC in those namespaces without the need for any external
@@ -170,8 +170,6 @@ rules:
- endpoints
- pods
- pods/exec
- - pods/log
- - replicasets
- secrets
- services
- persistentvolumeclaims
@@ -184,10 +182,19 @@ rules:
- update
- delete
- deletecollection
+ - apiGroups:
+ - ''
+ resources:
+ - pods/log
+ verbs:
+ - get
+ - list
+ - watch
- apiGroups:
- apps
resources:
- deployments
+ - replicasets
verbs:
- get
- list
@@ -230,7 +237,7 @@ rules:
### `readonly` & `disabled` Namespace Operating Modes
-When using the `readonly` or `disabled` Namespace Operating Modes, it is recommended that the
+When using the `readonly` or `disabled` Namespace Operating Modes, it is recommended that the
PostgreSQL Operator ServiceAccount be granted permissions to manage RBAC inside of any configured
namespaces using local Roles within each targeted namespace. This means that as new namespaces
are added and removed post-installation of the PostgreSQL Operator, an administrator must manually
diff --git a/installers/ansible/roles/pgo-operator/files/pgo-configs/pgo-target-role.json b/installers/ansible/roles/pgo-operator/files/pgo-configs/pgo-target-role.json
index 1cb6a31cc5..09b77ef469 100644
--- a/installers/ansible/roles/pgo-operator/files/pgo-configs/pgo-target-role.json
+++ b/installers/ansible/roles/pgo-operator/files/pgo-configs/pgo-target-role.json
@@ -15,8 +15,6 @@
"endpoints",
"pods",
"pods/exec",
- "pods/log",
- "replicasets",
"secrets",
"services",
"persistentvolumeclaims"
@@ -32,12 +30,26 @@
"deletecollection"
]
},
+ {
+ "apiGroups": [
+ ""
+ ],
+ "resources": [
+ "pods/log"
+ ],
+ "verbs":[
+ "get",
+ "list",
+ "watch"
+ ]
+ },
{
"apiGroups": [
"apps"
],
"resources": [
- "deployments"
+ "deployments",
+ "replicasets"
],
"verbs":[
"get",
diff --git a/installers/ansible/roles/pgo-operator/templates/cluster-rbac.yaml.j2 b/installers/ansible/roles/pgo-operator/templates/cluster-rbac.yaml.j2
index 771080042e..4212d9107b 100644
--- a/installers/ansible/roles/pgo-operator/templates/cluster-rbac.yaml.j2
+++ b/installers/ansible/roles/pgo-operator/templates/cluster-rbac.yaml.j2
@@ -42,8 +42,6 @@ rules:
- endpoints
- pods
- pods/exec
- - pods/log
- - replicasets
- secrets
- services
- persistentvolumeclaims
@@ -56,10 +54,19 @@ rules:
- update
- delete
- deletecollection
+ - apiGroups:
+ - ''
+ resources:
+ - pods/log
+ verbs:
+ - get
+ - list
+ - watch
- apiGroups:
- apps
resources:
- deployments
+ - replicasets
verbs:
- get
- list
diff --git a/installers/helm/metrics/templates/rbac.yaml b/installers/helm/metrics/templates/rbac.yaml
index dbef140471..19d6fc06e4 100644
--- a/installers/helm/metrics/templates/rbac.yaml
+++ b/installers/helm/metrics/templates/rbac.yaml
@@ -73,6 +73,7 @@ rules:
- extensions
resources:
- deployments
+ - replicasets
verbs:
- get
- list
@@ -145,4 +146,4 @@ subjects:
- kind: ServiceAccount
name: {{ include "postgres-operator.serviceAccountName" . }}
namespace: {{ .Release.Namespace }}
-{{ end }}
\ No newline at end of file
+{{ end }}
diff --git a/installers/kubectl/postgres-operator.yml b/installers/kubectl/postgres-operator.yml
index dd65c40804..d77db7974a 100644
--- a/installers/kubectl/postgres-operator.yml
+++ b/installers/kubectl/postgres-operator.yml
@@ -60,6 +60,7 @@ rules:
- extensions
resources:
- deployments
+ - replicasets
verbs:
- get
- list
From cd56f91271008b6099dd4c1f96d4880d412cb5b2 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Wed, 13 Jan 2021 12:43:46 -0500
Subject: [PATCH 53/77] Gracefully handle names with "replica" in `pgo test`
This provides an even tighter check than the one introduced in
b0a276ab1 to determine what is a primary vs. replica Service.
Issue: [ch9764]
Issue: #2047
---
internal/apiserver/clusterservice/clusterimpl.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/internal/apiserver/clusterservice/clusterimpl.go b/internal/apiserver/clusterservice/clusterimpl.go
index 6ff04384fa..093773ab8d 100644
--- a/internal/apiserver/clusterservice/clusterimpl.go
+++ b/internal/apiserver/clusterservice/clusterimpl.go
@@ -489,7 +489,7 @@ func TestCluster(name, selector, ns, pgouser string, allFlag bool) msgs.ClusterT
switch {
default:
endpoint.InstanceType = msgs.ClusterTestInstanceTypePrimary
- case strings.HasSuffix(service.Name, msgs.PodTypeReplica):
+ case (strings.HasSuffix(service.Name, "-"+msgs.PodTypeReplica) && strings.Count(service.Name, "-"+msgs.PodTypeReplica) == 1):
endpoint.InstanceType = msgs.ClusterTestInstanceTypeReplica
case service.Pgbouncer:
endpoint.InstanceType = msgs.ClusterTestInstanceTypePGBouncer
From 01f3db4c840af44d0e97103eb02967a9f14e665a Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Wed, 13 Jan 2021 17:38:23 -0500
Subject: [PATCH 54/77] Remove restrictions on generic linking options for
pgBackRest
This is useful for creating a new cluster with an external WAL
volume from a cluster that lacks one.
Issue: [ch10157]
---
internal/apiserver/backupoptions/pgbackrestoptions.go | 2 --
1 file changed, 2 deletions(-)
diff --git a/internal/apiserver/backupoptions/pgbackrestoptions.go b/internal/apiserver/backupoptions/pgbackrestoptions.go
index ea932de517..026fb45501 100644
--- a/internal/apiserver/backupoptions/pgbackrestoptions.go
+++ b/internal/apiserver/backupoptions/pgbackrestoptions.go
@@ -25,8 +25,6 @@ var pgBackRestOptsDenyList = []string{
"--config",
"--config-include-path",
"--config-path",
- "--link-all",
- "--link-map",
"--lock-path",
"--log-timestamp",
"--neutral-umask",
From 3dd7045f605c61073674223a2179c4c9c9d190c2 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Wed, 13 Jan 2021 18:24:57 -0500
Subject: [PATCH 55/77] Reconcile API server permissions list
Of note is the "Restart" permission which was not added to the
validation list, and removing some permissions for calls that are
no longer available.
Issue: #2203
Issue: #2201
---
docs/content/Security/configure-postgres-operator-rbac.md | 1 +
internal/apiserver/perms.go | 7 +------
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/docs/content/Security/configure-postgres-operator-rbac.md b/docs/content/Security/configure-postgres-operator-rbac.md
index 0c810a7bfd..6d44096328 100644
--- a/docs/content/Security/configure-postgres-operator-rbac.md
+++ b/docs/content/Security/configure-postgres-operator-rbac.md
@@ -74,6 +74,7 @@ The following list shows the current complete list of possible pgo permissions t
|Label | allow *pgo label*|
|Load | allow *pgo load*|
|Reload | allow *pgo reload*|
+|Restart | allow *pgo restart*|
|Restore | allow *pgo restore*|
|RestoreDump | allow *pgo restore* for pgdumps|
|ShowBackup | allow *pgo show backup*|
diff --git a/internal/apiserver/perms.go b/internal/apiserver/perms.go
index e702a5a9d8..ce7f26cf53 100644
--- a/internal/apiserver/perms.go
+++ b/internal/apiserver/perms.go
@@ -42,7 +42,6 @@ const (
CREATE_CLUSTER_PERM = "CreateCluster"
CREATE_DUMP_PERM = "CreateDump"
CREATE_FAILOVER_PERM = "CreateFailover"
- CREATE_INGEST_PERM = "CreateIngest"
CREATE_NAMESPACE_PERM = "CreateNamespace"
CREATE_PGADMIN_PERM = "CreatePgAdmin"
CREATE_PGBOUNCER_PERM = "CreatePgbouncer"
@@ -59,7 +58,6 @@ const (
// DELETE
DELETE_BACKUP_PERM = "DeleteBackup"
DELETE_CLUSTER_PERM = "DeleteCluster"
- DELETE_INGEST_PERM = "DeleteIngest"
DELETE_NAMESPACE_PERM = "DeleteNamespace"
DELETE_PGADMIN_PERM = "DeletePgAdmin"
DELETE_PGBOUNCER_PERM = "DeletePgbouncer"
@@ -73,7 +71,6 @@ const (
SHOW_BACKUP_PERM = "ShowBackup"
SHOW_CLUSTER_PERM = "ShowCluster"
SHOW_CONFIG_PERM = "ShowConfig"
- SHOW_INGEST_PERM = "ShowIngest"
SHOW_NAMESPACE_PERM = "ShowNamespace"
SHOW_PGADMIN_PERM = "ShowPgAdmin"
SHOW_PGBOUNCER_PERM = "ShowPgBouncer"
@@ -119,6 +116,7 @@ func InitializePerms() {
LABEL_PERM: "yes",
LOAD_PERM: "yes",
RELOAD_PERM: "yes",
+ RESTART_PERM: "yes",
RESTORE_PERM: "yes",
STATUS_PERM: "yes",
TEST_CLUSTER_PERM: "yes",
@@ -129,7 +127,6 @@ func InitializePerms() {
CREATE_DUMP_PERM: "yes",
CREATE_CLUSTER_PERM: "yes",
CREATE_FAILOVER_PERM: "yes",
- CREATE_INGEST_PERM: "yes",
CREATE_NAMESPACE_PERM: "yes",
CREATE_PGADMIN_PERM: "yes",
CREATE_PGBOUNCER_PERM: "yes",
@@ -146,7 +143,6 @@ func InitializePerms() {
// DELETE
DELETE_BACKUP_PERM: "yes",
DELETE_CLUSTER_PERM: "yes",
- DELETE_INGEST_PERM: "yes",
DELETE_NAMESPACE_PERM: "yes",
DELETE_PGADMIN_PERM: "yes",
DELETE_PGBOUNCER_PERM: "yes",
@@ -160,7 +156,6 @@ func InitializePerms() {
SHOW_BACKUP_PERM: "yes",
SHOW_CLUSTER_PERM: "yes",
SHOW_CONFIG_PERM: "yes",
- SHOW_INGEST_PERM: "yes",
SHOW_NAMESPACE_PERM: "yes",
SHOW_PGADMIN_PERM: "yes",
SHOW_PGBOUNCER_PERM: "yes",
From f7a6b332baee087129a25bf7c4907e9dd885fd4d Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sun, 17 Jan 2021 10:40:22 -0500
Subject: [PATCH 56/77] Remove references to `--autofail` flag
This has been gone for a bit. Replace with `--enable-autofail`
and `--disable-autofail`.
Issue: #2214
---
docs/content/architecture/disaster-recovery.md | 2 +-
docs/content/pgo-client/common-tasks.md | 2 +-
docs/content/pgo-client/reference/pgo_update.md | 4 ++--
docs/content/pgo-client/reference/pgo_update_cluster.md | 2 +-
internal/apiserver/clusterservice/clusterimpl.go | 2 +-
internal/apiserver/clusterservice/clusterservice.go | 4 ++--
pgo/cmd/update.go | 6 +++---
7 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/docs/content/architecture/disaster-recovery.md b/docs/content/architecture/disaster-recovery.md
index deee66dcc5..7833661e07 100644
--- a/docs/content/architecture/disaster-recovery.md
+++ b/docs/content/architecture/disaster-recovery.md
@@ -196,7 +196,7 @@ to re-enable autofail if you would like your PostgreSQL cluster to be
highly-available. You can re-enable autofail with this command:
```shell
-pgo update cluster hacluster --autofail=true
+pgo update cluster hacluster --enable-autofail
```
## Scheduling Backups
diff --git a/docs/content/pgo-client/common-tasks.md b/docs/content/pgo-client/common-tasks.md
index 4c3ed07564..6fe881f1cd 100644
--- a/docs/content/pgo-client/common-tasks.md
+++ b/docs/content/pgo-client/common-tasks.md
@@ -744,7 +744,7 @@ high availability on the PostgreSQL cluster manually. You can re-enable high
availability by executing the following command:
```
-pgo update cluster hacluster --autofail=true
+pgo update cluster hacluster --enable-autofail
```
### Logical Backups (`pg_dump` / `pg_dumpall`)
diff --git a/docs/content/pgo-client/reference/pgo_update.md b/docs/content/pgo-client/reference/pgo_update.md
index 6afaed445c..cc42f9cd62 100644
--- a/docs/content/pgo-client/reference/pgo_update.md
+++ b/docs/content/pgo-client/reference/pgo_update.md
@@ -9,8 +9,8 @@ Update a pgouser, pgorole, or cluster
The update command allows you to update a pgouser, pgorole, or cluster. For example:
- pgo update cluster --selector=name=mycluster --autofail=false
- pgo update cluster --all --autofail=true
+ pgo update cluster --selector=name=mycluster --disable-autofail
+ pgo update cluster --all --enable-autofail
pgo update namespace mynamespace
pgo update pgbouncer mycluster --rotate-password
pgo update pgorole somerole --pgorole-permission="Cat"
diff --git a/docs/content/pgo-client/reference/pgo_update_cluster.md b/docs/content/pgo-client/reference/pgo_update_cluster.md
index fa3e1b128d..4350d7d073 100644
--- a/docs/content/pgo-client/reference/pgo_update_cluster.md
+++ b/docs/content/pgo-client/reference/pgo_update_cluster.md
@@ -9,7 +9,7 @@ Update a PostgreSQL cluster
Update a PostgreSQL cluster. For example:
- pgo update cluster mycluster --autofail=false
+ pgo update cluster mycluster --disable-autofail
pgo update cluster mycluster myothercluster --disable-autofail
pgo update cluster --selector=name=mycluster --disable-autofail
pgo update cluster --all --enable-autofail
diff --git a/internal/apiserver/clusterservice/clusterimpl.go b/internal/apiserver/clusterservice/clusterimpl.go
index 093773ab8d..2def7973b8 100644
--- a/internal/apiserver/clusterservice/clusterimpl.go
+++ b/internal/apiserver/clusterservice/clusterimpl.go
@@ -1802,7 +1802,7 @@ func UpdateCluster(request *msgs.UpdateClusterRequest) msgs.UpdateClusterRespons
for _, cluster := range clusterList.Items {
- //set autofail=true or false on each pgcluster CRD
+ // set --enable-autofail / --disable-autofail on each pgcluster CRD
// Make the change based on the value of Autofail vis-a-vis UpdateClusterAutofailStatus
switch request.Autofail {
case msgs.UpdateClusterAutofailEnable:
diff --git a/internal/apiserver/clusterservice/clusterservice.go b/internal/apiserver/clusterservice/clusterservice.go
index eac046a580..9d1a3a29e5 100644
--- a/internal/apiserver/clusterservice/clusterservice.go
+++ b/internal/apiserver/clusterservice/clusterservice.go
@@ -306,8 +306,8 @@ func TestClusterHandler(w http.ResponseWriter, r *http.Request) {
}
// UpdateClusterHandler ...
-// pgo update cluster mycluster --autofail=true
-// pgo update cluster --selector=env=research --autofail=false
+// pgo update cluster mycluster --enable-autofail
+// pgo update cluster --selector=env=research --disable-autofail
// returns a UpdateClusterResponse
func UpdateClusterHandler(w http.ResponseWriter, r *http.Request) {
// swagger:operation POST /clustersupdate clusterservice clustersupdate
diff --git a/pgo/cmd/update.go b/pgo/cmd/update.go
index 9059d3b96d..c120f23a5d 100644
--- a/pgo/cmd/update.go
+++ b/pgo/cmd/update.go
@@ -143,8 +143,8 @@ var UpdateCmd = &cobra.Command{
Short: "Update a pgouser, pgorole, or cluster",
Long: `The update command allows you to update a pgouser, pgorole, or cluster. For example:
- pgo update cluster --selector=name=mycluster --autofail=false
- pgo update cluster --all --autofail=true
+ pgo update cluster --selector=name=mycluster --disable-autofail
+ pgo update cluster --all --enable-autofail
pgo update namespace mynamespace
pgo update pgbouncer mycluster --rotate-password
pgo update pgorole somerole --pgorole-permission="Cat"
@@ -189,7 +189,7 @@ var UpdateClusterCmd = &cobra.Command{
Short: "Update a PostgreSQL cluster",
Long: `Update a PostgreSQL cluster. For example:
- pgo update cluster mycluster --autofail=false
+ pgo update cluster mycluster --disable-autofail
pgo update cluster mycluster myothercluster --disable-autofail
pgo update cluster --selector=name=mycluster --disable-autofail
pgo update cluster --all --enable-autofail`,
From 93798e479547da8de25c6c7d889dc1951646c88c Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sun, 17 Jan 2021 10:52:55 -0500
Subject: [PATCH 57/77] Adjust replica creation logic as part of a standby
cluster
This ensures an explicit call of standby creation after receiving
a notification that a stanza for the cluster was successfully
created.
Co-authored-by: Andrew L'Ecuyer
---
internal/controller/job/backresthandler.go | 3 +++
1 file changed, 3 insertions(+)
diff --git a/internal/controller/job/backresthandler.go b/internal/controller/job/backresthandler.go
index 173de9b734..363009b539 100644
--- a/internal/controller/job/backresthandler.go
+++ b/internal/controller/job/backresthandler.go
@@ -223,6 +223,9 @@ func (c *Controller) handleBackrestStanzaCreateUpdate(job *apiv1.Job) error {
log.Debugf("job Controller: standby cluster %s will now be set to an initialized "+
"status", clusterName)
controller.SetClusterInitializedStatus(c.JobClient, clusterName, namespace)
+
+ // now initialize the creation of any replica
+ controller.InitializeReplicaCreation(c.JobClient, clusterName, namespace)
return nil
}
From d8a482de22215c4c04453caed4d66fa09fa8b721 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sun, 17 Jan 2021 21:44:41 -0500
Subject: [PATCH 58/77] Update label validation to match Kubernetes rules
The validation rules for certain kinds of keys are now covered,
and values are properly validated against what Kubernetes expects.
Issue: [ch10197]
Issue: #2215
---
internal/apiserver/labelservice/labelimpl.go | 63 +++++++++++++++-----
1 file changed, 48 insertions(+), 15 deletions(-)
diff --git a/internal/apiserver/labelservice/labelimpl.go b/internal/apiserver/labelservice/labelimpl.go
index 47282ca487..39ff692264 100644
--- a/internal/apiserver/labelservice/labelimpl.go
+++ b/internal/apiserver/labelservice/labelimpl.go
@@ -16,8 +16,13 @@ limitations under the License.
*/
import (
+<<<<<<< HEAD
"encoding/json"
"errors"
+=======
+ "context"
+ "fmt"
+>>>>>>> 5c56a341d... Update label validation to match Kubernetes rules
"strings"
"github.com/crunchydata/postgres-operator/internal/apiserver"
@@ -55,7 +60,7 @@ func Label(request *msgs.LabelRequest, ns, pgouser string) msgs.LabelResponse {
labelsMap, err = validateLabel(request.LabelCmdLabel, ns)
if err != nil {
resp.Status.Code = msgs.Error
- resp.Status.Msg = "labels not formatted correctly"
+ resp.Status.Msg = err.Error()
return resp
}
@@ -259,29 +264,57 @@ func PatchPgcluster(newLabels map[string]string, oldCRD crv1.Pgcluster, ns strin
}
-func validateLabel(LabelCmdLabel, ns string) (map[string]string, error) {
- var err error
- labelMap := make(map[string]string)
- userValues := strings.Split(LabelCmdLabel, ",")
- for _, v := range userValues {
+// validateLabel validates if the input is a valid Kubernetes label
+//
+// A label is composed of a key and value.
+//
+// The key can either be a name or have an optional prefix that i
+// terminated by a "/", e.g. "prefix/name"
+//
+// The name must be a valid DNS 1123 value
+// THe prefix must be a valid DNS 1123 subdomain
+//
+// The value can be validated by machinery provided by Kubenretes
+//
+// Ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
+func validateLabel(LabelCmdLabel string) (map[string]string, error) {
+ labelMap := map[string]string{}
+
+ for _, v := range strings.Split(LabelCmdLabel, ",") {
pair := strings.Split(v, "=")
if len(pair) != 2 {
- log.Error("label format incorrect, requires name=value")
- return labelMap, errors.New("label format incorrect, requires name=value")
+ return labelMap, fmt.Errorf("label format incorrect, requires key=value")
}
- errs := validation.IsDNS1035Label(pair[0])
- if len(errs) > 0 {
- return labelMap, errors.New("label format incorrect, requires name=value " + errs[0])
+ // first handle the key
+ keyParts := strings.Split(pair[0], "/")
+
+ switch len(keyParts) {
+ default:
+ return labelMap, fmt.Errorf("invalid key for " + v)
+ case 2:
+ if errs := validation.IsDNS1123Subdomain(keyParts[0]); len(errs) > 0 {
+ return labelMap, fmt.Errorf("invalid key for %s: %s", v, strings.Join(errs, ","))
+ }
+
+ if errs := validation.IsDNS1123Label(keyParts[1]); len(errs) > 0 {
+ return labelMap, fmt.Errorf("invalid key for %s: %s", v, strings.Join(errs, ","))
+ }
+ case 1:
+ if errs := validation.IsDNS1123Label(keyParts[0]); len(errs) > 0 {
+ return labelMap, fmt.Errorf("invalid key for %s: %s", v, strings.Join(errs, ","))
+ }
}
- errs = validation.IsDNS1035Label(pair[1])
- if len(errs) > 0 {
- return labelMap, errors.New("label format incorrect, requires name=value " + errs[0])
+
+ // handle the value
+ if errs := validation.IsValidLabelValue(pair[1]); len(errs) > 0 {
+ return labelMap, fmt.Errorf("invalid value for %s: %s", v, strings.Join(errs, ","))
}
labelMap[pair[0]] = pair[1]
}
- return labelMap, err
+
+ return labelMap, nil
}
// DeleteLabel ...
From 5b61c9ce39bd5f1f893dcfc7c0f38ea3c651a9ba Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 18 Jan 2021 10:23:59 -0500
Subject: [PATCH 59/77] Refactor of label validation function
This moves the function to a common area in the API code and adds
some much needed testing to it.
---
internal/apiserver/common.go | 57 +++++++++++++++++
internal/apiserver/common_test.go | 63 +++++++++++++++++++
internal/apiserver/labelservice/labelimpl.go | 65 +-------------------
3 files changed, 122 insertions(+), 63 deletions(-)
diff --git a/internal/apiserver/common.go b/internal/apiserver/common.go
index fcc8e3c545..34568f3616 100644
--- a/internal/apiserver/common.go
+++ b/internal/apiserver/common.go
@@ -27,6 +27,7 @@ import (
kerrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/util/validation"
)
const (
@@ -45,6 +46,8 @@ var (
// ErrDBContainerNotFound is an error that indicates that a "database" container
// could not be found in a specific pod
ErrDBContainerNotFound = errors.New("\"database\" container not found in pod")
+ // ErrLabelInvalid indicates that a label is invalid
+ ErrLabelInvalid = errors.New("invalid label")
// ErrStandbyNotAllowed contains the error message returned when an API call is not
// permitted because it involves a cluster that is in standby mode
ErrStandbyNotAllowed = errors.New("Action not permitted because standby mode is enabled")
@@ -110,6 +113,60 @@ func IsValidPVC(pvcName, ns string) bool {
return pvc != nil
}
+// ValidateLabel is derived from a legacy method and validates if the input is a
+// valid Kubernetes label.
+//
+// A label is composed of a key and value.
+//
+// The key can either be a name or have an optional prefix that i
+// terminated by a "/", e.g. "prefix/name"
+//
+// The name must be a valid DNS 1123 value
+// THe prefix must be a valid DNS 1123 subdomain
+//
+// The value can be validated by machinery provided by Kubenretes
+//
+// Ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
+func ValidateLabel(labelStr string) (map[string]string, error) {
+ labelMap := map[string]string{}
+
+ for _, v := range strings.Split(labelStr, ",") {
+ pair := strings.Split(v, "=")
+ if len(pair) != 2 {
+ return labelMap, fmt.Errorf("%w: label format incorrect, requires key=value", ErrLabelInvalid)
+ }
+
+ // first handle the key
+ keyParts := strings.Split(pair[0], "/")
+
+ switch len(keyParts) {
+ default:
+ return labelMap, fmt.Errorf("%w: invalid key for "+v, ErrLabelInvalid)
+ case 2:
+ if errs := validation.IsDNS1123Subdomain(keyParts[0]); len(errs) > 0 {
+ return labelMap, fmt.Errorf("%w: invalid key for %s: %s", ErrLabelInvalid, v, strings.Join(errs, ","))
+ }
+
+ if errs := validation.IsDNS1123Label(keyParts[1]); len(errs) > 0 {
+ return labelMap, fmt.Errorf("%w: invalid key for %s: %s", ErrLabelInvalid, v, strings.Join(errs, ","))
+ }
+ case 1:
+ if errs := validation.IsDNS1123Label(keyParts[0]); len(errs) > 0 {
+ return labelMap, fmt.Errorf("%w: invalid key for %s: %s", ErrLabelInvalid, v, strings.Join(errs, ","))
+ }
+ }
+
+ // handle the value
+ if errs := validation.IsValidLabelValue(pair[1]); len(errs) > 0 {
+ return labelMap, fmt.Errorf("%w: invalid value for %s: %s", ErrLabelInvalid, v, strings.Join(errs, ","))
+ }
+
+ labelMap[pair[0]] = pair[1]
+ }
+
+ return labelMap, nil
+}
+
// ValidateResourceRequestLimit validates that a Kubernetes Requests/Limit pair
// is valid, both by validating the values are valid quantity values, and then
// by checking that the limit >= request. This also needs to check against the
diff --git a/internal/apiserver/common_test.go b/internal/apiserver/common_test.go
index 6ec95b7066..c36cb7bfa3 100644
--- a/internal/apiserver/common_test.go
+++ b/internal/apiserver/common_test.go
@@ -16,11 +16,74 @@ limitations under the License.
*/
import (
+ "errors"
+ "fmt"
+ "strings"
"testing"
"k8s.io/apimachinery/pkg/api/resource"
)
+func TestValidateLabel(t *testing.T) {
+ t.Run("valid", func(t *testing.T) {
+ inputs := []map[string]string{
+ map[string]string{"key": "value"},
+ map[string]string{"example.com/key": "value"},
+ map[string]string{"key1": "value1", "key2": "value2"},
+ }
+
+ for _, input := range inputs {
+ labelStr := ""
+
+ for k, v := range input {
+ labelStr += fmt.Sprintf("%s=%s,", k, v)
+ }
+
+ labelStr = strings.Trim(labelStr, ",")
+
+ t.Run(labelStr, func(*testing.T) {
+ labels, err := ValidateLabel(labelStr)
+
+ if err != nil {
+ t.Fatalf("expected no error, got: %s", err.Error())
+ }
+
+ for k := range labels {
+ if v, ok := input[k]; !(ok || v == labels[k]) {
+ t.Fatalf("label values do not matched (%s vs. %s)", input[k], labels[k])
+ }
+ }
+ })
+ }
+ })
+
+ t.Run("invalid", func(t *testing.T) {
+ inputs := []string{
+ "key",
+ "key=value=value",
+ "key=value,",
+ "b@d=value",
+ "b@d-prefix/key=value",
+ "really/bad/prefix/key=value",
+ "key=v\\alue",
+ }
+
+ for _, input := range inputs {
+ t.Run(input, func(t *testing.T) {
+ _, err := ValidateLabel(input)
+
+ if err == nil {
+ t.Fatalf("expected an invalid input error.")
+ }
+
+ if !errors.Is(err, ErrLabelInvalid) {
+ t.Fatalf("expected an ErrLabelInvalid error.")
+ }
+ })
+ }
+ })
+}
+
func TestValidateResourceRequestLimit(t *testing.T) {
t.Run("valid", func(t *testing.T) {
resources := []struct{ request, limit, defaultRequest string }{
diff --git a/internal/apiserver/labelservice/labelimpl.go b/internal/apiserver/labelservice/labelimpl.go
index 39ff692264..5a029a3f8a 100644
--- a/internal/apiserver/labelservice/labelimpl.go
+++ b/internal/apiserver/labelservice/labelimpl.go
@@ -16,14 +16,7 @@ limitations under the License.
*/
import (
-<<<<<<< HEAD
"encoding/json"
- "errors"
-=======
- "context"
- "fmt"
->>>>>>> 5c56a341d... Update label validation to match Kubernetes rules
- "strings"
"github.com/crunchydata/postgres-operator/internal/apiserver"
"github.com/crunchydata/postgres-operator/internal/config"
@@ -37,7 +30,6 @@ import (
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
- "k8s.io/apimachinery/pkg/util/validation"
)
// Label ... 2 forms ...
@@ -57,7 +49,7 @@ func Label(request *msgs.LabelRequest, ns, pgouser string) msgs.LabelResponse {
return resp
}
- labelsMap, err = validateLabel(request.LabelCmdLabel, ns)
+ labelsMap, err = apiserver.ValidateLabel(request.LabelCmdLabel)
if err != nil {
resp.Status.Code = msgs.Error
resp.Status.Msg = err.Error()
@@ -264,59 +256,6 @@ func PatchPgcluster(newLabels map[string]string, oldCRD crv1.Pgcluster, ns strin
}
-// validateLabel validates if the input is a valid Kubernetes label
-//
-// A label is composed of a key and value.
-//
-// The key can either be a name or have an optional prefix that i
-// terminated by a "/", e.g. "prefix/name"
-//
-// The name must be a valid DNS 1123 value
-// THe prefix must be a valid DNS 1123 subdomain
-//
-// The value can be validated by machinery provided by Kubenretes
-//
-// Ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
-func validateLabel(LabelCmdLabel string) (map[string]string, error) {
- labelMap := map[string]string{}
-
- for _, v := range strings.Split(LabelCmdLabel, ",") {
- pair := strings.Split(v, "=")
- if len(pair) != 2 {
- return labelMap, fmt.Errorf("label format incorrect, requires key=value")
- }
-
- // first handle the key
- keyParts := strings.Split(pair[0], "/")
-
- switch len(keyParts) {
- default:
- return labelMap, fmt.Errorf("invalid key for " + v)
- case 2:
- if errs := validation.IsDNS1123Subdomain(keyParts[0]); len(errs) > 0 {
- return labelMap, fmt.Errorf("invalid key for %s: %s", v, strings.Join(errs, ","))
- }
-
- if errs := validation.IsDNS1123Label(keyParts[1]); len(errs) > 0 {
- return labelMap, fmt.Errorf("invalid key for %s: %s", v, strings.Join(errs, ","))
- }
- case 1:
- if errs := validation.IsDNS1123Label(keyParts[0]); len(errs) > 0 {
- return labelMap, fmt.Errorf("invalid key for %s: %s", v, strings.Join(errs, ","))
- }
- }
-
- // handle the value
- if errs := validation.IsValidLabelValue(pair[1]); len(errs) > 0 {
- return labelMap, fmt.Errorf("invalid value for %s: %s", v, strings.Join(errs, ","))
- }
-
- labelMap[pair[0]] = pair[1]
- }
-
- return labelMap, nil
-}
-
// DeleteLabel ...
// pgo delete label mycluster yourcluster --label=env=prod
// pgo delete label --label=env=prod --selector=group=somegroup
@@ -334,7 +273,7 @@ func DeleteLabel(request *msgs.DeleteLabelRequest, ns string) msgs.LabelResponse
return resp
}
- labelsMap, err = validateLabel(request.LabelCmdLabel, ns)
+ labelsMap, err = apiserver.ValidateLabel(request.LabelCmdLabel)
if err != nil {
resp.Status.Code = msgs.Error
resp.Status.Msg = "labels not formatted correctly"
From 9f9941e3c677d99d0ac241d8c53a6923e545136c Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 18 Jan 2021 10:31:28 -0500
Subject: [PATCH 60/77] Unify label validation strategy across API functions
The `pgo create cluster` command was not using the same label
validation as the other label commands were using.
Issue: [ch10201]
---
.../apiserver/clusterservice/clusterimpl.go | 18 ++++++------------
1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/internal/apiserver/clusterservice/clusterimpl.go b/internal/apiserver/clusterservice/clusterimpl.go
index 2def7973b8..155a0d959d 100644
--- a/internal/apiserver/clusterservice/clusterimpl.go
+++ b/internal/apiserver/clusterservice/clusterimpl.go
@@ -581,18 +581,12 @@ func CreateCluster(request *msgs.CreateClusterRequest, ns, pgouser string) msgs.
return resp
}
- userLabelsMap := make(map[string]string)
- if request.UserLabels != "" {
- labels := strings.Split(request.UserLabels, ",")
- for _, v := range labels {
- p := strings.Split(v, "=")
- if len(p) < 2 {
- resp.Status.Code = msgs.Error
- resp.Status.Msg = "invalid labels format"
- return resp
- }
- userLabelsMap[p[0]] = p[1]
- }
+ userLabelsMap, err := apiserver.ValidateLabel(request.UserLabels)
+
+ if err != nil {
+ resp.Status.Code = msgs.Error
+ resp.Status.Msg = err.Error()
+ return resp
}
// validate any parameters provided to bootstrap the cluster from an existing data source
From 659077e6db4787ecee07da34290c86dc54239489 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 22 Jan 2021 09:35:13 -0500
Subject: [PATCH 61/77] Fix compilation errors from bad backpatch
The apiserver binary was missing one import, and rmdata required
an update to a data structure.
---
internal/apiserver/common.go | 1 +
pgo-rmdata/rmdata/process.go | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/internal/apiserver/common.go b/internal/apiserver/common.go
index 34568f3616..314c45cb3a 100644
--- a/internal/apiserver/common.go
+++ b/internal/apiserver/common.go
@@ -19,6 +19,7 @@ import (
"errors"
"fmt"
"strconv"
+ "strings"
"github.com/crunchydata/postgres-operator/internal/config"
"github.com/crunchydata/postgres-operator/internal/kubeapi"
diff --git a/pgo-rmdata/rmdata/process.go b/pgo-rmdata/rmdata/process.go
index 2848e82eab..3164440e87 100644
--- a/pgo-rmdata/rmdata/process.go
+++ b/pgo-rmdata/rmdata/process.go
@@ -222,7 +222,7 @@ func removeBackupSecrets(request Request) {
// -pgha-config (stores a Patroni config file in YAML format)
func removeClusterConfigmaps(request Request) {
// Store the derived names of the three configmaps in an array
- clusterConfigmaps := [4]string{
+ clusterConfigmaps := []string{
// first, derive the name of the PG HA default configmap, which is
// "`clusterName`-`LABEL_PGHA_CONFIGMAP`"
fmt.Sprintf("%s-%s", request.ClusterName, config.LABEL_PGHA_CONFIGMAP),
From 992b1d855751ef74b66106f192f38a2c059658b7 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 29 Jan 2021 13:13:43 -0500
Subject: [PATCH 62/77] Add support for the pgBackRest `--compress-type` flag
Selecting the compression type for pgBackRest is supported across
recent Postgres Operator releases, but the CLI was not allowing for
this flag to be passed through.
This allows for the selection of pgBackRest compression type amongst
the allowable methods in the container, which are none, bz2, gz, and
lz4. Currently zst does not ship within the container.
Issue: [ch10287]
---
.../backupoptions/backupoptionsutil.go | 7 ++++
.../backupoptions/backupoptionsutil_test.go | 40 +++++++++++++++++++
.../backupoptions/pgbackrestoptions.go | 6 +++
3 files changed, 53 insertions(+)
create mode 100644 internal/apiserver/backupoptions/backupoptionsutil_test.go
diff --git a/internal/apiserver/backupoptions/backupoptionsutil.go b/internal/apiserver/backupoptions/backupoptionsutil.go
index c1c3c69f1b..c8efed16b5 100644
--- a/internal/apiserver/backupoptions/backupoptionsutil.go
+++ b/internal/apiserver/backupoptions/backupoptionsutil.go
@@ -167,6 +167,13 @@ func isValidCompressLevel(compressLevel int) bool {
}
}
+// isValidCompressType checks that the compression type passed in matches one
+// of the ones supported by pgBackRest. However, it presently does not support
+// `zst`
+func isValidCompressType(compressType string) bool {
+ return compressType == "gz" || compressType == "bz2" || compressType == "lz4" || compressType == "none"
+}
+
// isValidRetentionRange validates that pgBackrest Full, Diff or Archive
// retention option value is set within the allowable range.
// allowed: 1-9999999
diff --git a/internal/apiserver/backupoptions/backupoptionsutil_test.go b/internal/apiserver/backupoptions/backupoptionsutil_test.go
new file mode 100644
index 0000000000..44048f15d8
--- /dev/null
+++ b/internal/apiserver/backupoptions/backupoptionsutil_test.go
@@ -0,0 +1,40 @@
+package backupoptions
+
+/*
+Copyright 2021 Crunchy Data Solutions, Inc.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import "testing"
+
+func TestIsValidCompressType(t *testing.T) {
+ tests := []struct {
+ compressType string
+ expected bool
+ }{
+ {compressType: "bz2", expected: true},
+ {compressType: "gz", expected: true},
+ {compressType: "none", expected: true},
+ {compressType: "lz4", expected: true},
+ {compressType: "zst", expected: false},
+ {compressType: "bogus", expected: false},
+ }
+
+ for _, test := range tests {
+ t.Run(test.compressType, func(t *testing.T) {
+ if isValidCompressType(test.compressType) != test.expected {
+ t.Fatalf("expected %q to be %t", test.compressType, test.expected)
+ }
+ })
+ }
+}
diff --git a/internal/apiserver/backupoptions/pgbackrestoptions.go b/internal/apiserver/backupoptions/pgbackrestoptions.go
index 026fb45501..2deb8d2dcf 100644
--- a/internal/apiserver/backupoptions/pgbackrestoptions.go
+++ b/internal/apiserver/backupoptions/pgbackrestoptions.go
@@ -82,6 +82,7 @@ type pgBackRestBackupOptions struct {
NoCompress bool `flag:"no-compress"`
CompressLevel int `flag:"compress-level"`
CompressLevelNetwork int `flag:"compress-level-network"`
+ CompressType string `flag:"compress-type"`
DBTimeout int `flag:"db-timeout"`
Delta bool `flag:"no-delta"`
ProcessMax int `flag:"process-max"`
@@ -146,6 +147,11 @@ func (backRestBackupOpts pgBackRestBackupOptions) validate(setFlagFieldNames []s
err := errors.New("Invalid network compress level for pgBackRest backup")
errstrings = append(errstrings, err.Error())
}
+ case "CompressType":
+ if !isValidCompressType(backRestBackupOpts.CompressType) {
+ err := errors.New("Invalid compress type for pgBackRest backup")
+ errstrings = append(errstrings, err.Error())
+ }
case "LogLevelConsole":
if !isValidBackrestLogLevel(backRestBackupOpts.LogLevelConsole) {
err := errors.New("Invalid log level for pgBackRest backup")
From c780536e71440a4ac4fa671ab3b71d7420d12c14 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sun, 31 Jan 2021 12:37:40 -0500
Subject: [PATCH 63/77] Only consider running Pods for scheduled backups
Though the scheduled backup code would bail if it found multiple
pgBackRest repository Pods, this ensures that only running
pgBackRest Pods would be considered.
Issue: #2237
---
pgo-scheduler/scheduler/pgbackrest.go | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/pgo-scheduler/scheduler/pgbackrest.go b/pgo-scheduler/scheduler/pgbackrest.go
index 97d55672c6..98f6c4cbd6 100644
--- a/pgo-scheduler/scheduler/pgbackrest.go
+++ b/pgo-scheduler/scheduler/pgbackrest.go
@@ -23,8 +23,10 @@ import (
"github.com/crunchydata/postgres-operator/internal/kubeapi"
crv1 "github.com/crunchydata/postgres-operator/pkg/apis/crunchydata.com/v1"
log "github.com/sirupsen/logrus"
+ v1 "k8s.io/api/core/v1"
kerrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/util/wait"
)
@@ -134,17 +136,20 @@ func (b BackRestBackupJob) Run() {
return
}
- selector := fmt.Sprintf("%s=%s,pgo-backrest-repo=true", config.LABEL_PG_CLUSTER, b.cluster)
- pods, err := kubeClient.CoreV1().Pods(b.namespace).List(metav1.ListOptions{LabelSelector: selector})
+ selector := fmt.Sprintf("%s=%s,%s", config.LABEL_PG_CLUSTER, b.cluster, config.LABEL_PGO_BACKREST_REPO)
+ options := metav1.ListOptions{
+ FieldSelector: fields.OneTermEqualSelector("status.phase", string(v1.PodRunning)).String(),
+ LabelSelector: selector,
+ }
+
+ pods, err := kubeClient.CoreV1().Pods(b.namespace).List(options)
if err != nil {
contextLogger.WithFields(log.Fields{
"selector": selector,
"error": err,
}).Error("error getting pods from selector")
return
- }
-
- if len(pods.Items) != 1 {
+ } else if len(pods.Items) != 1 {
contextLogger.WithFields(log.Fields{
"selector": selector,
"error": err,
From bb771cf448d9ef60b092d332af00e3b6b395675e Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 1 Feb 2021 16:58:08 -0500
Subject: [PATCH 64/77] Use proper bootstrap template for debug output
This also moves the debugging line before the actual template
execution to make it possible to more easily debug any issues
if the template were customized.
---
internal/operator/cluster/clusterlogic.go | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/internal/operator/cluster/clusterlogic.go b/internal/operator/cluster/clusterlogic.go
index 9fb6320436..03bde13213 100644
--- a/internal/operator/cluster/clusterlogic.go
+++ b/internal/operator/cluster/clusterlogic.go
@@ -98,15 +98,16 @@ func addClusterBootstrapJob(clientset kubernetes.Interface, client *rest.RESTCli
return err
}
+ if operator.CRUNCHY_DEBUG {
+ _ = config.BootstrapTemplate.Execute(os.Stdout, bootstrapFields)
+ }
+
var bootstrapSpec bytes.Buffer
+
if err := config.BootstrapTemplate.Execute(&bootstrapSpec, bootstrapFields); err != nil {
return err
}
- if operator.CRUNCHY_DEBUG {
- config.DeploymentTemplate.Execute(os.Stdout, bootstrapFields)
- }
-
job := &batchv1.Job{}
if err := json.Unmarshal(bootstrapSpec.Bytes(), job); err != nil {
return err
From 54c8437c1178db3028790dd1c518eacc732b08c2 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Thu, 11 Feb 2021 18:42:46 -0500
Subject: [PATCH 65/77] Modify primary check before taking backup
This was using a legacy method and is now modified to use
the method used by other Operator operations to check for
both the primary cluster and its availability.
---
.../apiserver/backrestservice/backrestimpl.go | 56 +++++--------------
1 file changed, 14 insertions(+), 42 deletions(-)
diff --git a/internal/apiserver/backrestservice/backrestimpl.go b/internal/apiserver/backrestservice/backrestimpl.go
index 00280732cc..8c1157fbc3 100644
--- a/internal/apiserver/backrestservice/backrestimpl.go
+++ b/internal/apiserver/backrestservice/backrestimpl.go
@@ -215,10 +215,9 @@ func CreateBackup(request *msgs.CreateBackrestBackupRequest, ns, pgouser string)
}
// check if primary is ready
- if err := isPrimaryReady(&cluster, ns); err != nil {
- log.Error(err)
+ if !isPrimaryReady(cluster) {
resp.Status.Code = msgs.Error
- resp.Status.Msg = err.Error()
+ resp.Status.Msg = "primary pod is not in Ready state"
return resp
}
@@ -300,54 +299,27 @@ func getBackrestRepoPodName(cluster *crv1.Pgcluster, ns string) (string, error)
return repopodName, err
}
-func isPrimary(pod *v1.Pod, clusterName string) bool {
- if pod.ObjectMeta.Labels[config.LABEL_SERVICE_NAME] == clusterName {
- return true
- }
- return false
-
-}
-
-func isReady(pod *v1.Pod) bool {
- readyCount := 0
- containerCount := 0
- for _, stat := range pod.Status.ContainerStatuses {
- containerCount++
- if stat.Ready {
- readyCount++
- }
- }
- if readyCount != containerCount {
- return false
- }
- return true
-
-}
-
// isPrimaryReady goes through the pod list to first identify the
// Primary pod and, once identified, determine if it is in a
// ready state. If not, it returns an error, otherwise it returns
// a nil value
-func isPrimaryReady(cluster *crv1.Pgcluster, ns string) error {
- primaryReady := false
+func isPrimaryReady(cluster *crv1.Pgcluster) bool {
+ options := metav1.ListOptions{
+ FieldSelector: fields.OneTermEqualSelector("status.phase", string(v1.PodRunning)).String(),
+ LabelSelector: fields.AndSelectors(
+ fields.OneTermEqualSelector(config.LABEL_PG_CLUSTER, cluster.Name),
+ fields.OneTermEqualSelector(config.LABEL_PGHA_ROLE, config.LABEL_PGHA_ROLE_PRIMARY),
+ ).String(),
+ }
- selector := fmt.Sprintf("%s=%s,%s=%s", config.LABEL_PG_CLUSTER, cluster.Name,
- config.LABEL_PGHA_ROLE, config.LABEL_PGHA_ROLE_PRIMARY)
+ pods, err := apiserver.Clientset.CoreV1().Pods(cluster.Namespace).List(options)
- pods, err := apiserver.Clientset.CoreV1().Pods(ns).List(metav1.ListOptions{LabelSelector: selector})
if err != nil {
- return err
- }
- for _, p := range pods.Items {
- if isPrimary(&p, cluster.Spec.Name) && isReady(&p) {
- primaryReady = true
- }
+ log.Error(err)
+ return false
}
- if primaryReady == false {
- return errors.New("primary pod is not in Ready state")
- }
- return nil
+ return len(pods.Items) > 0
}
// ShowBackrest ...
From 8e5163e9a5ebe4dd009ca2f1478d333c1424f292 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 22 Feb 2021 14:27:36 -0500
Subject: [PATCH 66/77] Allow for the existence of no labels when creating a
cluster
This fell on the trap of the "empty string being split", which
by default creates a single entry in an array. As an empty string
is not a valid label, this would fail on the default command.
---
internal/apiserver/common.go | 5 +++++
internal/apiserver/common_test.go | 5 +++++
2 files changed, 10 insertions(+)
diff --git a/internal/apiserver/common.go b/internal/apiserver/common.go
index 314c45cb3a..8fe6ead259 100644
--- a/internal/apiserver/common.go
+++ b/internal/apiserver/common.go
@@ -131,6 +131,11 @@ func IsValidPVC(pvcName, ns string) bool {
func ValidateLabel(labelStr string) (map[string]string, error) {
labelMap := map[string]string{}
+ // if this is an empty string, return
+ if strings.TrimSpace(labelStr) == "" {
+ return labelMap, nil
+ }
+
for _, v := range strings.Split(labelStr, ",") {
pair := strings.Split(v, "=")
if len(pair) != 2 {
diff --git a/internal/apiserver/common_test.go b/internal/apiserver/common_test.go
index c36cb7bfa3..4119978d46 100644
--- a/internal/apiserver/common_test.go
+++ b/internal/apiserver/common_test.go
@@ -30,12 +30,17 @@ func TestValidateLabel(t *testing.T) {
map[string]string{"key": "value"},
map[string]string{"example.com/key": "value"},
map[string]string{"key1": "value1", "key2": "value2"},
+ map[string]string{"": ""},
}
for _, input := range inputs {
labelStr := ""
for k, v := range input {
+ if k == "" && v == "" {
+ continue
+ }
+
labelStr += fmt.Sprintf("%s=%s,", k, v)
}
From 108146918c14691d60e58d9e41434e4568cb8b28 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 26 Feb 2021 09:01:52 -0500
Subject: [PATCH 67/77] Bump v4.4.3
---
Makefile | 4 +-
README.md | 2 +-
bin/push-ccp-to-gcr.sh | 2 +-
conf/postgres-operator/pgo.yaml | 4 +-
docs/config.toml | 4 +-
docs/content/Configuration/compatibility.md | 6 +++
docs/content/releases/4.4.2.md | 4 +-
docs/content/releases/4.4.3.md | 46 +++++++++++++++++++
examples/create-by-resource/fromcrd.json | 6 +--
examples/envs.sh | 2 +-
examples/load/sample-json-load-config-sc.yaml | 2 +-
examples/load/sample-json-load-config.yaml | 2 +-
examples/load/sample-load-config.yaml | 2 +-
installers/ansible/README.md | 2 +-
installers/ansible/values.yaml | 6 +--
installers/gcp-marketplace/Makefile | 2 +-
installers/gcp-marketplace/README.md | 2 +-
installers/gcp-marketplace/inventory.ini | 6 +--
installers/helm/metrics/Chart.yaml | 2 +-
installers/helm/metrics/values.yaml | 6 +--
installers/helm/postgres-operator/Chart.yaml | 2 +-
installers/helm/postgres-operator/values.yaml | 6 +--
installers/kubectl/client-setup.sh | 2 +-
.../kubectl/postgres-operator-ocp311.yml | 8 ++--
installers/kubectl/postgres-operator.yml | 8 ++--
installers/olm/Makefile | 4 +-
internal/util/util_test.go | 24 +++++-----
pkg/apis/crunchydata.com/v1/doc.go | 8 ++--
pkg/apiservermsgs/common.go | 2 +-
redhat/atomic/help.1 | 2 +-
redhat/atomic/help.md | 2 +-
31 files changed, 116 insertions(+), 64 deletions(-)
create mode 100644 docs/content/releases/4.4.3.md
diff --git a/Makefile b/Makefile
index d92ee0e944..14fb0c4c46 100644
--- a/Makefile
+++ b/Makefile
@@ -9,9 +9,9 @@ PGO_CMD ?= kubectl
PGO_IMAGE_PREFIX ?= crunchydata
PGO_IMAGE_TAG ?= $(PGO_BASEOS)-$(PGO_VERSION)
PGO_OPERATOR_NAMESPACE ?= pgo
-PGO_VERSION ?= 4.4.2
+PGO_VERSION ?= 4.4.3
PGO_PG_VERSION ?= 12
-PGO_PG_FULLVERSION ?= 12.5
+PGO_PG_FULLVERSION ?= 12.6
PGO_BACKREST_VERSION ?= 2.27
RELTMPDIR=/tmp/release.$(PGO_VERSION)
diff --git a/README.md b/README.md
index 2e4bbb5cce..8493c8f1a6 100644
--- a/README.md
+++ b/README.md
@@ -129,7 +129,7 @@ Based on your storage settings in your Kubernetes environment, you may be able t
```shell
kubectl create namespace pgo
-kubectl apply -f https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.4.2/installers/kubectl/postgres-operator.yml
+kubectl apply -f https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.4.3/installers/kubectl/postgres-operator.yml
```
Otherwise, we highly recommend following the instructions from our [Quickstart](https://access.crunchydata.com/documentation/postgres-operator/latest/quickstart/).
diff --git a/bin/push-ccp-to-gcr.sh b/bin/push-ccp-to-gcr.sh
index f8b08b88db..08b9e1e709 100755
--- a/bin/push-ccp-to-gcr.sh
+++ b/bin/push-ccp-to-gcr.sh
@@ -16,7 +16,7 @@
GCR_IMAGE_PREFIX=gcr.io/crunchy-dev-test
CCP_IMAGE_PREFIX=crunchydata
-CCP_IMAGE_TAG=centos7-12.5-4.4.2
+CCP_IMAGE_TAG=centos7-12.6-4.4.3
IMAGES=(
crunchy-prometheus
diff --git a/conf/postgres-operator/pgo.yaml b/conf/postgres-operator/pgo.yaml
index 2c60f86968..4b58df00cd 100644
--- a/conf/postgres-operator/pgo.yaml
+++ b/conf/postgres-operator/pgo.yaml
@@ -2,7 +2,7 @@ Cluster:
CCPImagePrefix: registry.developers.crunchydata.com/crunchydata
Metrics: false
Badger: false
- CCPImageTag: centos7-12.5-4.4.2
+ CCPImageTag: centos7-12.6-4.4.3
Port: 5432
PGBadgerPort: 10000
ExporterPort: 9187
@@ -81,4 +81,4 @@ Storage:
Pgo:
Audit: false
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
- PGOImageTag: centos7-4.4.2
+ PGOImageTag: centos7-4.4.3
diff --git a/docs/config.toml b/docs/config.toml
index 3e34daf864..a43e682862 100644
--- a/docs/config.toml
+++ b/docs/config.toml
@@ -25,8 +25,8 @@ disableNavChevron = false # set true to hide next/prev chevron, default is false
highlightClientSide = false # set true to use highlight.pack.js instead of the default hugo chroma highlighter
menushortcutsnewtab = true # set true to open shortcuts links to a new tab/window
enableGitInfo = true
-operatorVersion = "4.4.2"
-postgresVersion = "12.5"
+operatorVersion = "4.4.3"
+postgresVersion = "12.6"
postgisVersion = "3.0"
centosBase = "centos7"
diff --git a/docs/content/Configuration/compatibility.md b/docs/content/Configuration/compatibility.md
index 669f94aceb..99cde8fa72 100644
--- a/docs/content/Configuration/compatibility.md
+++ b/docs/content/Configuration/compatibility.md
@@ -12,6 +12,12 @@ version dependencies between the two projects. Below are the operator releases a
| Operator Release | Container Release | Postgres | PgBackrest Version
|:----------|:-------------|:------------|:--------------
+| 4.4.3 | 4.4.3 | 12.6 | 2.27 |
+|||11.11|2.27|
+|||10.16|2.27|
+|||9.6.21|2.27|
+|||9.5.25|2.27|
+||||
| 4.4.2 | 4.4.2 | 12.5 | 2.27 |
|||11.10|2.27|
|||10.15|2.27|
diff --git a/docs/content/releases/4.4.2.md b/docs/content/releases/4.4.2.md
index 06eb97de49..28e75b3832 100644
--- a/docs/content/releases/4.4.2.md
+++ b/docs/content/releases/4.4.2.md
@@ -5,11 +5,11 @@ draft: false
weight: 78
---
-Crunchy Data announces the release of the [PostgreSQL Operator](https://www.crunchydata.com/products/crunchy-postgresql-operator/) 4.4.1 on November 25, 2020.
+Crunchy Data announces the release of the [PostgreSQL Operator](https://www.crunchydata.com/products/crunchy-postgresql-operator/) 4.4.2 on November 25, 2020.
The PostgreSQL Operator is released in conjunction with the [Crunchy Container Suite](https://github.com/CrunchyData/crunchy-containers/).
-The PostgreSQL Operator 4.4.2 release includes the following software versions upgrades:
+The PostgreSQL Operator 4.4.3 release includes the following software versions upgrades:
- The PostgreSQL containers now use versions 12.5, 11.10, 10.15, 9.6.20, and 9.5.24
diff --git a/docs/content/releases/4.4.3.md b/docs/content/releases/4.4.3.md
new file mode 100644
index 0000000000..2a6fe21035
--- /dev/null
+++ b/docs/content/releases/4.4.3.md
@@ -0,0 +1,46 @@
+---
+title: "4.4.3"
+date:
+draft: false
+weight: 77
+---
+
+Crunchy Data announces the release of the [PostgreSQL Operator](https://www.crunchydata.com/products/crunchy-postgresql-operator/) 4.4.3 on March 1, 2021.
+
+The PostgreSQL Operator is released in conjunction with the [Crunchy Container Suite](https://github.com/CrunchyData/crunchy-containers/).
+
+The PostgreSQL Operator 4.4.3 release includes the following software versions upgrades:
+
+- The PostgreSQL containers now use versions 12.6, 11.11, 10.16, 9.6.21, and 9.5.25
+
+PostgreSQL Operator is tested against Kubernetes 1.17 - 1.20, OpenShift 3.11, OpenShift 4.4+, Google Kubernetes Engine (GKE), Amazon EKS, Microsoft AKS, and VMware Enterprise PKS 1.3+, and works on other Kubernetes distributions as well.
+
+## Changes
+
+- When using the `--restore-from` option on `pgo create cluster` to create a new PostgreSQL cluster, the cluster bootstrap Job is now automatically removed if it completes successfully.
+- PostgreSQL JIT compilation is explicitly disabled on new cluster creation. This prevents a memory leak that has been observed on queries coming from the metrics exporter.
+- The `--compress-type` flag is now supported for the backup options (`--backup-opts`) for pgBackRest backups with `pgo backup`. `none`, `gz`, `bz2`, and `lz4` are all supported. Presently `zst` is not supported.
+- Add the `--no-prompt` flag to `pgo upgrade`. The mechanism to disable the prompt verification was already in place, but the flag was not exposed. Reported by (@devopsevd).
+- Removes certain characters that causes issues in shell environments from consideration when using the random password generator, which is used to create default passwords or with `--rotate-password`.
+- Allow for the `--link-map` attribute for a pgBackRest option, which can help with the restore of an existing cluster to a new cluster that adds an external WAL volume.
+
+## Fixes
+
+- Fix issue where `pgo test` would indicate every Service was a replica if the cluster name contained the word `replica` in it. Reported by Jose Joye (@jose-joye).
+- Do not consider Evicted Pods as part of `pgo test`. This eliminates a behavior where faux primaries are considered as part of `pgo test`. Reported by Dennis Jacobfeuerborn (@dennisjac).
+- Fix `pgo df` to not fail in the event it tries to execute a command within a dangling container from the bootstrap process when `pgo create cluster --restore-from` is used. Reported by Ignacio J.Ortega (@IJOL).
+- `pgo df` will now only attempt to execute in running Pods, i.e. it does not attempt to run in evicted Pods. Reported by (@kseswar).
+- Ensure the sync replication ConfigMap is removed when a cluster is deleted.
+- Fix crash in shutdown logic when attempting to shut down a cluster where no primaries exist. Reported by Jeffrey den Drijver (@JeffreyDD).
+- Fix syntax in recovery check command which could lead to failures when manually promoting a standby cluster. Reported by (@SockenSalat).
+- Fix issue with pgo backup where it was unable to take a backup from a new primary after pgo failover was called. Reported by (@mesobreira).
+- Do not trigger a backup if a standby cluster fails over. Reported by (@aprilito1965).
+- Ensure `archive_mode` is forced to `on` when performing using the "restore in place" method. This ensures that the timeline is correctly incremented post-restore, which could manifest itself with various types of WAL archive failures.
+- Generally improvements to initialization of a standby cluster.
+- Ensure proper label parsing based on Kubernetes rules and that it is consistently applied across all functionality that uses labels. Reported by José Joye (@jose-joye).
+- Remove legacy `defaultMode` setting on the volume instructions for the pgBackRest repo Secret as the `readOnly` setting is used on the mount itself. Reported by (@szhang1).
+- Only attempts to start scheduled backups in running pgBackRest repository Pods. Reported by Satria Sahputra (@satriashp).
+- Allow for `Restart` API server permission to be explicitly set. Reported by Aleksander Roszig (@AleksanderRoszig).
+- Update `pgo-target` permissions to match expectations for modern Kubernetes versions.
+- During a major upgrade, ensure permissions are correct on the old data directory before running `pg_upgrade`.
+- Ensure major upgrades via `crunchy-upgrade` support PostgreSQL 12. Reported by (@lbartnicki92).
diff --git a/examples/create-by-resource/fromcrd.json b/examples/create-by-resource/fromcrd.json
index 29d4ca4341..f93a7bd406 100644
--- a/examples/create-by-resource/fromcrd.json
+++ b/examples/create-by-resource/fromcrd.json
@@ -16,7 +16,7 @@
"pg-cluster": "fromcrd",
"pg-pod-anti-affinity": "",
"pgo-backrest": "true",
- "pgo-version": "4.4.2",
+ "pgo-version": "4.4.3",
"pgouser": "pgoadmin",
"primary": "true"
},
@@ -62,7 +62,7 @@
},
"backrestResources": {},
"ccpimage": "crunchy-postgres-ha",
- "ccpimagetag": "centos7-12.5-4.4.2",
+ "ccpimagetag": "centos7-12.6-4.4.3",
"clustername": "fromcrd",
"customconfig": "",
"database": "userdb",
@@ -95,7 +95,7 @@
"userlabels": {
"crunchy_collect": "false",
"pg-pod-anti-affinity": "",
- "pgo-version": "4.4.2",
+ "pgo-version": "4.4.3",
"pgouser": "pgoadmin",
"pgo-backrest": "true"
},
diff --git a/examples/envs.sh b/examples/envs.sh
index e6bb782306..e303713464 100644
--- a/examples/envs.sh
+++ b/examples/envs.sh
@@ -20,7 +20,7 @@ export PGOROOT=$GOPATH/src/github.com/crunchydata/postgres-operator
# the version of the Operator you run is set by these vars
export PGO_IMAGE_PREFIX=registry.developers.crunchydata.com/crunchydata
export PGO_BASEOS=centos7
-export PGO_VERSION=4.4.2
+export PGO_VERSION=4.4.3
export PGO_IMAGE_TAG=$PGO_BASEOS-$PGO_VERSION
# for setting the pgo apiserver port, disabling TLS or not verifying TLS
diff --git a/examples/load/sample-json-load-config-sc.yaml b/examples/load/sample-json-load-config-sc.yaml
index 39c3e9d82b..255f5d857c 100644
--- a/examples/load/sample-json-load-config-sc.yaml
+++ b/examples/load/sample-json-load-config-sc.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.2
+PGOImageTag: centos7-4.4.3
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/examples/load/sample-json-load-config.yaml b/examples/load/sample-json-load-config.yaml
index 38f36497c3..a29a9ffb9e 100644
--- a/examples/load/sample-json-load-config.yaml
+++ b/examples/load/sample-json-load-config.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.2
+PGOImageTag: centos7-4.4.3
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/examples/load/sample-load-config.yaml b/examples/load/sample-load-config.yaml
index 3e4700e850..291dc2e1bd 100644
--- a/examples/load/sample-load-config.yaml
+++ b/examples/load/sample-load-config.yaml
@@ -1,5 +1,5 @@
PGOImagePrefix: registry.developers.crunchydata.com/crunchydata
-PGOImageTag: centos7-4.4.2
+PGOImageTag: centos7-4.4.3
DbDatabase: userdb
DbUser: postgres
DbPort: 5432
diff --git a/installers/ansible/README.md b/installers/ansible/README.md
index dc62f5d4c5..7918e35439 100644
--- a/installers/ansible/README.md
+++ b/installers/ansible/README.md
@@ -4,7 +4,7 @@
-Latest Release: 4.4.2
+Latest Release: 4.4.3
## General
diff --git a/installers/ansible/values.yaml b/installers/ansible/values.yaml
index 53e8b9b577..eaf6cbdb4e 100644
--- a/installers/ansible/values.yaml
+++ b/installers/ansible/values.yaml
@@ -17,7 +17,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.5-4.4.2"
+ccp_image_tag: "centos7-12.6-4.4.3"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -58,14 +58,14 @@ pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
-pgo_client_version: "4.4.2"
+pgo_client_version: "4.4.3"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.2"
+pgo_image_tag: "centos7-4.4.3"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
diff --git a/installers/gcp-marketplace/Makefile b/installers/gcp-marketplace/Makefile
index 232c4e06ee..3afc84ada9 100644
--- a/installers/gcp-marketplace/Makefile
+++ b/installers/gcp-marketplace/Makefile
@@ -6,7 +6,7 @@ MARKETPLACE_TOOLS ?= gcr.io/cloud-marketplace-tools/k8s/dev:$(MARKETPLACE_VERSIO
MARKETPLACE_VERSION ?= 0.9.4
KUBECONFIG ?= $(HOME)/.kube/config
PARAMETERS ?= {}
-PGO_VERSION ?= 4.4.2
+PGO_VERSION ?= 4.4.3
IMAGE_BUILD_ARGS = --build-arg MARKETPLACE_VERSION='$(MARKETPLACE_VERSION)' \
--build-arg PGO_VERSION='$(PGO_VERSION)'
diff --git a/installers/gcp-marketplace/README.md b/installers/gcp-marketplace/README.md
index cdde5b8892..83896e7d6f 100644
--- a/installers/gcp-marketplace/README.md
+++ b/installers/gcp-marketplace/README.md
@@ -59,7 +59,7 @@ Google Cloud Marketplace.
```shell
IMAGE_REPOSITORY=gcr.io/crunchydata-public/postgres-operator
- export PGO_VERSION=4.4.2
+ export PGO_VERSION=4.4.3
export INSTALLER_IMAGE=${IMAGE_REPOSITORY}/deployer:${PGO_VERSION}
export OPERATOR_IMAGE=${IMAGE_REPOSITORY}:${PGO_VERSION}
export OPERATOR_IMAGE_API=${IMAGE_REPOSITORY}/pgo-apiserver:${PGO_VERSION}
diff --git a/installers/gcp-marketplace/inventory.ini b/installers/gcp-marketplace/inventory.ini
index 023e5229c1..ab381926c9 100644
--- a/installers/gcp-marketplace/inventory.ini
+++ b/installers/gcp-marketplace/inventory.ini
@@ -16,11 +16,11 @@ pgo_operator_namespace='${OPERATOR_NAMESPACE}'
namespace=''
ccp_image_prefix='registry.developers.crunchydata.com/crunchydata'
-ccp_image_tag='centos7-12.5-4.4.2'
+ccp_image_tag='centos7-12.6-4.4.3'
ccp_image_pull_secret=''
ccp_image_pull_secret_manifest=''
pgo_image_prefix='registry.developers.crunchydata.com/crunchydata'
-pgo_image_tag='centos7-4.4.2'
+pgo_image_tag='centos7-4.4.3'
pgo_image='${OPERATOR_IMAGE}'
pgo_event_image='${OPERATOR_IMAGE_EVENT}'
@@ -29,7 +29,7 @@ pgo_scheduler_image='${OPERATOR_IMAGE_SCHEDULER}'
# PGO Client Install
pgo_client_install='false'
-pgo_client_version='v4.4.2'
+pgo_client_version='v4.4.3'
badger='false'
metrics='${POSTGRES_METRICS}'
diff --git a/installers/helm/metrics/Chart.yaml b/installers/helm/metrics/Chart.yaml
index aa1a37f1bd..1893c60ec4 100644
--- a/installers/helm/metrics/Chart.yaml
+++ b/installers/helm/metrics/Chart.yaml
@@ -3,6 +3,6 @@ name: postgres-operator-metrics
description: Metrics Install for Crunchy PostgreSQL Operator
type: application
version: 0.1.0
-appVersion: 4.4.2
+appVersion: 4.4.3
home: https://github.com/CrunchyData/postgres-operator
icon: https://github.com/CrunchyData/postgres-operator/raw/master/crunchy_logo.png
\ No newline at end of file
diff --git a/installers/helm/metrics/values.yaml b/installers/helm/metrics/values.yaml
index b3118d7858..bfb1c8693b 100644
--- a/installers/helm/metrics/values.yaml
+++ b/installers/helm/metrics/values.yaml
@@ -29,7 +29,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.5-4.4.2"
+ccp_image_tag: "centos7-12.6-4.4.3"
create_rbac: "true"
crunchy_debug: "false"
db_password_length: "24"
@@ -56,11 +56,11 @@ pgo_admin_password: "examplepassword"
pgo_admin_perms: "*"
pgo_admin_role_name: "pgoadmin"
pgo_admin_username: "admin"
-pgo_client_version: "4.4.2"
+pgo_client_version: "4.4.3"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.2"
+pgo_image_tag: "centos7-4.4.3"
pgo_installation_name: "devtest"
pgo_operator_namespace: "pgo"
prometheus_install: "false"
diff --git a/installers/helm/postgres-operator/Chart.yaml b/installers/helm/postgres-operator/Chart.yaml
index 6a388a3de6..b568d29047 100644
--- a/installers/helm/postgres-operator/Chart.yaml
+++ b/installers/helm/postgres-operator/Chart.yaml
@@ -3,7 +3,7 @@ name: postgres-operator
description: Crunchy PostgreSQL Operator Helm chart for Kubernetes
type: application
version: 0.1.0
-appVersion: 4.4.2
+appVersion: 4.4.3
home: https://github.com/CrunchyData/postgres-operator
icon: https://github.com/CrunchyData/postgres-operator/raw/master/crunchy_logo.png
keywords:
diff --git a/installers/helm/postgres-operator/values.yaml b/installers/helm/postgres-operator/values.yaml
index 988b9e6f80..6f4faff1cd 100644
--- a/installers/helm/postgres-operator/values.yaml
+++ b/installers/helm/postgres-operator/values.yaml
@@ -37,7 +37,7 @@ badger: "false"
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
-ccp_image_tag: "centos7-12.5-4.4.2"
+ccp_image_tag: "centos7-12.6-4.4.3"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -70,14 +70,14 @@ pgo_apiserver_url: "https://postgres-operator"
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
-pgo_client_version: "4.4.2"
+pgo_client_version: "4.4.3"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
-pgo_image_tag: "centos7-4.4.2"
+pgo_image_tag: "centos7-4.4.3"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
diff --git a/installers/kubectl/client-setup.sh b/installers/kubectl/client-setup.sh
index b4f9e4bdb9..65e3d59b56 100755
--- a/installers/kubectl/client-setup.sh
+++ b/installers/kubectl/client-setup.sh
@@ -14,7 +14,7 @@
# This script should be run after the operator has been deployed
PGO_OPERATOR_NAMESPACE="${PGO_OPERATOR_NAMESPACE:-pgo}"
PGO_USER_ADMIN="${PGO_USER_ADMIN:-pgouser-admin}"
-PGO_CLIENT_VERSION="${PGO_CLIENT_VERSION:-v4.4.2}"
+PGO_CLIENT_VERSION="${PGO_CLIENT_VERSION:-v4.4.3}"
PGO_CLIENT_URL="https://github.com/CrunchyData/postgres-operator/releases/download/${PGO_CLIENT_VERSION}"
PGO_CMD="${PGO_CMD-kubectl}"
diff --git a/installers/kubectl/postgres-operator-ocp311.yml b/installers/kubectl/postgres-operator-ocp311.yml
index 8b80b430aa..30c8ccd776 100644
--- a/installers/kubectl/postgres-operator-ocp311.yml
+++ b/installers/kubectl/postgres-operator-ocp311.yml
@@ -44,7 +44,7 @@ data:
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
- ccp_image_tag: "centos7-12.5-4.4.2"
+ ccp_image_tag: "centos7-12.6-4.4.3"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -85,14 +85,14 @@ data:
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
- pgo_client_version: "4.4.2"
+ pgo_client_version: "4.4.3"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
- pgo_image_tag: "centos7-4.4.2"
+ pgo_image_tag: "centos7-4.4.3"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
@@ -174,7 +174,7 @@ spec:
restartPolicy: Never
containers:
- name: pgo-deploy
- image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.2
+ image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.3
imagePullPolicy: IfNotPresent
env:
- name: DEPLOY_ACTION
diff --git a/installers/kubectl/postgres-operator.yml b/installers/kubectl/postgres-operator.yml
index d77db7974a..d51daa00a1 100644
--- a/installers/kubectl/postgres-operator.yml
+++ b/installers/kubectl/postgres-operator.yml
@@ -139,7 +139,7 @@ data:
ccp_image_prefix: "registry.developers.crunchydata.com/crunchydata"
ccp_image_pull_secret: ""
ccp_image_pull_secret_manifest: ""
- ccp_image_tag: "centos7-12.5-4.4.2"
+ ccp_image_tag: "centos7-12.6-4.4.3"
create_rbac: "true"
crunchy_debug: "false"
db_name: ""
@@ -180,14 +180,14 @@ data:
pgo_client_cert_secret: "pgo.tls"
pgo_client_container_install: "false"
pgo_client_install: "true"
- pgo_client_version: "4.4.2"
+ pgo_client_version: "4.4.3"
pgo_cluster_admin: "false"
pgo_disable_eventing: "false"
pgo_disable_tls: "false"
pgo_image_prefix: "registry.developers.crunchydata.com/crunchydata"
pgo_image_pull_secret: ""
pgo_image_pull_secret_manifest: ""
- pgo_image_tag: "centos7-4.4.2"
+ pgo_image_tag: "centos7-4.4.3"
pgo_installation_name: "devtest"
pgo_noauth_routes: ""
pgo_operator_namespace: "pgo"
@@ -282,7 +282,7 @@ spec:
restartPolicy: Never
containers:
- name: pgo-deploy
- image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.2
+ image: registry.developers.crunchydata.com/crunchydata/pgo-deployer:centos7-4.4.3
imagePullPolicy: IfNotPresent
env:
- name: DEPLOY_ACTION
diff --git a/installers/olm/Makefile b/installers/olm/Makefile
index 0ed6d4cdce..3a59c75c36 100644
--- a/installers/olm/Makefile
+++ b/installers/olm/Makefile
@@ -2,7 +2,7 @@
.SUFFIXES:
CCP_IMAGE_PREFIX ?= registry.developers.crunchydata.com/crunchydata
-CCP_PG_FULLVERSION ?= 12.5
+CCP_PG_FULLVERSION ?= 12.6
CCP_POSTGIS_VERSION ?= 3.0
KUBECONFIG ?= $(HOME)/.kube/config
OLM_SDK_VERSION ?= 0.13.0
@@ -10,7 +10,7 @@ OLM_TOOLS ?= registry.localhost:5000/postgres-operator-olm-tools:$(OLM_SDK_VERSI
OLM_VERSION ?= 0.14.2
PGO_BASEOS ?= centos7
PGO_IMAGE_PREFIX ?= registry.developers.crunchydata.com/crunchydata
-PGO_VERSION ?= 4.4.2
+PGO_VERSION ?= 4.4.3
PGO_IMAGE_TAG ?= $(PGO_BASEOS)-$(PGO_VERSION)
CCP_IMAGE_TAG ?= $(PGO_BASEOS)-$(CCP_PG_FULLVERSION)-$(PGO_VERSION)
CCP_POSTGIS_IMAGE_TAG ?= $(PGO_BASEOS)-$(CCP_PG_FULLVERSION)-$(CCP_POSTGIS_VERSION)-$(PGO_VERSION)
diff --git a/internal/util/util_test.go b/internal/util/util_test.go
index 2527772df3..d548ad4eff 100644
--- a/internal/util/util_test.go
+++ b/internal/util/util_test.go
@@ -18,25 +18,25 @@ func TestGetStandardImageTag(t *testing.T) {
expected string
}{
{
- "image: crunchy-postgres-ha, tag: centos7-12.5-4.5.0",
+ "image: crunchy-postgres-ha, tag: centos7-12.6-4.5.0",
"crunchy-postgres-ha",
- "centos7-12.5-4.5.0",
- "centos7-12.5-4.5.0",
+ "centos7-12.6-4.5.0",
+ "centos7-12.6-4.5.0",
}, {
- "image: crunchy-postgres-gis-ha, tag: centos7-12.5-3.0-4.5.0",
+ "image: crunchy-postgres-gis-ha, tag: centos7-12.6-3.0-4.5.0",
"crunchy-postgres-gis-ha",
- "centos7-12.5-3.0-4.5.0",
- "centos7-12.5-4.5.0",
+ "centos7-12.6-3.0-4.5.0",
+ "centos7-12.6-4.5.0",
}, {
- "image: crunchy-postgres-ha, tag: centos7-12.5-4.5.0-beta.1",
+ "image: crunchy-postgres-ha, tag: centos7-12.6-4.5.0-beta.1",
"crunchy-postgres-ha",
- "centos7-12.5-4.5.0-beta.1",
- "centos7-12.5-4.5.0-beta.1",
+ "centos7-12.6-4.5.0-beta.1",
+ "centos7-12.6-4.5.0-beta.1",
}, {
- "image: crunchy-postgres-gis-ha, tag: centos7-12.5-3.0-4.5.0-beta.2",
+ "image: crunchy-postgres-gis-ha, tag: centos7-12.6-3.0-4.5.0-beta.2",
"crunchy-postgres-gis-ha",
- "centos7-12.5-3.0-4.5.0-beta.2",
- "centos7-12.5-4.5.0-beta.2",
+ "centos7-12.6-3.0-4.5.0-beta.2",
+ "centos7-12.6-4.5.0-beta.2",
}, {
"image: crunchy-postgres-ha, tag: centos8-9.5.23-4.5.0-rc.1",
"crunchy-postgres-ha",
diff --git a/pkg/apis/crunchydata.com/v1/doc.go b/pkg/apis/crunchydata.com/v1/doc.go
index 90085ef52b..425a2bd9b8 100644
--- a/pkg/apis/crunchydata.com/v1/doc.go
+++ b/pkg/apis/crunchydata.com/v1/doc.go
@@ -53,7 +53,7 @@ cluster.
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.2",
+ '{"ClientVersion":"4.4.3",
"Namespace":"pgouser1",
"Name":"mycluster",
$PGO_APISERVER_URL/clusters
@@ -72,7 +72,7 @@ show all of the clusters that are in the given namespace.
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.2",
+ '{"ClientVersion":"4.4.3",
"Namespace":"pgouser1",
"Clustername":"mycluster"}' \
$PGO_APISERVER_URL/showclusters
@@ -82,7 +82,7 @@ $PGO_APISERVER_URL/showclusters
curl --cacert $PGO_CA_CERT --key $PGO_CLIENT_KEY --cert $PGO_CA_CERT -u \
admin:examplepassword -H "Content-Type:application/json" --insecure -X \
POST --data \
- '{"ClientVersion":"4.4.2",
+ '{"ClientVersion":"4.4.3",
"Namespace":"pgouser1",
"Clustername":"mycluster"}' \
$PGO_APISERVER_URL/clustersdelete
@@ -90,7 +90,7 @@ $PGO_APISERVER_URL/clustersdelete
Schemes: http, https
BasePath: /
- Version: 4.4.2
+ Version: 4.4.3
License: Apache 2.0 http://www.apache.org/licenses/LICENSE-2.0
Contact: Crunchy Data https://www.crunchydata.com/
diff --git a/pkg/apiservermsgs/common.go b/pkg/apiservermsgs/common.go
index e560721dfe..614358ffc0 100644
--- a/pkg/apiservermsgs/common.go
+++ b/pkg/apiservermsgs/common.go
@@ -15,7 +15,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-const PGO_VERSION = "4.4.2"
+const PGO_VERSION = "4.4.3"
// Ok status
const Ok = "ok"
diff --git a/redhat/atomic/help.1 b/redhat/atomic/help.1
index 3790f3ee02..3786f27fa4 100644
--- a/redhat/atomic/help.1
+++ b/redhat/atomic/help.1
@@ -56,4 +56,4 @@ The Red Hat Enterprise Linux version from which the container was built. For exa
\fB\fCRelease=\fR
.PP
-The specific release number of the container. For example, Release="4.4.2"
+The specific release number of the container. For example, Release="4.4.3"
diff --git a/redhat/atomic/help.md b/redhat/atomic/help.md
index bd993a3b86..ccb71f370e 100644
--- a/redhat/atomic/help.md
+++ b/redhat/atomic/help.md
@@ -45,4 +45,4 @@ The Red Hat Enterprise Linux version from which the container was built. For exa
`Release=`
-The specific release number of the container. For example, Release="4.4.2"
+The specific release number of the container. For example, Release="4.4.3"
From 22de1b4d88477cb784a23fb95b5015e2d8ea6ccc Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Fri, 26 Feb 2021 09:58:50 -0500
Subject: [PATCH 68/77] Fix build issue in API server
Someone forgot to cast a pointer.
---
internal/apiserver/backrestservice/backrestimpl.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/internal/apiserver/backrestservice/backrestimpl.go b/internal/apiserver/backrestservice/backrestimpl.go
index 8c1157fbc3..c4b172ddde 100644
--- a/internal/apiserver/backrestservice/backrestimpl.go
+++ b/internal/apiserver/backrestservice/backrestimpl.go
@@ -215,7 +215,7 @@ func CreateBackup(request *msgs.CreateBackrestBackupRequest, ns, pgouser string)
}
// check if primary is ready
- if !isPrimaryReady(cluster) {
+ if !isPrimaryReady(&cluster) {
resp.Status.Code = msgs.Error
resp.Status.Msg = "primary pod is not in Ready state"
return resp
From 097e5e3fb09ac3bc2cfbee407cccc9dc6af508ca Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sat, 27 Feb 2021 16:44:49 -0500
Subject: [PATCH 69/77] Revert changes from 05742298
05742298 was designed to workaround an issue with the Docker
packaging from Red Hat that introduced a bug which prevented the
containers from properly loading. Given we are in a single-user
environment that only uses ssh public key authentication for
performing pgBackRest operations, we can set "UsePAM" to "no".
This allows for one to run the containers with a security context
of "allowPrivilegeEscalation" set to "false".
Issue: [ch10588]
---
.../files/pgo-backrest-repo/sshd_config | 15 +++------------
1 file changed, 3 insertions(+), 12 deletions(-)
diff --git a/installers/ansible/roles/pgo-operator/files/pgo-backrest-repo/sshd_config b/installers/ansible/roles/pgo-operator/files/pgo-backrest-repo/sshd_config
index a28bd7d5de..e9783c4e21 100644
--- a/installers/ansible/roles/pgo-operator/files/pgo-backrest-repo/sshd_config
+++ b/installers/ansible/roles/pgo-operator/files/pgo-backrest-repo/sshd_config
@@ -80,18 +80,9 @@ ChallengeResponseAuthentication yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no
-# Set this to 'yes' to enable PAM authentication, account processing,
-# and session processing. If this is enabled, PAM authentication will
-# be allowed through the ChallengeResponseAuthentication and
-# PasswordAuthentication. Depending on your PAM configuration,
-# PAM authentication via ChallengeResponseAuthentication may bypass
-# the setting of "PermitRootLogin without-password".
-# If you just want the PAM account and session checks to run without
-# PAM authentication, then enable this but set PasswordAuthentication
-# and ChallengeResponseAuthentication to 'no'.
-# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
-# problems.
-UsePAM yes
+# This is set explicitly to *no* as we are only using pubkey authentication and
+# because each container is isolated to only an unprivileged user.
+UsePAM No
#AllowAgentForwarding yes
#AllowTcpForwarding yes
From 4fda9b3d3b496cd6b4b183519ba20eea54b7148c Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 1 Mar 2021 10:46:54 -0500
Subject: [PATCH 70/77] Update v4.4.3 release notes
---
docs/content/releases/4.4.3.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/content/releases/4.4.3.md b/docs/content/releases/4.4.3.md
index 2a6fe21035..8b0a10e0c9 100644
--- a/docs/content/releases/4.4.3.md
+++ b/docs/content/releases/4.4.3.md
@@ -18,11 +18,11 @@ PostgreSQL Operator is tested against Kubernetes 1.17 - 1.20, OpenShift 3.11, Op
## Changes
- When using the `--restore-from` option on `pgo create cluster` to create a new PostgreSQL cluster, the cluster bootstrap Job is now automatically removed if it completes successfully.
-- PostgreSQL JIT compilation is explicitly disabled on new cluster creation. This prevents a memory leak that has been observed on queries coming from the metrics exporter.
- The `--compress-type` flag is now supported for the backup options (`--backup-opts`) for pgBackRest backups with `pgo backup`. `none`, `gz`, `bz2`, and `lz4` are all supported. Presently `zst` is not supported.
- Add the `--no-prompt` flag to `pgo upgrade`. The mechanism to disable the prompt verification was already in place, but the flag was not exposed. Reported by (@devopsevd).
- Removes certain characters that causes issues in shell environments from consideration when using the random password generator, which is used to create default passwords or with `--rotate-password`.
- Allow for the `--link-map` attribute for a pgBackRest option, which can help with the restore of an existing cluster to a new cluster that adds an external WAL volume.
+- Revert setting "UsePAM" to "yes" by default as the bug fix in Docker that required that change was applied roughly one year ago.
## Fixes
From 33d086732ade49b448bf9e176718972ac81f5f14 Mon Sep 17 00:00:00 2001
From: Andrew L'Ecuyer
Date: Mon, 15 Mar 2021 20:23:00 +0000
Subject: [PATCH 71/77] Fix UsePAM Setting in sshd_config File
Fixes the UsePAM setting in sshd_config by changing the value from 'No'
to 'no'.
---
.../roles/pgo-operator/files/pgo-backrest-repo/sshd_config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/installers/ansible/roles/pgo-operator/files/pgo-backrest-repo/sshd_config b/installers/ansible/roles/pgo-operator/files/pgo-backrest-repo/sshd_config
index e9783c4e21..d25b24f158 100644
--- a/installers/ansible/roles/pgo-operator/files/pgo-backrest-repo/sshd_config
+++ b/installers/ansible/roles/pgo-operator/files/pgo-backrest-repo/sshd_config
@@ -82,7 +82,7 @@ ChallengeResponseAuthentication yes
# This is set explicitly to *no* as we are only using pubkey authentication and
# because each container is isolated to only an unprivileged user.
-UsePAM No
+UsePAM no
#AllowAgentForwarding yes
#AllowTcpForwarding yes
From 01f32668fc0d7f9e3a6750a8a0d143c776ee67df Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Thu, 18 Mar 2021 12:51:10 -0400
Subject: [PATCH 72/77] Documentation updates
Documentation updates in prep for the upcoming releaes.
---
docs/layouts/partials/flex/body-aftercontent.html | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 docs/layouts/partials/flex/body-aftercontent.html
diff --git a/docs/layouts/partials/flex/body-aftercontent.html b/docs/layouts/partials/flex/body-aftercontent.html
new file mode 100644
index 0000000000..42949426a4
--- /dev/null
+++ b/docs/layouts/partials/flex/body-aftercontent.html
@@ -0,0 +1,3 @@
+
+
© 2017 - 2021 Crunchy Data Solutions, Inc.
+
From 0ebd5af279d6b34731e552e94655c067e77daf8e Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 22 Mar 2021 15:22:35 -0400
Subject: [PATCH 73/77] Fix issue with documentation updates
Some of the interactive features were not loading due to the
last round of documentation updates. This fixes those issues.
---
.../partials/flex/body-aftercontent.html | 41 +++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/docs/layouts/partials/flex/body-aftercontent.html b/docs/layouts/partials/flex/body-aftercontent.html
index 42949426a4..8d5f330f56 100644
--- a/docs/layouts/partials/flex/body-aftercontent.html
+++ b/docs/layouts/partials/flex/body-aftercontent.html
@@ -1,3 +1,44 @@
+
+ {{ partial "next-prev-page.html" . }}
+
+
+
+
+
+
+
+{{ partial "flex/scripts.html" . }}
From 67bba9017538c70258f8e85fcd9ad4e64ecaee1f Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Mon, 5 Apr 2021 12:27:34 -0400
Subject: [PATCH 74/77] Update general descriptions
This provides some updates around the geneal description for
PGO.
---
README.md | 141 ++++++++++++++++++++++++++++++-----------
docs/config.toml | 2 +-
docs/content/_index.md | 69 +++++++++++++-------
3 files changed, 149 insertions(+), 63 deletions(-)
diff --git a/README.md b/README.md
index 8493c8f1a6..e07483d0fc 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,22 @@
-Crunchy Data PostgreSQL Operator
+PGO: The Postgres Operator from Crunchy Data
[](https://goreportcard.com/report/github.com/CrunchyData/postgres-operator)
-# Run your own production-grade PostgreSQL-as-a-Service on Kubernetes!
+# Run Cloud Native PostgreSQL on Kubernetes with PGO: The Postgres Operator from Crunchy Data!
-The [Crunchy PostgreSQL Operator](https://access.crunchydata.com/documentation/postgres-operator/) automates and simplifies deploying and managing open source PostgreSQL clusters on Kubernetes and other Kubernetes-enabled Platforms by providing the essential features you need to keep your PostgreSQL clusters up and running, including:
+[PGO][documentation], the [Postgres Operator][documentation] developed by
+[Crunchy Data](https://crunchydata.com/) and included in [Crunchy PostgreSQL for Kubernetes](https://www.crunchydata.com/products/crunchy-postgresql-for-kubernetes/), automates and simplifies deploying and managing open source
+PostgreSQL clusters on Kubernetes.
-#### PostgreSQL Cluster Provisioning
+Whether you need to get a simple Postgres cluster up and running, need to deploy
+a high availability, fault tolerant cluster in production, or are running your
+own database-as-a-service, the PostgreSQL Operator provides the essential
+features you need to keep your cloud native Postgres clusters healthy, including:
+
+#### Postgres Cluster [Provisioning][provisioning]
[Create, Scale, & Delete PostgreSQL clusters with ease](https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/provisioning/), while fully customizing your Pods and PostgreSQL configuration!
@@ -25,7 +32,8 @@ Backups and restores leverage the open source [pgBackRest](https://www.pgbackres
#### TLS
-Secure communication between your applications and data servers by [enabling TLS for your PostgreSQL servers](https://access.crunchydata.com/documentation/postgres-operator/latest/pgo-client/common-tasks/#enable-tls), including the ability to enforce that all of your connections to use TLS.
+Secure communication between your applications and data servers by [enabling TLS for your PostgreSQL servers][pgo-task-tls],
+including the ability to enforce all of your connections to use TLS.
#### Monitoring
@@ -65,16 +73,22 @@ Choose the type of backup (full, incremental, differential) and [how frequently
#### Multi-Namespace Support
-You can control how the PostgreSQL Operator leverages [Kubernetes Namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) with several different deployment models:
+You can control how PGO, the Postgres Operator, leverages [Kubernetes Namespaces][k8s-namespaces] with several different deployment models:
-- Deploy the PostgreSQL Operator and all PostgreSQL clusters to the same namespace
-- Deploy the PostgreSQL Operator to one namespaces, and all PostgreSQL clusters to a different namespace
-- Deploy the PostgreSQL Operator to one namespace, and have your PostgreSQL clusters managed acrossed multiple namespaces
-- Dynamically add and remove namespaces managed by the PostgreSQL Operator using the `pgo create namespace` and `pgo delete namespace` commands
+- Deploy PGO and all PostgreSQL clusters to the same namespace
+- Deploy PGO to one namespaces, and all PostgreSQL clusters to a different
+namespace
+- Deploy PGO to one namespace, and have your PostgreSQL clusters managed across
+multiple namespaces
+- Dynamically add and remove namespaces managed by the PostgreSQL Operator using
+the `pgo` client to run `pgo create namespace` and `pgo delete namespace`
#### Full Customizability
-The Crunchy PostgreSQL Operator makes it easy to get your own PostgreSQL-as-a-Service up and running on Kubernetes-enabled platforms, but we know that there are further customizations that you can make. As such, the Crunchy PostgreSQL Operator allows you to further customize your deployments, including:
+The Postgres Operator (PGO) makes it easy to get Postgres up and running on
+Kubernetes-enabled platforms, but we know that there are further customizations
+that you can make. As such, PGO allows you to further 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!
@@ -83,49 +97,80 @@ The Crunchy PostgreSQL Operator makes it easy to get your own PostgreSQL-as-a-Se
- Bring your own trusted certificate authority (CA) for use with the Operator API server
- Override your PostgreSQL configuration for each cluster
+[disaster-recovery]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/disaster-recovery/
+[disaster-recovery-s3]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/disaster-recovery/#using-s3
+[disaster-recovery-scheduling]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/disaster-recovery/#scheduling-backups
+[high-availability]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/high-availability/
+[high-availability-sync]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/high-availability/#synchronous-replication-guarding-against-transactions-loss
+[monitoring]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/monitoring/
+[multiple-cluster]: https://access.crunchydata.com/documentation/postgres-operator/latest/architecture/high-availability/multi-cluster-kubernetes/
+[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/pgo-client/common-tasks/#enable-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-namespaces]: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+[k8s-nodes]: https://kubernetes.io/docs/concepts/architecture/nodes/
+
+[pgBackRest]: https://www.pgbackrest.org
+[pgBouncer]: https://access.crunchydata.com/documentation/pgbouncer/
+[pgMonitor]: https://github.com/CrunchyData/pgmonitor
+
+
## Deployment Requirements
-The PostgreSQL Operator is validated for deployment on Kubernetes, OpenShift, and VMware Enterprise PKS clusters. Some form of storage is required, NFS, hostPath, and Storage Classes are currently supported.
+PGO, the Postgres Operator, is validated for deployment on Kubernetes,
+OpenShift, GKE, Anthos, AKS, EKS, and VMware Tanzu clusters. PGO is cloud native
+and storage agnostic, working with a wide variety of storage classes, hostPath,
+and NFS.
-The PostgreSQL Operator includes various components that get deployed to your
-Kubernetes cluster as shown in the following diagram and detailed
-in the Design section of the documentation for the version you are running.
+PGO includes various components that get deployed to your Kubernetes cluster as
+shown in the following diagram and detailed in the Design section of the
+documentation for the version you are running.

-The PostgreSQL Operator is developed and tested on CentOS and RHEL linux platforms but is known to run on other Linux variants.
+PGO is developed and tested on CentOS and RHEL linux platforms but is known to
+run on other Linux variants.
### Supported Platforms
-The Crunchy PostgreSQL Operator is tested on the following Platforms:
+PGO, the Postgres Operator, is Kubernetes-native and maintains backwards
+compatibility to Kubernetes 1.11 and is tested is tested against the following
+platforms:
- Kubernetes 1.13+
- OpenShift 3.11+
- Google Kubernetes Engine (GKE), including Anthos
- Amazon EKS
-- VMware Enterprise PKS 1.3+
-
-### Storage
+- Microsoft AKS
+- VMware Tanzu
-The Crunchy PostgreSQL Operator is tested with a variety of different types of Kubernetes storage and Storage Classes, including:
+This list only includes the platforms that the Postgres Operator is specifically
+tested on as part of the release process: PGO works on other Kubernetes
+distributions as well.
-- Google Compute Engine persistent volumes
-- HostPath
-- NFS
-- Rook
-- StorageOS
+### Storage
-and more.
+PGO, the Postgres Operator, is tested with a variety of different types of
+Kubernetes storage and Storage Classes, as well as hostPath and NFS.
-We know there are a variety of different types of [Storage Classes](https://kubernetes.io/docs/concepts/storage/storage-classes/) available for Kubernetes and we do our best to test each one, but due to the breadth of this area we are unable to verify PostgreSQL Operator functionality in each one. With that said, the PostgreSQL Operator is designed to be storage class agnostic and has been demonstrated to work with additional Storage Classes.
+We know there are a variety of different types of [Storage Classes](https://kubernetes.io/docs/concepts/storage/storage-classes/)
+available for Kubernetes and we do our best to test each one, but due to the
+breadth of this area we are unable to verify Postgres Operator functionality in
+each one. With that said, the PostgreSQL Operator is designed to be storage
+class agnostic and has been demonstrated to work with additional Storage
+Classes.
## Installation
-### PostgreSQL Operator Installation
+### Postgres Operator (PGO) Installation
-The PostgreSQL Operator provides a few different methods for installation based on your use case.
+PGO provides a few different methods for installation methods to get up and
+running with cloud native Postgres.
-Based on your storage settings in your Kubernetes environment, you may be able to start as quickly as:
+Based on your storage settings in your Kubernetes environment, you may be able
+to start as quickly as:
```shell
kubectl create namespace pgo
@@ -144,7 +189,7 @@ Installations methods include:
### `pgo` Client Installation
-If you have the PostgreSQL Operator installed in your environment, and are interested in installation of the client interface, please start here:
+If you have the Postgres Operator installed in your environment, and are interested in installation of the client interface, please start here:
- [pgo Client Install](https://access.crunchydata.com/documentation/postgres-operator/latest/installation/pgo-client/)
@@ -181,16 +226,24 @@ Additional containers that are not directly integrated with the PostgreSQL Opera
For more information about which versions of the PostgreSQL Operator include which components, please visit the [compatibility](https://access.crunchydata.com/documentation/postgres-operator/latest/configuration/compatibility/) section of the documentation.
-## Using the PostgreSQL Operator
+## Using the PostgreSQL Operator (PGO)
-If you have the PostgreSQL and Client Interface installed in your environment and are interested in guidance on the use of the Crunchy PostgreSQL Operator, please start here:
+If you are new to PGO, you can follow along the [tutorial](https://access.crunchydata.com/documentation/postgres-operator/latest/tutorial/)
+to learn how to install the PostgreSQL Operator and how to use many of its
+features!
-- [PostgreSQL Operator Documentation](https://access.crunchydata.com/documentation/postgres-operator/)
+- [PostgreSQL Operator Tutorial](https://access.crunchydata.com/documentation/postgres-operator/latest/tutorial/)
+
+If you have the PostgreSQL and client interface installed in your environment
+and are interested in guidance on the use of the Crunchy PostgreSQL Operator,
+please start here:
+
+- [PostgreSQL Operator (PGO) Documentation](https://access.crunchydata.com/documentation/postgres-operator/)
- [`pgo` Client User Guide](https://access.crunchydata.com/documentation/postgres-operator/latest/pgo-client/)
## Contributing to the Project
-Want to contribute to the PostgreSQL Operator project? Great! We've put together
+Want to contribute to the PGO Project? Great! We've put together
as set of contributing guidelines that you can review here:
- [Contributing Guidelines](CONTRIBUTING.md)
@@ -224,8 +277,7 @@ If you have any question you can submit a Support - Question and Answer issue an
## Complete Documentation
For additional information regarding design, configuration and operation of the
-PostgreSQL Operator, pleases see the
-[Official Project Documentation](https://access.crunchydata.com/documentation/postgres-operator/)
+PostgreSQL Operator (PGO), please see the [Official Project Documentation][documentation].
If you are looking for the [nightly builds of the documentation](https://crunchydata.github.io/postgres-operator/latest/), you can view them at:
@@ -234,3 +286,16 @@ https://crunchydata.github.io/postgres-operator/latest/
## Past Versions
Documentation for previous releases can be found at the [Crunchy Data Access Portal](https://access.crunchydata.com/documentation/)
+
+## Releases
+
+When a PGO general availability (GA) release occurs, the container images are
+distributed on the following platforms in order:
+
+- [Crunchy Data Customer Portal](https://access.crunchydata.com/)
+- [Crunchy Data Developer Portal](https://www.crunchydata.com/developers)
+- [DockerHub](https://hub.docker.com/u/crunchydata)
+
+The image rollout can occur over the course of several days.
+
+To stay up-to-date on when releases are made available in the [Crunchy Data Developer Portal](https://www.crunchydata.com/developers), please sign up for the [Crunchy Data Developer Program Newsletter](https://www.crunchydata.com/developers/newsletter)
diff --git a/docs/config.toml b/docs/config.toml
index a43e682862..5d9c641624 100644
--- a/docs/config.toml
+++ b/docs/config.toml
@@ -2,7 +2,7 @@ baseURL= ""
languageCode = "en-us"
DefaultContentLanguage = "en"
-title = "Crunchy PostgreSQL Operator Documentation"
+title = "PGO: PostgreSQL Operator from Crunchy Data Documentation"
theme = "crunchy-hugo-theme"
pygmentsCodeFences = true
pygmentsStyle = "monokailight"
diff --git a/docs/content/_index.md b/docs/content/_index.md
index a13b8c960e..21290dfb74 100644
--- a/docs/content/_index.md
+++ b/docs/content/_index.md
@@ -1,20 +1,30 @@
---
-title: "Crunchy PostgreSQL Operator"
+title: "PGO: The Postgres Operator from Crunchy Data"
date:
draft: false
---
-# Crunchy PostgreSQL Operator
+# PGO: The Postgres Operator from Crunchy Data
-## Run your own production-grade PostgreSQL-as-a-Service on Kubernetes!
+## Run [Cloud Native PostgreSQL on Kubernetes](https://www.crunchydata.com/products/crunchy-postgresql-for-kubernetes/) with PGO: The [Postgres Operator](https://github.com/CrunchyData/postgres-operator) from [Crunchy Data](https://www.crunchydata.com/)!
Latest Release: {{< param operatorVersion >}}
-The [Crunchy PostgreSQL Operator](https://www.crunchydata.com/developers/download-postgres/containers/postgres-operator) automates and simplifies deploying and managing open source PostgreSQL clusters on Kubernetes and other Kubernetes-enabled Platforms by providing the essential features you need to keep your PostgreSQL clusters up and running, including:
+[PGO](https://www.crunchydata.com/developers/download-postgres/containers/postgres-operator),
+the [Postgres Operator](https://github.com/CrunchyData/postgres-operator)
+developed by [Crunchy Data](https://crunchydata.com/) and included in
+[Crunchy PostgreSQL for Kubernetes](https://www.crunchydata.com/products/crunchy-postgresql-for-kubernetes/),
+automates and simplifies deploying and managing open source PostgreSQL clusters
+on Kubernetes.
-#### PostgreSQL Cluster Provisioning
+Whether you need to get a simple Postgres cluster up and running, need to deploy
+a high availability, fault tolerant cluster in production, or are running your
+own database-as-a-service, the PostgreSQL Operator provides the essential
+features you need to keep your cloud native Postgres clusters healthy, including:
+
+#### Postgres Cluster [Provisioning]({{< relref "/architecture/provisioning.md" >}})
[Create, Scale, & Delete PostgreSQL clusters with ease](/architecture/provisioning/), while fully customizing your Pods and PostgreSQL configuration!
@@ -30,7 +40,7 @@ Backups and restores leverage the open source [pgBackRest](https://www.pgbackres
#### TLS
-Secure communication between your applications and data servers by [enabling TLS for your PostgreSQL servers](/pgo-client/common-tasks/#enable-tls), including the ability to enforce that all of your connections to use TLS.
+Secure communication between your applications and data servers by [enabling TLS for your PostgreSQL servers](/pgo-client/common-tasks/#enable-tls), including the ability to enforce all of your connections to use TLS.
#### Monitoring
@@ -70,16 +80,22 @@ Choose the type of backup (full, incremental, differential) and [how frequently
#### Multi-Namespace Support
-You can control how the PostgreSQL Operator leverages [Kubernetes Namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) with several different deployment models:
+You can control how PGO, the Postgres Operator, leverages [Kubernetes Namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) with several different deployment models:
-- Deploy the PostgreSQL Operator and all PostgreSQL clusters to the same namespace
-- Deploy the PostgreSQL Operator to one namespaces, and all PostgreSQL clusters to a different namespace
-- Deploy the PostgreSQL Operator to one namespace, and have your PostgreSQL clusters managed acrossed multiple namespaces
-- Dynamically add and remove namespaces managed by the PostgreSQL Operator using the `pgo create namespace` and `pgo delete namespace` commands
+- Deploy PGO and all PostgreSQL clusters to the same namespace
+- Deploy PGO to one namespaces, and all PostgreSQL clusters to a different
+namespace
+- Deploy PGO to one namespace, and have your PostgreSQL clusters managed across
+multiple namespaces
+- Dynamically add and remove namespaces managed by the PostgreSQL Operator using
+the `pgo` client to run `pgo create namespace` and `pgo delete namespace`
#### Full Customizability
-The Crunchy PostgreSQL Operator makes it easy to get your own PostgreSQL-as-a-Service up and running on Kubernetes-enabled platforms, but we know that there are further customizations that you can make. As such, the Crunchy PostgreSQL Operator allows you to further customize your deployments, including:
+The Postgres Operator (PGO) makes it easy to get Postgres up and running on
+Kubernetes-enabled platforms, but we know that there are further customizations
+that you can make. As such, PGO allows you to further 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!
@@ -128,24 +144,29 @@ For more information about which versions of the PostgreSQL Operator include whi
# Supported Platforms
-The Crunchy PostgreSQL Operator is tested on the following Platforms:
+PGO, the Postgres Operator, is Kubernetes-native and maintains backwards
+compatibility to Kubernetes 1.11 and is tested is tested against the following
+platforms:
- Kubernetes 1.13+
- OpenShift 3.11+
- Google Kubernetes Engine (GKE), including Anthos
- Amazon EKS
-- VMware Enterprise PKS 1.3+
-
-## Storage
+- Microsoft AKS
+- VMware Tanzu
-The Crunchy PostgreSQL Operator is tested with a variety of different types of Kubernetes storage and Storage Classes, including:
+This list only includes the platforms that the Postgres Operator is specifically
+tested on as part of the release process: PGO works on other Kubernetes
+distributions as well.
-- Rook
-- StorageOS
-- Google Compute Engine persistent volumes
-- NFS
-- HostPath
+## Storage
-and more. We have had reports of people using the PostgreSQL Operator with other [Storage Classes](https://kubernetes.io/docs/concepts/storage/storage-classes/) as well.
+PGO, the Postgres Operator, is tested with a variety of different types of
+Kubernetes storage and Storage Classes, as well as hostPath and NFS.
-We know there are a variety of different types of [Storage Classes](https://kubernetes.io/docs/concepts/storage/storage-classes/) available for Kubernetes and we do our best to test each one, but due to the breadth of this area we are unable to verify PostgreSQL Operator functionality in each one. With that said, the PostgreSQL Operator is designed to be storage class agnostic and has been demonstrated to work with additional Storage Classes. Storage is a rapidly evolving field in Kubernetes and we will continue to adapt the PostgreSQL Operator to modern Kubernetes storage standards.
+We know there are a variety of different types of [Storage Classes](https://kubernetes.io/docs/concepts/storage/storage-classes/)
+available for Kubernetes and we do our best to test each one, but due to the
+breadth of this area we are unable to verify Postgres Operator functionality in
+each one. With that said, the PostgreSQL Operator is designed to be storage
+class agnostic and has been demonstrated to work with additional Storage
+Classes.
From 3935a771018041bbe1d1bbbf80031f736e147af0 Mon Sep 17 00:00:00 2001
From: "Jonathan S. Katz"
Date: Sat, 10 Apr 2021 14:47:51 -0400
Subject: [PATCH 75/77] Updates to installation instructions and other guidance
A periodic pass through the installation instructions and
other general updates to the documentation.
---
README.md | 2 +-
crunchy_logo.png | Bin 169205 -> 0 bytes
docs/content/_index.md | 2 +-
docs/content/installation/_index.md | 4 +-
docs/content/installation/configuration.md | 4 +-
docs/content/installation/other/_index.md | 2 +-
.../installation/other/ansible/_index.md | 8 +-
docs/content/installation/other/bash.md | 76 +++++++++---------
docs/content/installation/other/helm.md | 13 +--
docs/content/installation/pgo-client.md | 14 ++--
.../content/installation/postgres-operator.md | 14 ++--
docs/content/installation/prerequisites.md | 14 ++--
docs/content/pgo-client/_index.md | 4 +-
docs/content/quickstart/_index.md | 69 +++++++++++++---
docs/static/crunchy-logo.jpg | Bin 100361 -> 0 bytes
docs/static/pgo.png | Bin 0 -> 234696 bytes
docs/static/pgo.svg | 1 +
installers/ansible/README.md | 8 +-
installers/gcp-marketplace/README.md | 4 +-
installers/helm/metrics/Chart.yaml | 2 +-
installers/helm/postgres-operator/Chart.yaml | 4 +-
installers/helm/postgres-operator/README.md | 16 ++--
installers/olm/README.md | 4 +-
23 files changed, 158 insertions(+), 107 deletions(-)
delete mode 100644 crunchy_logo.png
delete mode 100644 docs/static/crunchy-logo.jpg
create mode 100644 docs/static/pgo.png
create mode 100644 docs/static/pgo.svg
diff --git a/README.md b/README.md
index e07483d0fc..4781fb0fb2 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
PGO: The Postgres Operator from Crunchy Data
-
+
[](https://goreportcard.com/report/github.com/CrunchyData/postgres-operator)
diff --git a/crunchy_logo.png b/crunchy_logo.png
deleted file mode 100644
index 2fbf3352c1dc55d5941d1b3faba7d687deaad4be..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 169205
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