Skip to content

Commit 73f4b6a

Browse files
author
Jan Breitkopf
committed
add LOGICAL_BACKUP_FILENAME_DATE_REGION env var to the logical backup cronjob
1 parent 68c4b49 commit 73f4b6a

File tree

11 files changed

+35
-11
lines changed

11 files changed

+35
-11
lines changed

charts/postgres-operator/crds/operatorconfigurations.yaml

+3
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,9 @@ spec:
551551
default: "30 00 * * *"
552552
logical_backup_cronjob_environment_secret:
553553
type: string
554+
logical_backup_filename_date_format:
555+
type: string
556+
default: "+%s"
554557
debug:
555558
type: object
556559
properties:

charts/postgres-operator/values.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,8 @@ configLogicalBackup:
392392
logical_backup_schedule: "30 00 * * *"
393393
# secret to be used as reference for env variables in cronjob
394394
logical_backup_cronjob_environment_secret: ""
395+
# backup filename date format
396+
logical_backup_filename_date_format: ""
395397

396398
# automate creation of human users with teams API service
397399
configTeamsApi:

logical-backup/dump.sh

+4-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ ALL_DB_SIZE_QUERY="select sum(pg_database_size(datname)::numeric) from pg_databa
1010
PG_BIN=$PG_DIR/$PG_VERSION/bin
1111
DUMP_SIZE_COEFF=5
1212
ERRORCOUNT=0
13+
TIMESTAMP=$(eval time $LOGICAL_BACKUP_FILENAME_DATE_FORMAT)
1314

1415
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
1516
KUBERNETES_SERVICE_PORT=${KUBERNETES_SERVICE_PORT:-443}
@@ -45,7 +46,7 @@ function compress {
4546
}
4647

4748
function az_upload {
48-
PATH_TO_BACKUP=$LOGICAL_BACKUP_S3_BUCKET"/"$LOGICAL_BACKUP_S3_BUCKET_PREFIX"/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/"$(date +%s).sql.gz
49+
PATH_TO_BACKUP=$LOGICAL_BACKUP_S3_BUCKET"/"$LOGICAL_BACKUP_S3_BUCKET_PREFIX"/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/"$TIMESTAMP.sql.gz
4950

5051
az storage blob upload --file "$1" --account-name "$LOGICAL_BACKUP_AZURE_STORAGE_ACCOUNT_NAME" --account-key "$LOGICAL_BACKUP_AZURE_STORAGE_ACCOUNT_KEY" -c "$LOGICAL_BACKUP_AZURE_STORAGE_CONTAINER" -n "$PATH_TO_BACKUP"
5152
}
@@ -107,7 +108,7 @@ function aws_upload {
107108
# mimic bucket setup from Spilo
108109
# to keep logical backups at the same path as WAL
109110
# NB: $LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX already contains the leading "/" when set by the Postgres Operator
110-
PATH_TO_BACKUP=s3://$LOGICAL_BACKUP_S3_BUCKET"/"$LOGICAL_BACKUP_S3_BUCKET_PREFIX"/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/"$(date +%s).sql.gz
111+
PATH_TO_BACKUP=s3://$LOGICAL_BACKUP_S3_BUCKET"/"$LOGICAL_BACKUP_S3_BUCKET_PREFIX"/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/"$TIMESTAMP.sql.gz
111112

112113
args=()
113114

@@ -120,7 +121,7 @@ function aws_upload {
120121
}
121122

122123
function gcs_upload {
123-
PATH_TO_BACKUP=gs://$LOGICAL_BACKUP_S3_BUCKET"/"$LOGICAL_BACKUP_S3_BUCKET_PREFIX"/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/"$(date +%s).sql.gz
124+
PATH_TO_BACKUP=gs://$LOGICAL_BACKUP_S3_BUCKET"/"$LOGICAL_BACKUP_S3_BUCKET_PREFIX"/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/"$TIMESTAMP.sql.gz
124125

125126
gsutil -o Credentials:gs_service_key_file=$LOGICAL_BACKUP_GOOGLE_APPLICATION_CREDENTIALS cp - "$PATH_TO_BACKUP"
126127
}

manifests/configmap.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ data:
101101
logical_backup_s3_sse: "AES256"
102102
logical_backup_s3_retention_time: ""
103103
logical_backup_schedule: "30 00 * * *"
104+
logical_backup_filename_date_format: "+%s"
104105
major_version_upgrade_mode: "manual"
105106
# major_version_upgrade_team_allow_list: ""
106107
master_dns_name_format: "{cluster}.{namespace}.{hostedzone}"

pkg/apis/acid.zalan.do/v1/crds.go

+3
Original file line numberDiff line numberDiff line change
@@ -1800,6 +1800,9 @@ var OperatorConfigCRDResourceValidation = apiextv1.CustomResourceValidation{
18001800
"logical_backup_cronjob_environment_secret": {
18011801
Type: "string",
18021802
},
1803+
"logical_backup_filename_date_format": {
1804+
Type: "string",
1805+
},
18031806
},
18041807
},
18051808
"debug": {

pkg/apis/acid.zalan.do/v1/operator_configuration_type.go

+1
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ type OperatorLogicalBackupConfiguration struct {
244244
MemoryRequest string `json:"logical_backup_memory_request,omitempty"`
245245
CPULimit string `json:"logical_backup_cpu_limit,omitempty"`
246246
MemoryLimit string `json:"logical_backup_memory_limit,omitempty"`
247+
FilenameDateFormat string `json:"logical_backup_filename_date_format,omitempty"`
247248
}
248249

249250
// PatroniConfiguration defines configuration for Patroni

pkg/cluster/cluster_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -1611,6 +1611,7 @@ func TestCompareLogicalBackupJob(t *testing.T) {
16111611
LogicalBackupS3SSE: "aws:kms",
16121612
LogicalBackupS3RetentionTime: "3 months",
16131613
LogicalBackupCronjobEnvironmentSecret: "",
1614+
LogicalBackupFilenameDateFormat: "+%s",
16141615
},
16151616
},
16161617
}, client, pg, logger, eventRecorder)

pkg/cluster/k8sres.go

+4
Original file line numberDiff line numberDiff line change
@@ -2486,6 +2486,10 @@ func (c *Cluster) generateLogicalBackupPodEnvVars() []v1.EnvVar {
24862486
Name: "LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX",
24872487
Value: getBucketScopeSuffix(string(c.Postgresql.GetUID())),
24882488
},
2489+
{
2490+
Name: "LOGICAL_BACKUP_FILENAME_DATE_FORMAT",
2491+
Value: c.OpConfig.LogicalBackup.LogicalBackupFilenameDateFormat,
2492+
},
24892493
}
24902494

24912495
switch backupProvider {

pkg/cluster/k8sres_test.go

+14-8
Original file line numberDiff line numberDiff line change
@@ -3784,21 +3784,26 @@ func TestGenerateLogicalBackupPodEnvVars(t *testing.T) {
37843784
},
37853785
{
37863786
envIndex: 13,
3787+
envVarConstant: "LOGICAL_BACKUP_FILENAME_DATE_FORMAT",
3788+
envVarValue: "+%s",
3789+
},
3790+
{
3791+
envIndex: 14,
37873792
envVarConstant: "LOGICAL_BACKUP_S3_REGION",
37883793
envVarValue: "eu-central-1",
37893794
},
37903795
{
3791-
envIndex: 14,
3796+
envIndex: 15,
37923797
envVarConstant: "LOGICAL_BACKUP_S3_ENDPOINT",
37933798
envVarValue: "",
37943799
},
37953800
{
3796-
envIndex: 15,
3801+
envIndex: 16,
37973802
envVarConstant: "LOGICAL_BACKUP_S3_SSE",
37983803
envVarValue: "",
37993804
},
38003805
{
3801-
envIndex: 16,
3806+
envIndex: 17,
38023807
envVarConstant: "LOGICAL_BACKUP_S3_RETENTION_TIME",
38033808
envVarValue: "1 month",
38043809
},
@@ -3811,7 +3816,7 @@ func TestGenerateLogicalBackupPodEnvVars(t *testing.T) {
38113816
envVarValue: "gcs",
38123817
},
38133818
{
3814-
envIndex: 13,
3819+
envIndex: 14,
38153820
envVarConstant: "LOGICAL_BACKUP_GOOGLE_APPLICATION_CREDENTIALS",
38163821
envVarValue: "some-path-to-credentials",
38173822
},
@@ -3824,25 +3829,25 @@ func TestGenerateLogicalBackupPodEnvVars(t *testing.T) {
38243829
envVarValue: "az",
38253830
},
38263831
{
3827-
envIndex: 13,
3832+
envIndex: 14,
38283833
envVarConstant: "LOGICAL_BACKUP_AZURE_STORAGE_ACCOUNT_NAME",
38293834
envVarValue: "some-azure-storage-account-name",
38303835
},
38313836
{
3832-
envIndex: 14,
3837+
envIndex: 15,
38333838
envVarConstant: "LOGICAL_BACKUP_AZURE_STORAGE_CONTAINER",
38343839
envVarValue: "some-azure-storage-container",
38353840
},
38363841
{
3837-
envIndex: 15,
3842+
envIndex: 16,
38383843
envVarConstant: "LOGICAL_BACKUP_AZURE_STORAGE_ACCOUNT_KEY",
38393844
envVarValue: "some-azure-storage-account-key",
38403845
},
38413846
}
38423847

38433848
expectedLogicalBackupRetentionTime := []ExpectedValue{
38443849
{
3845-
envIndex: 16,
3850+
envIndex: 17,
38463851
envVarConstant: "LOGICAL_BACKUP_S3_RETENTION_TIME",
38473852
envVarValue: "3 months",
38483853
},
@@ -3861,6 +3866,7 @@ func TestGenerateLogicalBackupPodEnvVars(t *testing.T) {
38613866
LogicalBackupProvider: "s3",
38623867
LogicalBackupS3Bucket: dummyBucket,
38633868
LogicalBackupS3BucketPrefix: "spilo",
3869+
LogicalBackupFilenameDateFormat: "+%s",
38643870
LogicalBackupS3Region: "eu-central-1",
38653871
LogicalBackupS3RetentionTime: "1 month",
38663872
},

pkg/controller/operator_config.go

+1
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur
200200
result.LogicalBackupMemoryRequest = fromCRD.LogicalBackup.MemoryRequest
201201
result.LogicalBackupCPULimit = fromCRD.LogicalBackup.CPULimit
202202
result.LogicalBackupMemoryLimit = fromCRD.LogicalBackup.MemoryLimit
203+
result.LogicalBackupFilenameDateFormat = fromCRD.LogicalBackup.FilenameDateFormat
203204

204205
// debug config
205206
result.DebugLogging = fromCRD.OperatorDebug.DebugLogging

pkg/util/config/config.go

+1
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ type LogicalBackup struct {
129129
LogicalBackupSchedule string `name:"logical_backup_schedule" default:"30 00 * * *"`
130130
LogicalBackupDockerImage string `name:"logical_backup_docker_image" default:"ghcr.io/zalando/postgres-operator/logical-backup:v1.14.0"`
131131
LogicalBackupProvider string `name:"logical_backup_provider" default:"s3"`
132+
LogicalBackupFilenameDateFormat string `name:"logical_backup_filename_date_format"`
132133
LogicalBackupAzureStorageAccountName string `name:"logical_backup_azure_storage_account_name" default:""`
133134
LogicalBackupAzureStorageContainer string `name:"logical_backup_azure_storage_container" default:""`
134135
LogicalBackupAzureStorageAccountKey string `name:"logical_backup_azure_storage_account_key" default:""`

0 commit comments

Comments
 (0)