finish PR1544
This commit is contained in:
		
							parent
							
								
									cc10c3ea27
								
							
						
					
					
						commit
						d78ccea3a8
					
				| 
						 | 
					@ -464,6 +464,13 @@ spec:
 | 
				
			||||||
                    type: string
 | 
					                    type: string
 | 
				
			||||||
                  standby_port:
 | 
					                  standby_port:
 | 
				
			||||||
                    type: string
 | 
					                    type: string
 | 
				
			||||||
 | 
					                oneOf:
 | 
				
			||||||
 | 
					                - required:
 | 
				
			||||||
 | 
					                  - s3_wal_path
 | 
				
			||||||
 | 
					                - required:
 | 
				
			||||||
 | 
					                  - gs_wal_path
 | 
				
			||||||
 | 
					                - required:
 | 
				
			||||||
 | 
					                  - standby_host
 | 
				
			||||||
              streams:
 | 
					              streams:
 | 
				
			||||||
                type: array
 | 
					                type: array
 | 
				
			||||||
                nullable: true
 | 
					                nullable: true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1088,11 +1088,15 @@ data:
 | 
				
			||||||
### Standby clusters
 | 
					### Standby clusters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The setup for [standby clusters](user.md#setting-up-a-standby-cluster) is very
 | 
					The setup for [standby clusters](user.md#setting-up-a-standby-cluster) is very
 | 
				
			||||||
similar to cloning. At the moment, the operator only allows for streaming from
 | 
					similar to cloning. They can stream from a WAL archive (S3, GCS). Like with
 | 
				
			||||||
the S3 WAL archive of the master specified in the manifest. Like with cloning,
 | 
					cloning, if you are using [additional environment variables](#custom-pod-environment-variables)
 | 
				
			||||||
if you are using [additional environment variables](#custom-pod-environment-variables)
 | 
					to access your backup location you have to copy those variables and prepend
 | 
				
			||||||
to access your backup location you have to copy those variables and prepend the
 | 
					the `STANDBY_` prefix for Spilo to find the backups and WAL files to stream.
 | 
				
			||||||
`STANDBY_` prefix for Spilo to find the backups and WAL files to stream.
 | 
					
 | 
				
			||||||
 | 
					Alternatively, standby clusters can also stream from a remote primary cluster.
 | 
				
			||||||
 | 
					You have to specify the host address. Port is optional and defaults to 5432.
 | 
				
			||||||
 | 
					Note, that only one of the options (`s3_wal_path`, `gs_wal_path`,
 | 
				
			||||||
 | 
					`standby_host`) can be present under the `standby` top-level key.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Logical backups
 | 
					## Logical backups
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -395,24 +395,22 @@ under the `clone` top-level key and do not affect the already running cluster.
 | 
				
			||||||
## Standby cluster
 | 
					## Standby cluster
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On startup, an existing `standby` top-level key creates a standby Postgres
 | 
					On startup, an existing `standby` top-level key creates a standby Postgres
 | 
				
			||||||
cluster streaming from a remote location. Either from a S3 or GCS WAL
 | 
					cluster streaming from a remote location - either from a S3 or GCS WAL
 | 
				
			||||||
archive or a remote primary. When both of them are set, `standby_host`
 | 
					archive or a remote primary. Only one of options is allowed and required
 | 
				
			||||||
takes precedence.
 | 
					if the `standby` key is present.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* **s3_wal_path**
 | 
					* **s3_wal_path**
 | 
				
			||||||
  the url to S3 bucket containing the WAL archive of the remote primary.
 | 
					  the url to S3 bucket containing the WAL archive of the remote primary.
 | 
				
			||||||
  Required when the `standby` section is present even when `standby_host` is set.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
* **gs_wal_path**
 | 
					* **gs_wal_path**
 | 
				
			||||||
  the url to GS bucket containing the WAL archive of the remote primary.
 | 
					  the url to GS bucket containing the WAL archive of the remote primary.
 | 
				
			||||||
  Optional, but `s3_wal_path`  or `gs_wal_path` is required.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
* **standby_host**
 | 
					* **standby_host**
 | 
				
			||||||
  hostname or IP address of the primary to stream from.
 | 
					  hostname or IP address of the primary to stream from.
 | 
				
			||||||
  When set, `s3_wal_path` is ignored.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
* **standby_port**
 | 
					* **standby_port**
 | 
				
			||||||
  TCP port on which the primary is listening for connections.
 | 
					  TCP port on which the primary is listening for connections. Patroni will
 | 
				
			||||||
 | 
					  use `"5432"` if not set.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Volume properties
 | 
					## Volume properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -462,6 +462,13 @@ spec:
 | 
				
			||||||
                    type: string
 | 
					                    type: string
 | 
				
			||||||
                  standby_port:
 | 
					                  standby_port:
 | 
				
			||||||
                    type: string
 | 
					                    type: string
 | 
				
			||||||
 | 
					                oneOf:
 | 
				
			||||||
 | 
					                - required:
 | 
				
			||||||
 | 
					                  - s3_wal_path
 | 
				
			||||||
 | 
					                - required:
 | 
				
			||||||
 | 
					                  - gs_wal_path
 | 
				
			||||||
 | 
					                - required:
 | 
				
			||||||
 | 
					                  - standby_host
 | 
				
			||||||
              streams:
 | 
					              streams:
 | 
				
			||||||
                type: array
 | 
					                type: array
 | 
				
			||||||
                nullable: true
 | 
					                nullable: true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,6 @@ spec:
 | 
				
			||||||
    version: "14"
 | 
					    version: "14"
 | 
				
			||||||
  # Make this a standby cluster and provide either the s3 bucket path of source cluster or the remote primary host for continuous streaming.
 | 
					  # Make this a standby cluster and provide either the s3 bucket path of source cluster or the remote primary host for continuous streaming.
 | 
				
			||||||
  standby:
 | 
					  standby:
 | 
				
			||||||
    s3_wal_path: "s3://path/to/bucket/containing/wal/of/source/cluster/"
 | 
					    s3_wal_path: " s3://mybucket/spilo/acid-minimal-cluster/abcd1234-2a4b-4b2a-8c9c-c1234defg567/wal/14/"
 | 
				
			||||||
    # standby_host: ""
 | 
					    # standby_host: "acid-minimal-cluster.default"
 | 
				
			||||||
    # standby_port: ""
 | 
					    # standby_port: "5432"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -721,6 +721,11 @@ var PostgresCRDResourceValidation = apiextv1.CustomResourceValidation{
 | 
				
			||||||
								Type: "string",
 | 
													Type: "string",
 | 
				
			||||||
							},
 | 
												},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
 | 
											OneOf: []apiextv1.JSONSchemaProps{
 | 
				
			||||||
 | 
												apiextv1.JSONSchemaProps{Required: []string{"s3_wal_path"}},
 | 
				
			||||||
 | 
												apiextv1.JSONSchemaProps{Required: []string{"gs_wal_path"}},
 | 
				
			||||||
 | 
												apiextv1.JSONSchemaProps{Required: []string{"standby_host"}},
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					"streams": {
 | 
										"streams": {
 | 
				
			||||||
						Type: "array",
 | 
											Type: "array",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -762,7 +762,12 @@ func (c *Cluster) generatePodTemplate(
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// generatePodEnvVars generates environment variables for the Spilo Pod
 | 
					// generatePodEnvVars generates environment variables for the Spilo Pod
 | 
				
			||||||
func (c *Cluster) generateSpiloPodEnvVars(uid types.UID, spiloConfiguration string, cloneDescription *acidv1.CloneDescription, standbyDescription *acidv1.StandbyDescription, customPodEnvVarsList []v1.EnvVar) []v1.EnvVar {
 | 
					func (c *Cluster) generateSpiloPodEnvVars(
 | 
				
			||||||
 | 
						uid types.UID,
 | 
				
			||||||
 | 
						spiloConfiguration string,
 | 
				
			||||||
 | 
						cloneDescription *acidv1.CloneDescription,
 | 
				
			||||||
 | 
						standbyDescription *acidv1.StandbyDescription,
 | 
				
			||||||
 | 
						customPodEnvVarsList []v1.EnvVar) []v1.EnvVar {
 | 
				
			||||||
	envVars := []v1.EnvVar{
 | 
						envVars := []v1.EnvVar{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Name:  "SCOPE",
 | 
								Name:  "SCOPE",
 | 
				
			||||||
| 
						 | 
					@ -1111,12 +1116,6 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef
 | 
				
			||||||
	sort.Slice(customPodEnvVarsList,
 | 
						sort.Slice(customPodEnvVarsList,
 | 
				
			||||||
		func(i, j int) bool { return customPodEnvVarsList[i].Name < customPodEnvVarsList[j].Name })
 | 
							func(i, j int) bool { return customPodEnvVarsList[i].Name < customPodEnvVarsList[j].Name })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if spec.StandbyCluster != nil {
 | 
					 | 
				
			||||||
		if spec.StandbyCluster.S3WalPath == "" && spec.StandbyCluster.GSWalPath == "" && spec.StandbyCluster.StandbyHost == "" {
 | 
					 | 
				
			||||||
			return nil, fmt.Errorf("s3_wal_path, gs_wal_path and standby_host are empty for standby cluster")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// backward compatible check for InitContainers
 | 
						// backward compatible check for InitContainers
 | 
				
			||||||
	if spec.InitContainersOld != nil {
 | 
						if spec.InitContainersOld != nil {
 | 
				
			||||||
		msg := "manifest parameter init_containers is deprecated."
 | 
							msg := "manifest parameter init_containers is deprecated."
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue