Skip to content

Commit bcbd95d

Browse files
author
Jeff McCormick
committed
add --pgbackrest-opts into pgo backup and pgo restore commands
1 parent afcf9f0 commit bcbd95d

File tree

11 files changed

+46
-49
lines changed

11 files changed

+46
-49
lines changed

apiserver/backrestservice/backrestimpl.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ const backrestInfoCommand = "info"
3434
const containername = "database"
3535

3636
// CreateBackup ...
37-
// pgo backrest mycluster
38-
// pgo backrest --selector=name=mycluster
37+
// pgo backup mycluster
38+
// pgo backup --selector=name=mycluster
3939
func CreateBackup(request *msgs.CreateBackrestBackupRequest) msgs.CreateBackrestBackupResponse {
4040
resp := msgs.CreateBackrestBackupResponse{}
4141
resp.Status.Code = msgs.Ok
@@ -122,7 +122,7 @@ func CreateBackup(request *msgs.CreateBackrestBackupRequest) msgs.CreateBackrest
122122
return resp
123123
}
124124

125-
err = kubeapi.Createpgtask(apiserver.RESTClient, getBackupParams(clusterName, taskName, crv1.PgtaskBackrestBackup, podname, "database"), apiserver.Namespace)
125+
err = kubeapi.Createpgtask(apiserver.RESTClient, getBackupParams(clusterName, taskName, crv1.PgtaskBackrestBackup, podname, "database", request.BackupOpts), apiserver.Namespace)
126126
if err != nil {
127127
resp.Status.Code = msgs.Error
128128
resp.Status.Msg = err.Error()
@@ -135,7 +135,7 @@ func CreateBackup(request *msgs.CreateBackrestBackupRequest) msgs.CreateBackrest
135135
return resp
136136
}
137137

138-
func getBackupParams(clusterName, taskName, action, podName, containerName string) *crv1.Pgtask {
138+
func getBackupParams(clusterName, taskName, action, podName, containerName, backupOpts string) *crv1.Pgtask {
139139
var newInstance *crv1.Pgtask
140140

141141
spec := crv1.PgtaskSpec{}
@@ -146,6 +146,7 @@ func getBackupParams(clusterName, taskName, action, podName, containerName strin
146146
spec.Parameters[util.LABEL_POD_NAME] = podName
147147
spec.Parameters[util.LABEL_CONTAINER_NAME] = containerName
148148
spec.Parameters[util.LABEL_BACKREST_COMMAND] = action
149+
spec.Parameters[util.LABEL_BACKREST_OPTS] = backupOpts
149150

150151
newInstance = &crv1.Pgtask{
151152
ObjectMeta: meta_v1.ObjectMeta{

apiserver/backupservice/backupimpl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func CreateBackup(request *msgs.CreateBackupRequest) msgs.CreateBackupResponse {
173173
break
174174
}
175175
if request.PVCName != "" {
176-
log.Debug("jeff----> backuppvc is " + request.PVCName)
176+
log.Debug("backuppvc is " + request.PVCName)
177177
newInstance.Spec.BackupPVC = request.PVCName
178178
}
179179

apiservermsgs/backrestmsgs.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ type CreateBackrestBackupResponse struct {
2727

2828
// CreateBackrestBackupRequest ...
2929
type CreateBackrestBackupRequest struct {
30-
Namespace string
31-
Args []string
32-
Selector string
30+
Namespace string
31+
Args []string
32+
Selector string
33+
BackupOpts string
3334
}
3435

3536
type ShowBackrestDetail struct {

conf/postgres-operator/backrest-job.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
"env": [{
3232
"name": "COMMAND",
3333
"value": "{{.Command}}"
34+
}, {
35+
"name": "COMMAND_OPTS",
36+
"value": "{{.CommandOpts}}"
3437
}, {
3538
"name": "PODNAME",
3639
"value": "{{.PodName}}"

hugo/content/getting-started/_index.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,11 @@ Create a pgBackRest backup:
279279
pgo backup mycluster --backup-type=pgbackrest
280280
....
281281

282+
You can also pass in pgbackrest backup command options:
283+
....
284+
pgo backup mycluster --backup-type=pgbackrest --pgbackrest-opts="--type=incr"
285+
....
286+
282287
Obtain pgBackRest information:
283288
....
284289
pgo show backup mycluster --backup-type=pgbackrest

operator/backrest/backup.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type backrestJobTemplateFields struct {
3232
Name string
3333
ClusterName string
3434
Command string
35+
CommandOpts string
3536
PodName string
3637
COImagePrefix string
3738
COImageTag string
@@ -42,10 +43,13 @@ func Backrest(namespace string, clientset *kubernetes.Clientset, task *crv1.Pgta
4243

4344
//create the Job to run the backrest command
4445

46+
cmd := task.Spec.Parameters[util.LABEL_BACKREST_COMMAND]
47+
4548
jobFields := backrestJobTemplateFields{
4649
ClusterName: task.Spec.Parameters[util.LABEL_PG_CLUSTER],
4750
PodName: task.Spec.Parameters[util.LABEL_POD_NAME],
48-
Command: task.Spec.Parameters[util.LABEL_BACKREST_COMMAND],
51+
Command: cmd,
52+
CommandOpts: task.Spec.Parameters[util.LABEL_BACKREST_OPTS],
4953
COImagePrefix: operator.Pgo.Pgo.COImagePrefix,
5054
COImageTag: operator.Pgo.Pgo.COImageTag,
5155
}

pgo-backrest/pgo-backrest.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
)
1414

1515
var Clientset *kubernetes.Clientset
16-
var COMMAND, PODNAME, Namespace string
1716

1817
const sourceCommand = `source /.bashrc && `
1918
const backrestCommand = "pgbackrest"
@@ -36,20 +35,28 @@ func main() {
3635
log.Info("debug flag set to false")
3736
}
3837

39-
Namespace = os.Getenv("NAMESPACE")
38+
Namespace := os.Getenv("NAMESPACE")
4039
log.Debug("setting NAMESPACE to " + Namespace)
4140
if Namespace == "" {
4241
log.Error("NAMESPACE env var not set")
4342
os.Exit(2)
4443
}
4544

46-
COMMAND = os.Getenv("COMMAND")
45+
COMMAND := os.Getenv("COMMAND")
4746
log.Debug("setting COMMAND to " + COMMAND)
4847
if COMMAND == "" {
4948
log.Error("COMMAND env var not set")
5049
os.Exit(2)
5150
}
52-
PODNAME = os.Getenv("PODNAME")
51+
52+
COMMAND_OPTS := os.Getenv("COMMAND_OPTS")
53+
log.Debug("setting COMMAND_OPTS to " + COMMAND_OPTS)
54+
if COMMAND_OPTS == "" {
55+
log.Error("COMMAND_OPTS env var not set")
56+
os.Exit(2)
57+
}
58+
59+
PODNAME := os.Getenv("PODNAME")
5360
log.Debug("setting PODNAME to " + PODNAME)
5461
if PODNAME == "" {
5562
log.Error("PODNAME env var not set")
@@ -78,12 +85,14 @@ func main() {
7885
cmd = append(cmd, backrestCommand)
7986
cmd = append(cmd, backrestStanza)
8087
cmd = append(cmd, backrestBackupCommand)
88+
cmd = append(cmd, COMMAND_OPTS)
8189
case crv1.PgtaskBackrestBackup:
8290
log.Info("backrest backup command requested")
8391
cmd = append(cmd, sourceCommand)
8492
cmd = append(cmd, backrestCommand)
8593
cmd = append(cmd, backrestStanza)
8694
cmd = append(cmd, backrestBackupCommand)
95+
cmd = append(cmd, COMMAND_OPTS)
8796
default:
8897
log.Error("unsupported backup command specified " + COMMAND)
8998
os.Exit(2)

pgo/cmd/backrest.go

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,47 +21,19 @@ import (
2121
log "github.com/Sirupsen/logrus"
2222
msgs "github.com/crunchydata/postgres-operator/apiservermsgs"
2323
"github.com/crunchydata/postgres-operator/pgo/api"
24-
"github.com/crunchydata/postgres-operator/pgo/util"
25-
"github.com/spf13/cobra"
2624
"os"
2725
)
2826

29-
var backRestCmd = &cobra.Command{
30-
Use: "backrest",
31-
Short: "Perform a pgBackRest action",
32-
Long: `BACKREST performs a pgBackRest action. For example:
33-
34-
pgo backrest mycluster`,
35-
Run: func(cmd *cobra.Command, args []string) {
36-
log.Debug("backup called")
37-
if len(args) == 0 && Selector == "" {
38-
fmt.Println(`Error: You must specify the cluster to perform an action on or a cluster selector flag.`)
39-
} else {
40-
if util.AskForConfirmation(NoPrompt, "") {
41-
createBackrestBackup(args)
42-
} else {
43-
fmt.Println("Aborting...")
44-
}
45-
}
46-
47-
},
48-
}
49-
50-
func init() {
51-
RootCmd.AddCommand(backRestCmd)
52-
53-
backRestCmd.Flags().StringVarP(&Selector, "selector", "s", "", "The selector to use for cluster filtering.")
54-
backRestCmd.Flags().BoolVarP(&NoPrompt, "no-prompt", "n", false, "No command line confirmation.")
55-
56-
}
27+
var BackrestOpts string
5728

5829
// createBackrestBackup ....
59-
func createBackrestBackup(args []string) {
60-
log.Debugf("createBackrestBackup called %v\n", args)
30+
func createBackrestBackup(args []string, backupOpts string) {
31+
log.Debugf("createBackrestBackup called %v %s\n", args, backupOpts)
6132

6233
request := new(msgs.CreateBackrestBackupRequest)
6334
request.Args = args
6435
request.Selector = Selector
36+
request.BackupOpts = backupOpts
6537

6638
response, err := api.CreateBackrestBackup(httpclient, &SessionCredentials, request)
6739
if err != nil {

pgo/cmd/backup.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ var backupCmd = &cobra.Command{
4343
} else {
4444
if util.AskForConfirmation(NoPrompt, "") {
4545
if BackupType == labelutil.LABEL_BACKUP_TYPE_BACKREST {
46-
createBackrestBackup(args)
46+
createBackrestBackup(args, BackrestOpts)
4747
} else if BackupType == labelutil.LABEL_BACKUP_TYPE_BASEBACKUP {
4848
createBackup(args)
4949
} else {
@@ -65,6 +65,7 @@ func init() {
6565
backupCmd.Flags().StringVarP(&StorageConfig, "storage-config", "", "", "The name of a Storage config in pgo.yaml to use for the cluster storage.")
6666
backupCmd.Flags().BoolVarP(&NoPrompt, "no-prompt", "n", false, "No command line confirmation.")
6767
backupCmd.Flags().StringVarP(&BackupType, "backup-type", "", "", "The backup type to perform. Default is pgbasebackup, and both pgbasebackup and pgbackrest are valid backup types.")
68+
backupCmd.Flags().StringVarP(&BackrestOpts, "pgbackrest-opts", "", "", "The pgbackrest backup options to pass.")
6869

6970
}
7071

pgo/cmd/restore.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
)
2727

2828
var ToPVC string
29-
var RestoreOpts string
3029
var PITRTarget string
3130

3231
var restoreCmd = &cobra.Command{
@@ -61,7 +60,7 @@ func init() {
6160
RootCmd.AddCommand(restoreCmd)
6261

6362
restoreCmd.Flags().StringVarP(&ToPVC, "to-pvc", "", "", "The name of the new PVC to restore to.")
64-
restoreCmd.Flags().StringVarP(&RestoreOpts, "restore-opts", "", "", "The options for the restore.")
63+
restoreCmd.Flags().StringVarP(&BackrestOpts, "pgbackrest-opts", "", "", "The pgbackrest options for the restore.")
6564
restoreCmd.Flags().StringVarP(&PITRTarget, "pitr-target", "", "", "The PITR target, being a PostgreSQL timestamp such as '2018-08-13 11:25:42.582117-04'.")
6665

6766
}
@@ -73,7 +72,7 @@ func restore(args []string) {
7372
request := new(msgs.RestoreRequest)
7473
request.FromCluster = args[0]
7574
request.ToPVC = ToPVC
76-
request.RestoreOpts = RestoreOpts
75+
request.RestoreOpts = BackrestOpts
7776

7877
response, err := api.Restore(httpclient, &SessionCredentials, request)
7978
if err != nil {

0 commit comments

Comments
 (0)